diff --git a/orange-demo-flowable/orange-demo-flowable-service/.gitignore b/orange-demo-flowable/orange-demo-flowable-service/.gitignore new file mode 100644 index 00000000..ac242580 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/.gitignore @@ -0,0 +1,26 @@ +/target/ +!.mvn/wrapper/maven-wrapper.jar +/.mvn/* + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/README.md b/orange-demo-flowable/orange-demo-flowable-service/README.md new file mode 100644 index 00000000..0939c817 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/README.md @@ -0,0 +1,15 @@ +### 服务接口文档 +--- +- Postman + - 无需启动服务,即可将当前工程的接口导出成Postman格式。在工程的common/common-tools/模块下,找到ExportApiApp文件,并执行main函数。 + +### 服务启动环境依赖 +--- + +执行docker-compose up -d 命令启动下面依赖的服务。 +执行docker-compose down 命令停止下面服务。 + +- Redis + - 版本:4 + - 端口: 6379 + - 推荐客户端工具 [AnotherRedisDesktopManager](https://github.com/qishibo/AnotherRedisDesktopManager) diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/pom.xml new file mode 100644 index 00000000..628a6304 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/pom.xml @@ -0,0 +1,82 @@ + + + + com.flow.demo + DemoFlow + 1.0.0 + + 4.0.0 + + application-webadmin + 1.0.0 + application + jar + + + + + com.flow.demo + common-redis + 1.0.0 + + + com.flow.demo + common-online-api + 1.0.0 + + + com.flow.demo + common-flow-online + 1.0.0 + + + com.flow.demo + common-log + 1.0.0 + + + com.flow.demo + common-sequence + 1.0.0 + + + com.flow.demo + common-datafilter + 1.0.0 + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + repackage + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/WebAdminApplication.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/WebAdminApplication.java new file mode 100644 index 00000000..dcecef95 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/WebAdminApplication.java @@ -0,0 +1,23 @@ +package com.flow.demo.webadmin; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; + +/** + * 应用服务启动类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EnableAsync +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +@ComponentScan("com.flow.demo") +public class WebAdminApplication { + + public static void main(String[] args) { + SpringApplication.run(WebAdminApplication.class, args); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/controller/AreaCodeController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/controller/AreaCodeController.java new file mode 100644 index 00000000..6d88cd24 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/controller/AreaCodeController.java @@ -0,0 +1,72 @@ +package com.flow.demo.webadmin.app.controller; + +import cn.jimmyshi.beanquery.BeanQuery; +import com.flow.demo.webadmin.app.model.AreaCode; +import com.flow.demo.webadmin.app.service.AreaCodeService; +import com.flow.demo.common.core.object.ResponseResult; +import com.flow.demo.common.core.annotation.MyRequestBody; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; + +/** + * 行政区划数据访问接口类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@RestController +@RequestMapping("/admin/app/areaCode") +public class AreaCodeController { + + @Autowired + private AreaCodeService areaCodeService; + + /** + * 按照字典的形式返回行政区划列表。 + * + * @return 字典形式的行政区划列表。 + */ + @GetMapping("/listDict") + public ResponseResult>> listDict() { + List resultList = areaCodeService.getAllListFromCache(); + return ResponseResult.success(BeanQuery.select( + "parentId as parentId", "areaId as id", "areaName as name").executeFrom(resultList)); + } + + /** + * 根据上级行政区划Id获取其下级行政区划列表。 + * + * @param parentId 上级行政区划Id。 + * @return 按照字典的形式返回下级行政区划列表。 + */ + @GetMapping("/listDictByParentId") + public ResponseResult>> listDictByParentId(@RequestParam(required = false) Long parentId) { + Collection resultList = areaCodeService.getListByParentId(parentId); + if (CollectionUtils.isEmpty(resultList)) { + return ResponseResult.success(new LinkedList<>()); + } + return ResponseResult.success(BeanQuery.select( + "parentId as parentId", "areaId as id", "areaName as name").executeFrom(resultList)); + } + + /** + * 根据字典Id集合,获取查询后的字典数据。 + * + * @param dictIds 字典Id集合。 + * @return 字典形式的行政区划列表。 + */ + @PostMapping("/listDictByIds") + public ResponseResult>> listDictByIds( + @MyRequestBody(elementType = Long.class) List dictIds) { + List resultList = areaCodeService.getInList(new HashSet<>(dictIds)); + return ResponseResult.success(BeanQuery.select( + "parentId as parentId", "areaId as id", "areaName as name").executeFrom(resultList)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/dao/AreaCodeMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/dao/AreaCodeMapper.java new file mode 100644 index 00000000..21e069c4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/dao/AreaCodeMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.webadmin.app.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.app.model.AreaCode; + +/** + * 行政区划数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface AreaCodeMapper extends BaseDaoMapper { +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/dao/mapper/AreaCodeMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/dao/mapper/AreaCodeMapper.xml new file mode 100644 index 00000000..dd9cdadd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/dao/mapper/AreaCodeMapper.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/model/AreaCode.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/model/AreaCode.java new file mode 100644 index 00000000..bbf3026d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/model/AreaCode.java @@ -0,0 +1,39 @@ +package com.flow.demo.webadmin.app.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 行政区划实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_area_code") +public class AreaCode { + + /** + * 行政区划主键Id + */ + @TableId(value = "area_id") + private Long areaId; + + /** + * 行政区划名称 + */ + @TableField(value = "area_name") + private String areaName; + + /** + * 行政区划级别 (1: 省级别 2: 市级别 3: 区级别) + */ + @TableField(value = "area_level") + private Integer areaLevel; + + /** + * 父级行政区划Id + */ + @TableField(value = "parent_id") + private Long parentId; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/service/AreaCodeService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/service/AreaCodeService.java new file mode 100644 index 00000000..df824c5b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/service/AreaCodeService.java @@ -0,0 +1,23 @@ +package com.flow.demo.webadmin.app.service; + +import com.flow.demo.common.core.base.service.IBaseDictService; +import com.flow.demo.webadmin.app.model.AreaCode; + +import java.util.Collection; + +/** + * 行政区划的Service接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface AreaCodeService extends IBaseDictService { + + /** + * 根据上级行政区划Id,获取其下级行政区划列表。 + * + * @param parentId 上级行政区划Id。 + * @return 下级行政区划列表。 + */ + Collection getListByParentId(Long parentId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/service/impl/AreaCodeServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/service/impl/AreaCodeServiceImpl.java new file mode 100644 index 00000000..a4d02a74 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/service/impl/AreaCodeServiceImpl.java @@ -0,0 +1,52 @@ +package com.flow.demo.webadmin.app.service.impl; + +import com.flow.demo.webadmin.app.service.AreaCodeService; +import com.flow.demo.webadmin.app.dao.AreaCodeMapper; +import com.flow.demo.webadmin.app.model.AreaCode; +import com.flow.demo.common.core.cache.MapTreeDictionaryCache; +import com.flow.demo.common.core.base.service.BaseDictService; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.Collection; + +/** + * 行政区划的Service类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Service("areaCodeService") +public class AreaCodeServiceImpl extends BaseDictService implements AreaCodeService { + + @Autowired + private AreaCodeMapper areaCodeMapper; + + public AreaCodeServiceImpl() { + super(); + this.dictionaryCache = MapTreeDictionaryCache.create(AreaCode::getAreaId, AreaCode::getParentId); + } + + @PostConstruct + public void init() { + this.reloadCachedData(true); + } + + @Override + protected BaseDaoMapper mapper() { + return areaCodeMapper; + } + + /** + * 根据上级行政区划Id,获取其下级行政区划列表。 + * + * @param parentId 上级行政区划Id。 + * @return 下级行政区划列表。 + */ + @Override + public Collection getListByParentId(Long parentId) { + return ((MapTreeDictionaryCache) dictionaryCache).getListByParentId(parentId); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/util/FlowDeptPostExtHelper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/util/FlowDeptPostExtHelper.java new file mode 100644 index 00000000..a00a4e8b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/util/FlowDeptPostExtHelper.java @@ -0,0 +1,45 @@ +package com.flow.demo.webadmin.app.util; + +import cn.hutool.core.collection.CollUtil; +import com.flow.demo.common.flow.util.BaseFlowDeptPostExtHelper; +import com.flow.demo.common.flow.util.FlowCustomExtFactory; +import com.flow.demo.webadmin.upms.service.SysDeptService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.List; + +/** + * 为流程提供所需的部门岗位等扩展信息的帮助类。如本部门领导岗位和上级部门领导岗位。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Component +public class FlowDeptPostExtHelper implements BaseFlowDeptPostExtHelper { + + @Autowired + private SysDeptService sysDeptService; + @Autowired + private FlowCustomExtFactory flowCustomExtFactory; + + @PostConstruct + public void doRegister() { + flowCustomExtFactory.registerFlowDeptPostExtHelper(this); + } + + @Override + public Long getLeaderDeptPostId(Long deptId) { + List deptPostIdList = sysDeptService.getLeaderDeptPostIdList(deptId); + return CollUtil.isEmpty(deptPostIdList) ? null : deptPostIdList.get(0); + } + + @Override + public Long getUpLeaderDeptPostId(Long deptId) { + List deptPostIdList = sysDeptService.getUpLeaderDeptPostIdList(deptId); + return CollUtil.isEmpty(deptPostIdList) ? null : deptPostIdList.get(0); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/vo/AreaCodeVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/vo/AreaCodeVo.java new file mode 100644 index 00000000..7e1051a5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/app/vo/AreaCodeVo.java @@ -0,0 +1,33 @@ +package com.flow.demo.webadmin.app.vo; + +import lombok.Data; + +/** + * 行政区划DomainVO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class AreaCodeVo { + + /** + * 行政区划主键Id + */ + private Long areaId; + + /** + * 行政区划名称 + */ + private String areaName; + + /** + * 行政区划级别 (1: 省级别 2: 市级别 3: 区级别) + */ + private Integer areaLevel; + + /** + * 父级行政区划Id + */ + private Long parentId; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/ApplicationConfig.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/ApplicationConfig.java new file mode 100644 index 00000000..2be23ed5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/ApplicationConfig.java @@ -0,0 +1,51 @@ +package com.flow.demo.webadmin.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * 应用程序自定义的程序属性配置文件。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@Configuration +@ConfigurationProperties(prefix = "application") +public class ApplicationConfig { + + /** + * token的Http Request Header的key + */ + private String tokenHeaderKey; + /** + * token在过期之前,但是已经需要被刷新时,response返回的header信息的key。 + */ + private String refreshedTokenHeaderKey; + /** + * token 加密用的密钥,该值的长度最少10个字符(过短会报错)。 + */ + private String tokenSigningKey; + /** + * 令牌的过期时间,单位毫秒 + */ + private Long expiration; + /** + * 用户密码被重置之后的缺省密码 + */ + private String defaultUserPassword; + /** + * 上传文件的基础目录 + */ + private String uploadFileBaseDir; + /** + * 授信ip列表,没有填写表示全部信任。多个ip之间逗号分隔,如: http://10.10.10.1:8080,http://10.10.10.2:8080 + */ + private String credentialIpList; + /** + * Session的用户权限在Redis中的过期时间(秒)。 + * 缺省值是 one day + */ + private int sessionExpiredSeconds = 86400; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/DataSourceType.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/DataSourceType.java new file mode 100644 index 00000000..92876210 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/DataSourceType.java @@ -0,0 +1,36 @@ +package com.flow.demo.webadmin.config; + +import java.util.HashMap; +import java.util.Map; + +/** + * 表示数据源类型的常量对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class DataSourceType { + + public static final int MAIN = 0; + + private static final Map TYPE_MAP = new HashMap<>(2); + static { + TYPE_MAP.put("main", MAIN); + } + + /** + * 根据名称获取字典类型。 + * + * @param name 数据源在配置中的名称。 + * @return 返回可用于多数据源切换的数据源类型。 + */ + public static Integer getDataSourceTypeByName(String name) { + return TYPE_MAP.get(name); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private DataSourceType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/FilterConfig.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/FilterConfig.java new file mode 100644 index 00000000..2e9d2117 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/FilterConfig.java @@ -0,0 +1,57 @@ +package com.flow.demo.webadmin.config; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +import javax.servlet.Filter; +import java.nio.charset.StandardCharsets; + +/** + * 这里主要配置Web的各种过滤器和监听器等Servlet容器组件。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +public class FilterConfig { + + /** + * 配置Ajax跨域过滤器。 + */ + @Bean + public CorsFilter corsFilterRegistration(ApplicationConfig applicationConfig) { + UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); + CorsConfiguration corsConfiguration = new CorsConfiguration(); + if (StringUtils.isNotBlank(applicationConfig.getCredentialIpList())) { + String[] credentialIpList = StringUtils.split(applicationConfig.getCredentialIpList(), ","); + if (credentialIpList.length > 0) { + for (String ip : credentialIpList) { + corsConfiguration.addAllowedOrigin(ip); + } + } + corsConfiguration.addAllowedHeader("*"); + corsConfiguration.addAllowedMethod("*"); + corsConfiguration.addExposedHeader(applicationConfig.getRefreshedTokenHeaderKey()); + corsConfiguration.setAllowCredentials(true); + configSource.registerCorsConfiguration("/**", corsConfiguration); + } + return new CorsFilter(configSource); + } + + @Bean + public FilterRegistrationBean characterEncodingFilterRegistration() { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>( + new org.springframework.web.filter.CharacterEncodingFilter()); + filterRegistrationBean.addUrlPatterns("/*"); + filterRegistrationBean.addInitParameter("encoding", StandardCharsets.UTF_8.name()); + // forceEncoding强制response也被编码,另外即使request中已经设置encoding,forceEncoding也会重新设置 + filterRegistrationBean.addInitParameter("forceEncoding", "true"); + filterRegistrationBean.setAsyncSupported(true); + return filterRegistrationBean; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/InterceptorConfig.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/InterceptorConfig.java new file mode 100644 index 00000000..854e9fbc --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/InterceptorConfig.java @@ -0,0 +1,21 @@ +package com.flow.demo.webadmin.config; + +import com.flow.demo.webadmin.interceptor.AuthenticationInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 所有的项目拦截器都在这里集中配置 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +public class InterceptorConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new AuthenticationInterceptor()).addPathPatterns("/admin/**"); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/MultiDataSourceConfig.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/MultiDataSourceConfig.java new file mode 100644 index 00000000..b7440328 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/config/MultiDataSourceConfig.java @@ -0,0 +1,44 @@ +package com.flow.demo.webadmin.config; + +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import com.flow.demo.common.core.config.DynamicDataSource; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.mybatis.spring.annotation.MapperScan; + +import javax.sql.DataSource; +import java.util.HashMap; +import java.util.Map; + +/** + * 多数据源配置对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +@EnableTransactionManagement +@MapperScan(value = {"com.flow.demo.webadmin.*.dao", "com.flow.demo.common.*.dao"}) +public class MultiDataSourceConfig { + + @Bean(initMethod = "init", destroyMethod = "close") + @ConfigurationProperties(prefix = "spring.datasource.druid.main") + public DataSource mainDataSource() { + return DruidDataSourceBuilder.create().build(); + } + + @Bean + @Primary + public DynamicDataSource dataSource() { + Map targetDataSources = new HashMap<>(1); + targetDataSources.put(DataSourceType.MAIN, mainDataSource()); + // 如果当前工程支持在线表单,这里请务必保证upms数据表所在数据库为缺省数据源。 + DynamicDataSource dynamicDataSource = new DynamicDataSource(); + dynamicDataSource.setTargetDataSources(targetDataSources); + dynamicDataSource.setDefaultTargetDataSource(mainDataSource()); + return dynamicDataSource; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/interceptor/AuthenticationInterceptor.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/interceptor/AuthenticationInterceptor.java new file mode 100644 index 00000000..611a4cca --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/interceptor/AuthenticationInterceptor.java @@ -0,0 +1,139 @@ +package com.flow.demo.webadmin.interceptor; + +import com.alibaba.fastjson.JSON; +import com.flow.demo.webadmin.config.ApplicationConfig; +import com.flow.demo.webadmin.upms.model.SysPermWhitelist; +import com.flow.demo.webadmin.upms.service.SysPermWhitelistService; +import com.flow.demo.webadmin.upms.service.SysPermService; +import com.flow.demo.common.core.annotation.NoAuthInterface; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.ResponseResult; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.core.util.ApplicationContextHolder; +import com.flow.demo.common.core.util.JwtUtil; +import com.flow.demo.common.core.util.RedisKeyUtil; +import io.jsonwebtoken.Claims; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RBucket; +import org.redisson.api.RSet; +import org.redisson.api.RedissonClient; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Set; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 登录用户Token验证、生成和权限验证的拦截器。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class AuthenticationInterceptor implements HandlerInterceptor { + + private final ApplicationConfig appConfig = + ApplicationContextHolder.getBean("applicationConfig"); + + private final RedissonClient redissonClient = ApplicationContextHolder.getBean(RedissonClient.class); + + private final SysPermService sysPermService = + ApplicationContextHolder.getBean(SysPermService.class); + + private static SysPermWhitelistService sysPermWhitelistService = + ApplicationContextHolder.getBean(SysPermWhitelistService.class); + + private static Set whitelistPermSet; + + static { + List sysPermWhitelistList = sysPermWhitelistService.getAllList(); + whitelistPermSet = sysPermWhitelistList.stream() + .map(SysPermWhitelist::getPermUrl).collect(Collectors.toSet()); + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + String url = request.getRequestURI(); + // 如果接口方法标记NoAuthInterface注解,可以直接跳过Token鉴权验证,这里主要为了测试接口方便 + if (handler instanceof HandlerMethod) { + HandlerMethod hm = (HandlerMethod) handler; + if (hm.getBeanType().getAnnotation(NoAuthInterface.class) != null + || hm.getMethodAnnotation(NoAuthInterface.class) != null) { + return true; + } + } + String token = request.getHeader(appConfig.getTokenHeaderKey()); + if (StringUtils.isBlank(token)) { + token = request.getParameter(appConfig.getTokenHeaderKey()); + } + Claims c = JwtUtil.parseToken(token, appConfig.getTokenSigningKey()); + if (JwtUtil.isNullOrExpired(c)) { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + this.outputResponseMessage(response, + ResponseResult.error(ErrorCodeEnum.UNAUTHORIZED_LOGIN, "用户会话已过期或尚未登录,请重新登录!")); + return false; + } + String sessionId = (String) c.get("sessionId"); + String sessionIdKey = RedisKeyUtil.makeSessionIdKey(sessionId); + RBucket sessionData = redissonClient.getBucket(sessionIdKey); + TokenData tokenData = null; + if (sessionData.isExists()) { + tokenData = JSON.parseObject(sessionData.get(), TokenData.class); + } + if (tokenData == null) { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + this.outputResponseMessage(response, + ResponseResult.error(ErrorCodeEnum.UNAUTHORIZED_LOGIN, "用户会话已失效,请重新登录!")); + return false; + } + TokenData.addToRequest(tokenData); + // 如果url在权限资源白名单中,则不需要进行鉴权操作 + if (Boolean.FALSE.equals(tokenData.getIsAdmin()) && !whitelistPermSet.contains(url)) { + RSet permSet = redissonClient.getSet(RedisKeyUtil.makeSessionPermIdKey(sessionId)); + if (!permSet.contains(url)) { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + this.outputResponseMessage(response, ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION)); + return false; + } + } + if (JwtUtil.needToRefresh(c)) { + String refreshedToken = JwtUtil.generateToken(c, appConfig.getExpiration(), appConfig.getTokenSigningKey()); + response.addHeader(appConfig.getRefreshedTokenHeaderKey(), refreshedToken); + } + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + // 这里需要空注解,否则sonar会不happy。 + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + // 这里需要空注解,否则sonar会不happy。 + } + + private void outputResponseMessage(HttpServletResponse response, ResponseResult respObj) { + PrintWriter out; + try { + out = response.getWriter(); + } catch (IOException e) { + log.error("Failed to call OutputResponseMessage.", e); + return; + } + response.setContentType("application/json; charset=utf-8"); + out.print(JSON.toJSONString(respObj)); + out.flush(); + out.close(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/LoginController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/LoginController.java new file mode 100644 index 00000000..23bdd2c3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/LoginController.java @@ -0,0 +1,292 @@ +package com.flow.demo.webadmin.upms.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import lombok.extern.slf4j.Slf4j; +import com.flow.demo.webadmin.config.ApplicationConfig; +import com.flow.demo.webadmin.upms.service.*; +import com.flow.demo.webadmin.upms.model.*; +import com.flow.demo.webadmin.upms.model.constant.SysUserStatus; +import com.flow.demo.webadmin.upms.model.constant.SysUserType; +import com.flow.demo.webadmin.upms.model.constant.SysMenuType; +import com.flow.demo.webadmin.upms.model.constant.SysOnlineMenuPermType; +import com.flow.demo.common.online.util.OnlineUtil; +import com.flow.demo.common.online.model.OnlineDatasource; +import com.flow.demo.common.online.service.OnlineDatasourceService; +import com.flow.demo.common.online.api.config.OnlineApiProperties; +import com.flow.demo.common.core.annotation.NoAuthInterface; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ApplicationConstant; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.redis.cache.SessionCacheHelper; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.*; + +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 登录接口控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/login") +public class LoginController { + + @Autowired + private SysUserService sysUserService; + @Autowired + private SysMenuService sysMenuService; + @Autowired + private SysPermCodeService sysPermCodeService; + @Autowired + private SysPermService sysPermService; + @Autowired + private SysPostService sysPostService; + @Autowired + private SysDataPermService sysDataPermService; + @Autowired + private OnlineDatasourceService onlineDatasourceService; + @Autowired + private OnlineApiProperties onlineProperties; + @Autowired + private ApplicationConfig appConfig; + @Autowired + private RedissonClient redissonClient; + @Autowired + private SessionCacheHelper cacheHelper; + @Autowired + private PasswordEncoder passwordEncoder; + + /** + * 登录接口。 + * + * @param loginName 登录名。 + * @param password 密码。 + * @return 应答结果对象,其中包括JWT的Token数据,以及菜单列表。 + */ + @NoAuthInterface + @PostMapping("/doLogin") + public ResponseResult doLogin( + @MyRequestBody String loginName, @MyRequestBody String password) throws Exception { + if (MyCommonUtil.existBlankArgument(loginName, password)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysUser user = sysUserService.getSysUserByLoginName(loginName); + password = URLDecoder.decode(password, StandardCharsets.UTF_8.name()); + // NOTE: 第一次使用时,请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。 + // 执行RsaUtil工具类中的main函数,可以生成新的公钥和私钥。 + password = RsaUtil.decrypt(password, ApplicationConstant.PRIVATE_KEY); + if (user == null || !passwordEncoder.matches(password, user.getPassword())) { + return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD); + } + String errorMessage; + if (user.getUserStatus() == SysUserStatus.STATUS_LOCKED) { + errorMessage = "登录失败,用户账号被锁定!"; + return ResponseResult.error(ErrorCodeEnum.INVALID_USER_STATUS, errorMessage); + } + String patternKey = RedisKeyUtil.getSessionIdPrefix(user.getLoginName(), MyCommonUtil.getDeviceType()) + "*"; + redissonClient.getKeys().deleteByPatternAsync(patternKey); + JSONObject jsonData = this.buildLoginData(user); + return ResponseResult.success(jsonData); + } + + /** + * 登出操作。同时将Session相关的信息从缓存中删除。 + * + * @return 应答结果对象。 + */ + @PostMapping("/doLogout") + public ResponseResult doLogout() { + TokenData tokenData = TokenData.takeFromRequest(); + String sessionIdKey = RedisKeyUtil.makeSessionIdKey(tokenData.getSessionId()); + redissonClient.getBucket(sessionIdKey).delete(); + sysPermService.removeUserSysPermCache(tokenData.getSessionId()); + sysDataPermService.removeDataPermCache(tokenData.getSessionId()); + cacheHelper.removeAllSessionCache(tokenData.getSessionId()); + return ResponseResult.success(); + } + + /** + * 在登录之后,通过token再次获取登录信息。 + * 用于在当前浏览器登录系统后,在新tab页中可以免密登录。 + * + * @return 应答结果对象,其中包括JWT的Token数据,以及菜单列表。 + */ + @GetMapping("/getLoginInfo") + public ResponseResult getLoginInfo() { + TokenData tokenData = TokenData.takeFromRequest(); + // 这里解释一下为什么没有缓存menuList和permCodeList。 + // 1. 该操作和权限验证不同,属于低频操作。 + // 2. 第一次登录和再次获取登录信息之间,如果修改了用户的权限,那么本次获取的是最新权限。 + // 3. 上一个问题无法避免,因为即便缓存也是有过期时间的,过期之后还是要从数据库获取的。 + JSONObject jsonData = new JSONObject(); + jsonData.put("showName", tokenData.getShowName()); + jsonData.put("isAdmin", tokenData.getIsAdmin()); + Collection menuList; + Collection permCodeList; + if (tokenData.getIsAdmin()) { + menuList = sysMenuService.getAllMenuList(); + permCodeList = sysPermCodeService.getAllPermCodeList(); + } else { + menuList = sysMenuService.getMenuListByUserId(tokenData.getUserId()); + permCodeList = sysPermCodeService.getPermCodeListByUserId(tokenData.getUserId()); + } + jsonData.put("menuList", menuList); + jsonData.put("permCodeList", permCodeList); + return ResponseResult.success(jsonData); + } + + /** + * 用户修改自己的密码。 + * + * @param oldPass 原有密码。 + * @param newPass 新密码。 + * @return 应答结果对象。 + */ + @PostMapping("/changePassword") + public ResponseResult changePassword( + @MyRequestBody String oldPass, @MyRequestBody String newPass) throws Exception { + if (MyCommonUtil.existBlankArgument(oldPass, oldPass)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + TokenData tokenData = TokenData.takeFromRequest(); + SysUser user = sysUserService.getById(tokenData.getUserId()); + oldPass = URLDecoder.decode(oldPass, StandardCharsets.UTF_8.name()); + // NOTE: 第一次使用时,请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。 + // 执行RsaUtil工具类中的main函数,可以生成新的公钥和私钥。 + oldPass = RsaUtil.decrypt(oldPass, ApplicationConstant.PRIVATE_KEY); + if (user == null || !passwordEncoder.matches(oldPass, user.getPassword())) { + return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD); + } + newPass = URLDecoder.decode(newPass, StandardCharsets.UTF_8.name()); + newPass = RsaUtil.decrypt(newPass, ApplicationConstant.PRIVATE_KEY); + if (!sysUserService.changePassword(tokenData.getUserId(), newPass)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + private JSONObject buildLoginData(SysUser user) { + int deviceType = MyCommonUtil.getDeviceType(); + boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN; + Map claims = new HashMap<>(3); + String sessionId = user.getLoginName() + "_" + deviceType + "_" + MyCommonUtil.generateUuid(); + claims.put("sessionId", sessionId); + String token = JwtUtil.generateToken(claims, appConfig.getExpiration(), appConfig.getTokenSigningKey()); + JSONObject jsonData = new JSONObject(); + jsonData.put(TokenData.REQUEST_ATTRIBUTE_NAME, token); + jsonData.put("showName", user.getShowName()); + jsonData.put("isAdmin", isAdmin); + TokenData tokenData = new TokenData(); + tokenData.setSessionId(sessionId); + tokenData.setUserId(user.getUserId()); + tokenData.setDeptId(user.getDeptId()); + tokenData.setLoginName(user.getLoginName()); + tokenData.setShowName(user.getShowName()); + tokenData.setIsAdmin(isAdmin); + tokenData.setLoginIp(IpUtil.getRemoteIpAddress(ContextUtil.getHttpRequest())); + tokenData.setLoginTime(new Date()); + tokenData.setDeviceType(deviceType); + List userPostList = sysPostService.getSysUserPostListByUserId(user.getUserId()); + if (CollectionUtils.isNotEmpty(userPostList)) { + Set deptPostIdSet = userPostList.stream().map(SysUserPost::getDeptPostId).collect(Collectors.toSet()); + tokenData.setDeptPostIds(StringUtils.join(deptPostIdSet, ",")); + } + String sessionIdKey = RedisKeyUtil.makeSessionIdKey(sessionId); + String sessionData = JSON.toJSONString(tokenData, SerializerFeature.WriteNonStringValueAsString); + RBucket bucket = redissonClient.getBucket(sessionIdKey); + bucket.set(sessionData); + bucket.expire(appConfig.getSessionExpiredSeconds(), TimeUnit.SECONDS); + // 这里手动将TokenData存入request,便于OperationLogAspect统一处理操作日志。 + TokenData.addToRequest(tokenData); + Collection menuList; + Collection permCodeList; + if (isAdmin) { + menuList = sysMenuService.getAllMenuList(); + permCodeList = sysPermCodeService.getAllPermCodeList(); + } else { + menuList = sysMenuService.getMenuListByUserId(user.getUserId()); + permCodeList = sysPermCodeService.getPermCodeListByUserId(user.getUserId()); + } + List onlineMenuList; + if (isAdmin) { + onlineMenuList = sysMenuService.getAllOnlineMenuList(SysMenuType.TYPE_BUTTON); + } else { + onlineMenuList = sysMenuService.getOnlineMenuListByUserId(user.getUserId(), SysMenuType.TYPE_BUTTON); + } + OnlinePermData onlinePermData = this.getOnlinePermCodeSet(onlineMenuList); + if (CollectionUtils.isNotEmpty(onlinePermData.permCodeSet)) { + permCodeList.addAll(onlinePermData.permCodeSet); + } + jsonData.put("menuList", menuList); + jsonData.put("permCodeList", permCodeList); + if (user.getUserType() != SysUserType.TYPE_ADMIN) { + // 缓存用户的权限资源 + sysPermService.putUserSysPermCache(sessionId, user.getUserId()); + sysPermService.putOnlinePermToCache(sessionId, onlinePermData.permUrlSet); + sysDataPermService.putDataPermCache(sessionId, user.getUserId(), user.getDeptId()); + } + return jsonData; + } + + private OnlinePermData getOnlinePermCodeSet(List onlineMenuList) { + OnlinePermData permData = new OnlinePermData(); + if (CollectionUtils.isEmpty(onlineMenuList)) { + return permData; + } + Set viewFormIdSet = new HashSet<>(); + Set editFormIdSet = new HashSet<>(); + for (SysMenu menu : onlineMenuList) { + if (menu.getOnlineMenuPermType() == SysOnlineMenuPermType.TYPE_VIEW) { + viewFormIdSet.add(menu.getOnlineFormId()); + } else if (menu.getOnlineMenuPermType() == SysOnlineMenuPermType.TYPE_EDIT) { + editFormIdSet.add(menu.getOnlineFormId()); + } + } + if (CollectionUtils.isNotEmpty(viewFormIdSet)) { + List viewDatasourceList = + onlineDatasourceService.getOnlineDatasourceListByFormIds(viewFormIdSet); + for (OnlineDatasource datasource : viewDatasourceList) { + permData.permCodeSet.add(OnlineUtil.makeViewPermCode(datasource.getVariableName())); + for (String permUrl : onlineProperties.getViewUrlList()) { + permData.permUrlSet.add(permUrl + datasource.getVariableName()); + } + } + } + if (CollectionUtils.isNotEmpty(editFormIdSet)) { + List editableDatasourceList = + onlineDatasourceService.getOnlineDatasourceListByFormIds(editFormIdSet); + for (OnlineDatasource datasource : editableDatasourceList) { + permData.permCodeSet.add(OnlineUtil.makeEditPermCode(datasource.getVariableName())); + for (String permUrl : onlineProperties.getEditUrlList()) { + permData.permUrlSet.add(permUrl + datasource.getVariableName()); + } + } + } + // 这个非常非常重要,不能删除。因为在线票单的url前缀是可以配置的,那么表单字典接口的url也是动态。 + // 所以就不能把这个字典列表接口放到数据库的白名单表中。 + permData.permUrlSet.add(onlineProperties.getUrlPrefix() + "/onlineOperation/listDict"); + permData.permUrlSet.add(onlineProperties.getUrlPrefix() + "/onlineForm/render"); + return permData; + } + + static class OnlinePermData { + public final Set permCodeSet = new HashSet<>(); + public final Set permUrlSet = new HashSet<>(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/LoginUserController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/LoginUserController.java new file mode 100644 index 00000000..7369509e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/LoginUserController.java @@ -0,0 +1,81 @@ +package com.flow.demo.webadmin.upms.controller; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.RedisKeyUtil; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; + +/** + * 在线用户控制器对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/loginUser") +public class LoginUserController { + + @Autowired + private RedissonClient redissonClient; + + /** + * 显示在线用户列表。 + * + * @param loginName 登录名过滤。 + * @param pageParam 分页参数。 + * @return 登录用户信息列表。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody String loginName, @MyRequestBody MyPageParam pageParam) { + int queryCount = pageParam.getPageNum() * pageParam.getPageSize(); + int skipCount = (pageParam.getPageNum() - 1) * pageParam.getPageSize(); + String patternKey; + if (StrUtil.isBlank(loginName)) { + patternKey = RedisKeyUtil.getSessionIdPrefix() + "*"; + } else { + patternKey = RedisKeyUtil.getSessionIdPrefix(loginName) + "*"; + } + List loginUserInfoList = new LinkedList<>(); + Iterable keys = redissonClient.getKeys().getKeysByPattern(patternKey); + for (String key : keys) { + loginUserInfoList.add(this.buildTokenDataByRedisKey(key)); + } + loginUserInfoList.sort((o1, o2) -> (int) (o2.getLoginTime().getTime() - o1.getLoginTime().getTime())); + int toIndex = Math.min(skipCount + pageParam.getPageSize(), loginUserInfoList.size()); + List resultList = loginUserInfoList.subList(skipCount, toIndex); + return ResponseResult.success(new MyPageData<>(resultList, (long) loginUserInfoList.size())); + } + + /** + * 强制下线指定登录会话。 + * + * @param sessionId 待强制下线的SessionId。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody String sessionId) { + // 为了保证被剔除用户正在进行的操作不被干扰,这里只是删除sessionIdKey即可,这样可以使强制下线操作更加平滑。 + // 比如,如果删除操作权限或数据权限的redis session key,那么正在请求数据的操作就会报错。 + redissonClient.getBucket(RedisKeyUtil.makeSessionIdKey(sessionId)).delete(); + return ResponseResult.success(); + } + + private LoginUserInfo buildTokenDataByRedisKey(String key) { + RBucket sessionData = redissonClient.getBucket(key); + TokenData tokenData = JSON.parseObject(sessionData.get(), TokenData.class); + return BeanUtil.copyProperties(tokenData, LoginUserInfo.class); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysDataPermController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysDataPermController.java new file mode 100644 index 00000000..7286cdfd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysDataPermController.java @@ -0,0 +1,281 @@ +package com.flow.demo.webadmin.upms.controller; + +import com.alibaba.fastjson.TypeReference; +import com.github.pagehelper.Page; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import com.flow.demo.webadmin.upms.dto.SysDataPermDto; +import com.flow.demo.webadmin.upms.dto.SysUserDto; +import com.flow.demo.webadmin.upms.vo.SysDataPermVo; +import com.flow.demo.webadmin.upms.vo.SysUserVo; +import com.flow.demo.webadmin.upms.model.SysDataPerm; +import com.flow.demo.webadmin.upms.model.SysUser; +import com.flow.demo.webadmin.upms.service.SysDataPermService; +import com.flow.demo.webadmin.upms.service.SysUserService; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.annotation.MyRequestBody; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 数据权限接口控制器对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/sysDataPerm") +public class SysDataPermController { + + @Autowired + private SysDataPermService sysDataPermService; + @Autowired + private SysUserService sysUserService; + + /** + * 添加新数据权限操作。 + * + * @param sysDataPermDto 新增对象。 + * @param deptIdListString 数据权限关联的部门Id列表,多个之间逗号分隔。 + * @return 应答结果对象。包含新增数据权限对象的主键Id。 + */ + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysDataPermDto sysDataPermDto, @MyRequestBody String deptIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDataPermDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysDataPerm sysDataPerm = MyModelUtil.copyTo(sysDataPermDto, SysDataPerm.class); + CallResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set deptIdSet = null; + if (result.getData() != null) { + deptIdSet = result.getData().getObject("deptIdSet", new TypeReference>(){}); + } + sysDataPermService.saveNew(sysDataPerm, deptIdSet); + return ResponseResult.success(sysDataPerm.getDataPermId()); + } + + /** + * 更新数据权限操作。 + * + * @param sysDataPermDto 更新的数据权限对象。 + * @param deptIdListString 数据权限关联的部门Id列表,多个之间逗号分隔。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysDataPermDto sysDataPermDto, @MyRequestBody String deptIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDataPermDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysDataPerm originalSysDataPerm = sysDataPermService.getById(sysDataPermDto.getDataPermId()); + if (originalSysDataPerm == null) { + errorMessage = "数据验证失败,当前数据权限并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysDataPerm sysDataPerm = MyModelUtil.copyTo(sysDataPermDto, SysDataPerm.class); + CallResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set deptIdSet = null; + if (result.getData() != null) { + deptIdSet = result.getData().getObject("deptIdSet", new TypeReference>(){}); + } + if (!sysDataPermService.update(sysDataPerm, originalSysDataPerm, deptIdSet)) { + errorMessage = "更新失败,数据不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除数据权限操作。 + * + * @param dataPermId 待删除数据权限主键Id。 + * @return 应答数据结果。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long dataPermId) { + if (MyCommonUtil.existBlankArgument(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDataPermService.remove(dataPermId)) { + String errorMessage = "数据操作失败,数据权限不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 查看数据权限列表。 + * + * @param sysDataPermDtoFilter 数据权限查询过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象。包含数据权限列表。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysDataPermDto sysDataPermDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysDataPerm filter = MyModelUtil.copyTo(sysDataPermDtoFilter, SysDataPerm.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDataPerm.class); + List dataPermList = sysDataPermService.getSysDataPermList(filter, orderBy); + List dataPermVoList = MyModelUtil.copyCollectionTo(dataPermList, SysDataPermVo.class); + long totalCount = 0L; + if (dataPermList instanceof Page) { + totalCount = ((Page) dataPermList).getTotal(); + } + return ResponseResult.success(MyPageUtil.makeResponseData(dataPermVoList, totalCount)); + } + + /** + * 查看单条数据权限详情。 + * + * @param dataPermId 数据权限的主键Id。 + * @return 应答结果对象,包含数据权限的详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long dataPermId) { + if (MyCommonUtil.existBlankArgument(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysDataPerm dataPerm = sysDataPermService.getByIdWithRelation(dataPermId, MyRelationParam.full()); + if (dataPerm == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysDataPermVo dataPermVo = MyModelUtil.copyTo(dataPerm, SysDataPermVo.class); + return ResponseResult.success(dataPermVo); + } + + /** + * 获取不包含指定数据权限Id的用户列表。 + * 用户和数据权限是多对多关系,当前接口将返回没有赋值指定DataPermId的用户列表。可用于给数据权限添加新用户。 + * + * @param dataPermId 数据权限主键Id。 + * @param sysUserDtoFilter 用户数据的过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含用户列表数据。 + */ + @PostMapping("/listNotInDataPermUser") + public ResponseResult> listNotInDataPermUser( + @MyRequestBody Long dataPermId, + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doDataPermUserVerify(dataPermId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List userList = + sysUserService.getNotInSysUserListByDataPermId(dataPermId, filter, orderBy); + List userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class); + return ResponseResult.success(MyPageUtil.makeResponseData(userVoList)); + } + + /** + * 拥有指定数据权限的用户列表。 + * + * @param dataPermId 数据权限Id。 + * @param sysUserDtoFilter 用户过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含用户列表数据。 + */ + @PostMapping("/listDataPermUser") + public ResponseResult> listDataPermUser( + @MyRequestBody Long dataPermId, + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doDataPermUserVerify(dataPermId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List userList = + sysUserService.getSysUserListByDataPermId(dataPermId, filter, orderBy); + List userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class); + return ResponseResult.success(MyPageUtil.makeResponseData(userVoList)); + } + + private ResponseResult doDataPermUserVerify(Long dataPermId) { + if (MyCommonUtil.existBlankArgument(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDataPermService.existId(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + return ResponseResult.success(); + } + + /** + * 为指定数据权限添加用户列表。该操作可同时给一批用户赋值数据权限,并在同一事务内完成。 + * + * @param dataPermId 数据权限主键Id。 + * @param userIdListString 逗号分隔的用户Id列表。 + * @return 应答结果对象。 + */ + @PostMapping("/addDataPermUser") + public ResponseResult addDataPermUser( + @MyRequestBody Long dataPermId, @MyRequestBody String userIdListString) { + if (MyCommonUtil.existBlankArgument(dataPermId, userIdListString)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + Set userIdSet = + Arrays.stream(userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysDataPermService.existId(dataPermId) + || !sysUserService.existUniqueKeyList("userId", userIdSet)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + sysDataPermService.addDataPermUserList(dataPermId, userIdSet); + return ResponseResult.success(); + } + + /** + * 为指定用户移除指定数据权限。 + * + * @param dataPermId 指定数据权限主键Id。 + * @param userId 指定用户主键Id。 + * @return 应答数据结果。 + */ + @PostMapping("/deleteDataPermUser") + public ResponseResult deleteDataPermUser( + @MyRequestBody Long dataPermId, @MyRequestBody Long userId) { + if (MyCommonUtil.existBlankArgument(dataPermId, userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDataPermService.removeDataPermUser(dataPermId, userId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysDeptController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysDeptController.java new file mode 100644 index 00000000..1da4508f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysDeptController.java @@ -0,0 +1,381 @@ +package com.flow.demo.webadmin.upms.controller; + +import cn.jimmyshi.beanquery.BeanQuery; +import com.github.pagehelper.page.PageMethod; +import com.flow.demo.webadmin.upms.vo.*; +import com.flow.demo.webadmin.upms.dto.*; +import com.flow.demo.webadmin.upms.model.*; +import com.flow.demo.webadmin.upms.service.*; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.constant.*; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import javax.validation.groups.Default; +import java.util.stream.Collectors; + +/** + * 部门管理操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/sysDept") +public class SysDeptController { + + @Autowired + private SysDeptService sysDeptService; + @Autowired + private SysPostService sysPostService; + + /** + * 新增部门管理数据。 + * + * @param sysDeptDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody SysDeptDto sysDeptDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDeptDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysDept sysDept = MyModelUtil.copyTo(sysDeptDto, SysDept.class); + // 验证父Id的数据合法性 + SysDept parentSysDept = null; + if (MyCommonUtil.isNotBlankOrNull(sysDept.getParentId())) { + parentSysDept = sysDeptService.getById(sysDept.getParentId()); + if (parentSysDept == null) { + errorMessage = "数据验证失败,关联的父节点并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage); + } + } + sysDept = sysDeptService.saveNew(sysDept, parentSysDept); + return ResponseResult.success(sysDept.getDeptId()); + } + + /** + * 更新部门管理数据。 + * + * @param sysDeptDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody SysDeptDto sysDeptDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDeptDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysDept sysDept = MyModelUtil.copyTo(sysDeptDto, SysDept.class); + SysDept originalSysDept = sysDeptService.getById(sysDept.getDeptId()); + if (originalSysDept == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + // 验证父Id的数据合法性 + if (MyCommonUtil.isNotBlankOrNull(sysDept.getParentId()) + && ObjectUtils.notEqual(sysDept.getParentId(), originalSysDept.getParentId())) { + SysDept parentSysDept = sysDeptService.getById(sysDept.getParentId()); + if (parentSysDept == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,关联的 [父节点] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage); + } + } + if (!sysDeptService.update(sysDept, originalSysDept)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除部门管理数据。 + * + * @param deptId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long deptId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(deptId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + SysDept originalSysDept = sysDeptService.getById(deptId); + if (originalSysDept == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (sysDeptService.hasChildren(deptId)) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象存在子对象] ,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (sysDeptService.hasChildrenUser(deptId)) { + errorMessage = "数据验证失败,请先移除部门用户数据后,再删除当前部门!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysDeptService.remove(deptId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的部门管理列表。 + * + * @param sysDeptDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysDeptDto sysDeptDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysDept sysDeptFilter = MyModelUtil.copyTo(sysDeptDtoFilter, SysDept.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDept.class); + List sysDeptList = sysDeptService.getSysDeptListWithRelation(sysDeptFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(sysDeptList, SysDept.INSTANCE)); + } + + /** + * 查看指定部门管理对象详情。 + * + * @param deptId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long deptId) { + if (MyCommonUtil.existBlankArgument(deptId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysDept sysDept = sysDeptService.getByIdWithRelation(deptId, MyRelationParam.full()); + if (sysDept == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysDeptVo sysDeptVo = SysDept.INSTANCE.fromModel(sysDept); + return ResponseResult.success(sysDeptVo); + } + + /** + * 列出不与指定部门管理存在多对多关系的 [岗位管理] 列表数据。通常用于查看添加新 [岗位管理] 对象的候选列表。 + * + * @param deptId 主表关联字段。 + * @param sysPostDtoFilter [岗位管理] 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,返回符合条件的数据列表。 + */ + @PostMapping("/listNotInSysDeptPost") + public ResponseResult> listNotInSysDeptPost( + @MyRequestBody Long deptId, + @MyRequestBody SysPostDto sysPostDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doSysDeptPostVerify(deptId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysPost filter = MyModelUtil.copyTo(sysPostDtoFilter, SysPost.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysPost.class); + List sysPostList = sysPostService.getNotInSysPostListByDeptId(deptId, filter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(sysPostList, SysPost.INSTANCE)); + } + + /** + * 列出与指定部门管理存在多对多关系的 [岗位管理] 列表数据。 + * + * @param deptId 主表关联字段。 + * @param sysPostDtoFilter [岗位管理] 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,返回符合条件的数据列表。 + */ + @PostMapping("/listSysDeptPost") + public ResponseResult> listSysDeptPost( + @MyRequestBody Long deptId, + @MyRequestBody SysPostDto sysPostDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doSysDeptPostVerify(deptId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysPost filter = MyModelUtil.copyTo(sysPostDtoFilter, SysPost.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysPost.class); + List sysPostList = sysPostService.getSysPostListByDeptId(deptId, filter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(sysPostList, SysPost.INSTANCE)); + } + + private ResponseResult doSysDeptPostVerify(Long deptId) { + if (MyCommonUtil.existBlankArgument(deptId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDeptService.existId(deptId)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + return ResponseResult.success(); + } + + /** + * 批量添加部门管理和 [岗位管理] 对象的多对多关联关系数据。 + * + * @param deptId 主表主键Id。 + * @param sysDeptPostDtoList 关联对象列表。 + * @return 应答结果对象。 + */ + @PostMapping("/addSysDeptPost") + public ResponseResult addSysDeptPost( + @MyRequestBody Long deptId, + @MyRequestBody(elementType = SysDeptPostDto.class) List sysDeptPostDtoList) { + if (MyCommonUtil.existBlankArgument(deptId, sysDeptPostDtoList)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + for (SysDeptPostDto sysDeptPost : sysDeptPostDtoList) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDeptPost); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + Set postIdSet = sysDeptPostDtoList.stream().map(SysDeptPostDto::getPostId).collect(Collectors.toSet()); + if (!sysDeptService.existId(deptId) || !sysPostService.existUniqueKeyList("postId", postIdSet)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + List sysDeptPostList = MyModelUtil.copyCollectionTo(sysDeptPostDtoList, SysDeptPost.class); + sysDeptService.addSysDeptPostList(sysDeptPostList, deptId); + return ResponseResult.success(); + } + + /** + * 更新指定部门管理和指定 [岗位管理] 的多对多关联数据。 + * + * @param sysDeptPostDto 对多对中间表对象。 + * @return 应答结果对象。 + */ + @PostMapping("/updateSysDeptPost") + public ResponseResult updateSysDeptPost(@MyRequestBody SysDeptPostDto sysDeptPostDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDeptPostDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysDeptPost sysDeptPost = MyModelUtil.copyTo(sysDeptPostDto, SysDeptPost.class); + if (!sysDeptService.updateSysDeptPost(sysDeptPost)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 显示部门管理和指定 [岗位管理] 的多对多关联详情数据。 + * + * @param deptId 主表主键Id。 + * @param postId 从表主键Id。 + * @return 应答结果对象,包括中间表详情。 + */ + @GetMapping("/viewSysDeptPost") + public ResponseResult viewSysDeptPost(@RequestParam Long deptId, @RequestParam Long postId) { + if (MyCommonUtil.existBlankArgument(deptId, postId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysDeptPost sysDeptPost = sysDeptService.getSysDeptPost(deptId, postId); + if (sysDeptPost == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysDeptPostVo sysDeptPostVo = MyModelUtil.copyTo(sysDeptPost, SysDeptPostVo.class); + return ResponseResult.success(sysDeptPostVo); + } + + /** + * 移除指定部门管理和指定 [岗位管理] 的多对多关联关系。 + * + * @param deptId 主表主键Id。 + * @param postId 从表主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/deleteSysDeptPost") + public ResponseResult deleteSysDeptPost(@MyRequestBody Long deptId, @MyRequestBody Long postId) { + if (MyCommonUtil.existBlankArgument(deptId, postId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDeptService.removeSysDeptPost(deptId, postId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 获取部门岗位多对多关联数据,及其关联的部门和岗位数据。 + * + * @param deptId 部门Id,如果为空,返回全部数据列表。 + * @return 部门岗位多对多关联数据,及其关联的部门和岗位数据 + */ + @GetMapping("/listSysDeptPostWithRelation") + public ResponseResult>> listSysDeptPostWithRelation( + @RequestParam(required = false) Long deptId) { + return ResponseResult.success(sysDeptService.getSysDeptPostListWithRelationByDeptId(deptId)); + } + + /** + * 以字典形式返回全部部门管理数据集合。字典的键值为[deptId, deptName]。 + * 白名单接口,登录用户均可访问。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 + */ + @GetMapping("/listDict") + public ResponseResult>> listDict(SysDept filter) { + List resultList = sysDeptService.getListByFilter(filter); + return ResponseResult.success(BeanQuery.select( + "parentId as parentId", "deptId as id", "deptName as name").executeFrom(resultList)); + } + + /** + * 根据字典Id集合,获取查询后的字典数据。 + * + * @param dictIds 字典Id集合。 + * @return 应答结果对象,包含字典形式的数据集合。 + */ + @PostMapping("/listDictByIds") + public ResponseResult>> listDictByIds( + @MyRequestBody(elementType = Long.class) List dictIds) { + List resultList = sysDeptService.getInList(new HashSet<>(dictIds)); + return ResponseResult.success(BeanQuery.select( + "parentId as parentId", "deptId as id", "deptName as name").executeFrom(resultList)); + } + + /** + * 根据父主键Id,以字典的形式返回其下级数据列表。 + * 白名单接口,登录用户均可访问。 + * + * @param parentId 父主键Id。 + * @return 按照字典的形式返回下级数据列表。 + */ + @GetMapping("/listDictByParentId") + public ResponseResult>> listDictByParentId(@RequestParam(required = false) Long parentId) { + List resultList = sysDeptService.getListByParentId("parentId", parentId); + return ResponseResult.success(BeanQuery.select( + "parentId as parentId", "deptId as id", "deptName as name").executeFrom(resultList)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysMenuController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysMenuController.java new file mode 100644 index 00000000..e742af60 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysMenuController.java @@ -0,0 +1,215 @@ +package com.flow.demo.webadmin.upms.controller; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.TypeReference; +import lombok.extern.slf4j.Slf4j; +import com.flow.demo.webadmin.upms.dto.SysMenuDto; +import com.flow.demo.webadmin.upms.vo.SysMenuVo; +import com.flow.demo.webadmin.upms.model.SysMenu; +import com.flow.demo.webadmin.upms.model.constant.SysMenuType; +import com.flow.demo.webadmin.upms.service.SysMenuService; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.core.annotation.MyRequestBody; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.*; + +/** + * 菜单管理接口控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/sysMenu") +public class SysMenuController { + + @Autowired + private SysMenuService sysMenuService; + + /** + * 添加新菜单操作。 + * + * @param sysMenuDto 新菜单对象。 + * @param permCodeIdListString 与当前菜单Id绑定的权限Id列表,多个权限之间逗号分隔。 + * @return 应答结果对象,包含新增菜单的主键Id。 + */ + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysMenuDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysMenu sysMenu = MyModelUtil.copyTo(sysMenuDto, SysMenu.class); + if (sysMenu.getParentId() != null) { + SysMenu parentSysMenu = sysMenuService.getById(sysMenu.getParentId()); + if (parentSysMenu == null) { + errorMessage = "数据验证失败,关联的父菜单不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (parentSysMenu.getOnlineFormId() != null) { + errorMessage = "数据验证失败,不能动态表单菜单添加父菜单!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + CallResult result = sysMenuService.verifyRelatedData(sysMenu, null, permCodeIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set permCodeIdSet = null; + if (result.getData() != null) { + permCodeIdSet = result.getData().getObject("permCodeIdSet", new TypeReference>(){}); + } + sysMenuService.saveNew(sysMenu, permCodeIdSet); + return ResponseResult.success(sysMenu.getMenuId()); + } + + /** + * 更新菜单数据操作。 + * + * @param sysMenuDto 更新菜单对象。 + * @param permCodeIdListString 与当前菜单Id绑定的权限Id列表,多个权限之间逗号分隔。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysMenuDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysMenu originalSysMenu = sysMenuService.getById(sysMenuDto.getMenuId()); + if (originalSysMenu == null) { + errorMessage = "数据验证失败,当前菜单并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysMenu sysMenu = MyModelUtil.copyTo(sysMenuDto, SysMenu.class); + if (ObjectUtil.notEqual(originalSysMenu.getOnlineFormId(), sysMenu.getOnlineFormId())) { + if (originalSysMenu.getOnlineFormId() == null) { + errorMessage = "数据验证失败,不能为当前菜单添加在线表单Id属性!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (sysMenu.getOnlineFormId() == null) { + errorMessage = "数据验证失败,不能去掉当前菜单的在线表单Id属性!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + if (originalSysMenu.getOnlineFormId() != null + && originalSysMenu.getMenuType().equals(SysMenuType.TYPE_BUTTON)) { + errorMessage = "数据验证失败,在线表单的内置菜单不能编辑!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + CallResult result = sysMenuService.verifyRelatedData(sysMenu, originalSysMenu, permCodeIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set permCodeIdSet = null; + if (result.getData() != null) { + permCodeIdSet = result.getData().getObject("permCodeIdSet", new TypeReference>(){}); + } + if (!sysMenuService.update(sysMenu, originalSysMenu, permCodeIdSet)) { + errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除指定菜单操作。 + * + * @param menuId 指定菜单主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long menuId) { + if (MyCommonUtil.existBlankArgument(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage; + SysMenu menu = sysMenuService.getById(menuId); + if (menu == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + if (menu.getOnlineFormId() != null && menu.getMenuType().equals(SysMenuType.TYPE_BUTTON)) { + errorMessage = "数据验证失败,在线表单的内置菜单不能删除!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + // 对于在线表单,无需进行子菜单的验证,而是在删除的时候,连同子菜单一起删除。 + if (menu.getOnlineFormId() == null && sysMenuService.hasChildren(menuId)) { + errorMessage = "数据验证失败,当前菜单存在下级菜单!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysMenuService.remove(menu)) { + errorMessage = "数据操作失败,菜单不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 获取全部菜单列表。 + * + * @return 应答结果对象,包含全部菜单数据列表。 + */ + @PostMapping("/list") + public ResponseResult> list() { + List sysMenuList = sysMenuService.getAllListByOrder("showOrder"); + return ResponseResult.success(MyModelUtil.copyCollectionTo(sysMenuList, SysMenuVo.class)); + } + + /** + * 查看指定菜单数据详情。 + * + * @param menuId 指定菜单主键Id。 + * @return 应答结果对象,包含菜单详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long menuId) { + if (MyCommonUtil.existBlankArgument(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysMenu sysMenu = sysMenuService.getByIdWithRelation(menuId, MyRelationParam.full()); + if (sysMenu == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysMenuVo sysMenuVo = MyModelUtil.copyTo(sysMenu, SysMenuVo.class); + return ResponseResult.success(sysMenuVo); + } + + /** + * 查询菜单的权限资源地址列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param url 权限资源地址过滤条件。 + * @return 应答对象,包含从菜单到权限资源的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermWithDetail") + public ResponseResult>> listSysPermWithDetail(Long menuId, String url) { + if (MyCommonUtil.isBlankOrNull(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysMenuService.getSysPermListWithDetail(menuId, url)); + } + + /** + * 查询菜单的用户列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param loginName 登录名。 + * @return 应答对象,包含从菜单到用户的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysUserWithDetail") + public ResponseResult>> listSysUserWithDetail(Long menuId, String loginName) { + if (MyCommonUtil.isBlankOrNull(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysMenuService.getSysUserListWithDetail(menuId, loginName)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPermCodeController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPermCodeController.java new file mode 100644 index 00000000..d92dbbf1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPermCodeController.java @@ -0,0 +1,186 @@ +package com.flow.demo.webadmin.upms.controller; + +import com.alibaba.fastjson.TypeReference; +import lombok.extern.slf4j.Slf4j; +import com.flow.demo.webadmin.upms.dto.SysPermCodeDto; +import com.flow.demo.webadmin.upms.vo.SysPermCodeVo; +import com.flow.demo.webadmin.upms.model.SysPermCode; +import com.flow.demo.webadmin.upms.service.SysPermCodeService; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.core.annotation.MyRequestBody; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.*; + +/** + * 权限字管理接口控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/sysPermCode") +public class SysPermCodeController { + + @Autowired + private SysPermCodeService sysPermCodeService; + + /** + * 新增权限字操作。 + * + * @param sysPermCodeDto 新增权限字对象。 + * @param permIdListString 与当前权限Id绑定的权限资源Id列表,多个权限资源之间逗号分隔。 + * @return 应答结果对象,包含新增权限字的主键Id。 + */ + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermCodeDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED); + } + SysPermCode sysPermCode = MyModelUtil.copyTo(sysPermCodeDto, SysPermCode.class); + CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, null, permIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set permIdSet = null; + if (result.getData() != null) { + permIdSet = result.getData().getObject("permIdSet", new TypeReference>(){}); + } + sysPermCode = sysPermCodeService.saveNew(sysPermCode, permIdSet); + return ResponseResult.success(sysPermCode.getPermCodeId()); + } + + /** + * 更新权限字操作。 + * + * @param sysPermCodeDto 更新权限字对象。 + * @param permIdListString 与当前权限Id绑定的权限资源Id列表,多个权限资源之间逗号分隔。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermCodeDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPermCode originalSysPermCode = sysPermCodeService.getById(sysPermCodeDto.getPermCodeId()); + if (originalSysPermCode == null) { + errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysPermCode sysPermCode = MyModelUtil.copyTo(sysPermCodeDto, SysPermCode.class); + CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, originalSysPermCode, permIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set permIdSet = null; + if (result.getData() != null) { + permIdSet = result.getData().getObject("permIdSet", new TypeReference>(){}); + } + try { + if (!sysPermCodeService.update(sysPermCode, originalSysPermCode, permIdSet)) { + errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + } catch (DuplicateKeyException e) { + errorMessage = "数据操作失败,权限字编码已经存在!"; + return ResponseResult.error(ErrorCodeEnum.DUPLICATED_UNIQUE_KEY, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除指定权限字操作。 + * + * @param permCodeId 指定的权限字主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long permCodeId) { + if (MyCommonUtil.existBlankArgument(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage; + if (sysPermCodeService.hasChildren(permCodeId)) { + errorMessage = "数据验证失败,当前权限字存在下级权限字!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysPermCodeService.remove(permCodeId)) { + errorMessage = "数据操作失败,权限字不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 查看权限字列表。 + * + * @return 应答结果对象,包含权限字列表。 + */ + @PostMapping("/list") + public ResponseResult> list() { + List sysPermCodeList = + sysPermCodeService.getAllListByOrder("permCodeType", "showOrder"); + return ResponseResult.success(MyModelUtil.copyCollectionTo(sysPermCodeList, SysPermCodeVo.class)); + } + + /** + * 查看权限字对象详情。 + * + * @param permCodeId 指定权限字主键Id。 + * @return 应答结果对象,包含权限字对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long permCodeId) { + if (MyCommonUtil.existBlankArgument(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysPermCode sysPermCode = + sysPermCodeService.getByIdWithRelation(permCodeId, MyRelationParam.full()); + if (sysPermCode == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysPermCodeVo sysPermCodeVo = MyModelUtil.copyTo(sysPermCode, SysPermCodeVo.class); + return ResponseResult.success(sysPermCodeVo); + } + + /** + * 查询权限字的用户列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param loginName 登录名。 + * @return 应答对象。包含从权限字到用户的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysUserWithDetail") + public ResponseResult>> listSysUserWithDetail(Long permCodeId, String loginName) { + if (MyCommonUtil.isBlankOrNull(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermCodeService.getSysUserListWithDetail(permCodeId, loginName)); + } + + /** + * 查询权限字的角色列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param roleName 角色名。 + * @return 应答对象。包含从权限字到角色的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysRoleWithDetail") + public ResponseResult>> listSysRoleWithDetail(Long permCodeId, String roleName) { + if (MyCommonUtil.isBlankOrNull(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermCodeService.getSysRoleListWithDetail(permCodeId, roleName)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPermController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPermController.java new file mode 100644 index 00000000..602ea1c0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPermController.java @@ -0,0 +1,187 @@ +package com.flow.demo.webadmin.upms.controller; + +import com.github.pagehelper.Page; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import com.flow.demo.webadmin.upms.dto.SysPermDto; +import com.flow.demo.webadmin.upms.vo.SysPermVo; +import com.flow.demo.webadmin.upms.model.SysPerm; +import com.flow.demo.webadmin.upms.service.SysPermService; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.core.annotation.MyRequestBody; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.List; +import java.util.Map; + +/** + * 权限资源管理接口控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/sysPerm") +public class SysPermController { + + @Autowired + private SysPermService sysPermService; + + /** + * 新增权限资源操作。 + * + * @param sysPermDto 新增权限资源对象。 + * @return 应答结果对象,包含新增权限资源的主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody SysPermDto sysPermDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPerm sysPerm = MyModelUtil.copyTo(sysPermDto, SysPerm.class); + CallResult result = sysPermService.verifyRelatedData(sysPerm, null); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + sysPerm = sysPermService.saveNew(sysPerm); + return ResponseResult.success(sysPerm.getPermId()); + } + + /** + * 更新权限资源操作。 + * + * @param sysPermDto 更新权限资源对象。 + * @return 应答结果对象,包含更新权限资源的主键Id。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody SysPermDto sysPermDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPerm originalPerm = sysPermService.getById(sysPermDto.getPermId()); + if (originalPerm == null) { + errorMessage = "数据验证失败,当前权限资源并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysPerm sysPerm = MyModelUtil.copyTo(sysPermDto, SysPerm.class); + CallResult result = sysPermService.verifyRelatedData(sysPerm, originalPerm); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + sysPermService.update(sysPerm, originalPerm); + return ResponseResult.success(); + } + + /** + * 删除指定权限资源操作。 + * + * @param permId 指定的权限资源主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long permId) { + if (MyCommonUtil.existBlankArgument(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysPermService.remove(permId)) { + String errorMessage = "数据操作失败,权限不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 查看权限资源对象详情。 + * + * @param permId 指定权限资源主键Id。 + * @return 应答结果对象,包含权限资源对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long permId) { + if (MyCommonUtil.existBlankArgument(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysPerm perm = sysPermService.getById(permId); + if (perm == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysPermVo permVo = MyModelUtil.copyTo(perm, SysPermVo.class); + return ResponseResult.success(permVo); + } + + /** + * 查看权限资源列表。 + * + * @param sysPermDtoFilter 过滤对象。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含权限资源列表。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysPermDto sysPermDtoFilter, @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysPerm filter = MyModelUtil.copyTo(sysPermDtoFilter, SysPerm.class); + List permList = sysPermService.getPermListWithRelation(filter); + List permVoList = MyModelUtil.copyCollectionTo(permList, SysPermVo.class); + long totalCount = 0L; + if (permList instanceof Page) { + totalCount = ((Page) permList).getTotal(); + } + return ResponseResult.success(MyPageUtil.makeResponseData(permVoList, totalCount)); + } + + /** + * 查询权限资源地址的用户列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param loginName 登录名。 + * @return 应答对象。包含从权限资源到用户的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysUserWithDetail") + public ResponseResult>> listSysUserWithDetail(Long permId, String loginName) { + if (MyCommonUtil.isBlankOrNull(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermService.getSysUserListWithDetail(permId, loginName)); + } + + /** + * 查询权限资源地址的角色列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param roleName 角色名。 + * @return 应答对象。包含从权限资源到角色的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysRoleWithDetail") + public ResponseResult>> listSysRoleWithDetail(Long permId, String roleName) { + if (MyCommonUtil.isBlankOrNull(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermService.getSysRoleListWithDetail(permId, roleName)); + } + + /** + * 查询权限资源地址的菜单列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param menuName 菜单名。 + * @return 应答对象。包含从权限资源到菜单的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysMenuWithDetail") + public ResponseResult>> listSysMenuWithDetail(Long permId, String menuName) { + if (MyCommonUtil.isBlankOrNull(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermService.getSysMenuListWithDetail(permId, menuName)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPermModuleController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPermModuleController.java new file mode 100644 index 00000000..7d0e96ef --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPermModuleController.java @@ -0,0 +1,159 @@ +package com.flow.demo.webadmin.upms.controller; + +import lombok.extern.slf4j.Slf4j; +import com.flow.demo.webadmin.upms.dto.SysPermModuleDto; +import com.flow.demo.webadmin.upms.vo.SysPermModuleVo; +import com.flow.demo.webadmin.upms.model.SysPerm; +import com.flow.demo.webadmin.upms.model.SysPermModule; +import com.flow.demo.webadmin.upms.service.SysPermModuleService; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.core.annotation.MyRequestBody; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * 权限资源模块管理接口控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/sysPermModule") +public class SysPermModuleController { + + @Autowired + private SysPermModuleService sysPermModuleService; + + /** + * 新增权限资源模块操作。 + * + * @param sysPermModuleDto 新增权限资源模块对象。 + * @return 应答结果对象,包含新增权限资源模块的主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody SysPermModuleDto sysPermModuleDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermModuleDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPermModule sysPermModule = MyModelUtil.copyTo(sysPermModuleDto, SysPermModule.class); + if (sysPermModule.getParentId() != null + && sysPermModuleService.getById(sysPermModule.getParentId()) == null) { + errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage); + } + sysPermModuleService.saveNew(sysPermModule); + return ResponseResult.success(sysPermModule.getModuleId()); + } + + /** + * 更新权限资源模块操作。 + * + * @param sysPermModuleDto 更新权限资源模块对象。 + * @return 应答结果对象,包含新增权限资源模块的主键Id。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody SysPermModuleDto sysPermModuleDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermModuleDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPermModule sysPermModule = MyModelUtil.copyTo(sysPermModuleDto, SysPermModule.class); + SysPermModule originalPermModule = sysPermModuleService.getById(sysPermModule.getModuleId()); + if (originalPermModule == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + if (sysPermModule.getParentId() != null + && !sysPermModule.getParentId().equals(originalPermModule.getParentId())) { + if (sysPermModuleService.getById(sysPermModule.getParentId()) == null) { + errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage); + } + } + if (!sysPermModuleService.update(sysPermModule, originalPermModule)) { + errorMessage = "数据验证失败,当前模块并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除指定权限资源模块操作。 + * + * @param moduleId 指定的权限资源模块主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long moduleId) { + if (MyCommonUtil.existBlankArgument(moduleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage; + if (sysPermModuleService.hasChildren(moduleId) + || sysPermModuleService.hasModulePerms(moduleId)) { + errorMessage = "数据验证失败,当前权限模块存在子模块或权限资源,请先删除关联数据!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysPermModuleService.remove(moduleId)) { + errorMessage = "数据操作失败,权限模块不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 查看全部权限资源模块列表。 + * + * @return 应答结果对象,包含权限资源模块列表。 + */ + @PostMapping("/list") + public ResponseResult> list() { + List permModuleList = sysPermModuleService.getAllListByOrder("showOrder"); + return ResponseResult.success(MyModelUtil.copyCollectionTo(permModuleList, SysPermModuleVo.class)); + } + + /** + * 列出全部权限资源模块及其下级关联的权限资源列表。 + * + * @return 应答结果对象,包含树状列表,结构为权限资源模块和权限资源之间的树状关系。 + */ + @PostMapping("/listAll") + public ResponseResult>> listAll() { + List sysPermModuleList = sysPermModuleService.getPermModuleAndPermList(); + List> resultList = new LinkedList<>(); + for (SysPermModule sysPermModule : sysPermModuleList) { + Map permModuleMap = new HashMap<>(5); + permModuleMap.put("id", sysPermModule.getModuleId()); + permModuleMap.put("name", sysPermModule.getModuleName()); + permModuleMap.put("type", sysPermModule.getModuleType()); + permModuleMap.put("isPerm", false); + if (MyCommonUtil.isNotBlankOrNull(sysPermModule.getParentId())) { + permModuleMap.put("parentId", sysPermModule.getParentId()); + } + resultList.add(permModuleMap); + if (CollectionUtils.isNotEmpty(sysPermModule.getSysPermList())) { + for (SysPerm sysPerm : sysPermModule.getSysPermList()) { + Map permMap = new HashMap<>(4); + permMap.put("id", sysPerm.getPermId()); + permMap.put("name", sysPerm.getPermName()); + permMap.put("isPerm", true); + permMap.put("url", sysPerm.getUrl()); + permMap.put("parentId", sysPermModule.getModuleId()); + resultList.add(permMap); + } + } + } + return ResponseResult.success(resultList); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPostController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPostController.java new file mode 100644 index 00000000..008c7401 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysPostController.java @@ -0,0 +1,169 @@ +package com.flow.demo.webadmin.upms.controller; + +import cn.jimmyshi.beanquery.BeanQuery; +import com.github.pagehelper.page.PageMethod; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.constant.*; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.webadmin.upms.dto.SysPostDto; +import com.flow.demo.webadmin.upms.model.SysPost; +import com.flow.demo.webadmin.upms.service.SysPostService; +import com.flow.demo.webadmin.upms.vo.SysPostVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import javax.validation.groups.Default; + +/** + * 岗位管理操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/sysPost") +public class SysPostController { + + @Autowired + private SysPostService sysPostService; + + /** + * 新增岗位管理数据。 + * + * @param sysPostDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody SysPostDto sysPostDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPostDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPost sysPost = MyModelUtil.copyTo(sysPostDto, SysPost.class); + sysPost = sysPostService.saveNew(sysPost); + return ResponseResult.success(sysPost.getPostId()); + } + + /** + * 更新岗位管理数据。 + * + * @param sysPostDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody SysPostDto sysPostDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPostDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPost sysPost = MyModelUtil.copyTo(sysPostDto, SysPost.class); + SysPost originalSysPost = sysPostService.getById(sysPost.getPostId()); + if (originalSysPost == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysPostService.update(sysPost, originalSysPost)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除岗位管理数据。 + * + * @param postId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long postId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(postId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + SysPost originalSysPost = sysPostService.getById(postId); + if (originalSysPost == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysPostService.remove(postId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的岗位管理列表。 + * + * @param sysPostDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysPostDto sysPostDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysPost sysPostFilter = MyModelUtil.copyTo(sysPostDtoFilter, SysPost.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysPost.class); + List sysPostList = sysPostService.getSysPostListWithRelation(sysPostFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(sysPostList, SysPost.INSTANCE)); + } + + /** + * 查看指定岗位管理对象详情。 + * + * @param postId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long postId) { + if (MyCommonUtil.existBlankArgument(postId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysPost sysPost = sysPostService.getByIdWithRelation(postId, MyRelationParam.full()); + if (sysPost == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysPostVo sysPostVo = SysPost.INSTANCE.fromModel(sysPost); + return ResponseResult.success(sysPostVo); + } + + /** + * 以字典形式返回全部岗位管理数据集合。字典的键值为[postId, postName]。 + * 白名单接口,登录用户均可访问。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 + */ + @GetMapping("/listDict") + public ResponseResult>> listDict(SysPost filter) { + List resultList = sysPostService.getListByFilter(filter); + return ResponseResult.success(BeanQuery.select("postId as id", "postName as name").executeFrom(resultList)); + } + + /** + * 根据字典Id集合,获取查询后的字典数据。 + * + * @param postIds 字典Id集合。 + * @return 应答结果对象,包含字典形式的数据集合。 + */ + @PostMapping("/listDictByIds") + public ResponseResult>> listDictByIds( + @MyRequestBody(elementType = Long.class) List postIds) { + List resultList = sysPostService.getInList(new HashSet<>(postIds)); + return ResponseResult.success(BeanQuery.select("postId as id", "postName as name").executeFrom(resultList)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysRoleController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysRoleController.java new file mode 100644 index 00000000..f806adbd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysRoleController.java @@ -0,0 +1,317 @@ +package com.flow.demo.webadmin.upms.controller; + +import com.alibaba.fastjson.TypeReference; +import com.github.pagehelper.Page; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import com.flow.demo.webadmin.upms.dto.SysRoleDto; +import com.flow.demo.webadmin.upms.dto.SysUserDto; +import com.flow.demo.webadmin.upms.vo.SysRoleVo; +import com.flow.demo.webadmin.upms.vo.SysUserVo; +import com.flow.demo.webadmin.upms.model.SysRole; +import com.flow.demo.webadmin.upms.model.SysUser; +import com.flow.demo.webadmin.upms.model.SysUserRole; +import com.flow.demo.webadmin.upms.service.SysRoleService; +import com.flow.demo.webadmin.upms.service.SysUserService; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.annotation.MyRequestBody; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 角色管理接口控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/sysRole") +public class SysRoleController { + + @Autowired + private SysRoleService sysRoleService; + @Autowired + private SysUserService sysUserService; + + /** + * 新增角色操作。 + * + * @param sysRoleDto 新增角色对象。 + * @param menuIdListString 与当前角色Id绑定的menuId列表,多个menuId之间逗号分隔。 + * @return 应答结果对象,包含新增角色的主键Id。 + */ + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysRole sysRole = MyModelUtil.copyTo(sysRoleDto, SysRole.class); + CallResult result = sysRoleService.verifyRelatedData(sysRole, null, menuIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set menuIdSet = null; + if (result.getData() != null) { + menuIdSet = result.getData().getObject("menuIdSet", new TypeReference>(){}); + } + sysRoleService.saveNew(sysRole, menuIdSet); + return ResponseResult.success(sysRole.getRoleId()); + } + + /** + * 更新角色操作。 + * + * @param sysRoleDto 更新角色对象。 + * @param menuIdListString 与当前角色Id绑定的menuId列表,多个menuId之间逗号分隔。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysRole originalSysRole = sysRoleService.getById(sysRoleDto.getRoleId()); + if (originalSysRole == null) { + errorMessage = "数据验证失败,当前角色并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysRole sysRole = MyModelUtil.copyTo(sysRoleDto, SysRole.class); + CallResult result = sysRoleService.verifyRelatedData(sysRole, originalSysRole, menuIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set menuIdSet = null; + if (result.getData() != null) { + menuIdSet = result.getData().getObject("menuIdSet", new TypeReference>(){}); + } + if (!sysRoleService.update(sysRole, originalSysRole, menuIdSet)) { + errorMessage = "更新失败,数据不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除指定角色操作。 + * + * @param roleId 指定角色主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long roleId) { + if (MyCommonUtil.existBlankArgument(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysRoleService.remove(roleId)) { + String errorMessage = "数据操作失败,角色不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 查看角色列表。 + * + * @param sysRoleDtoFilter 角色过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含角色列表。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysRoleDto sysRoleDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysRole filter = MyModelUtil.copyTo(sysRoleDtoFilter, SysRole.class); + List roleList = sysRoleService.getSysRoleList( + filter, MyOrderParam.buildOrderBy(orderParam, SysRole.class)); + List roleVoList = MyModelUtil.copyCollectionTo(roleList, SysRoleVo.class); + long totalCount = 0L; + if (roleList instanceof Page) { + totalCount = ((Page) roleList).getTotal(); + } + return ResponseResult.success(MyPageUtil.makeResponseData(roleVoList, totalCount)); + } + + /** + * 查看角色详情。 + * + * @param roleId 指定角色主键Id。 + * @return 应答结果对象,包含角色详情对象。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long roleId) { + if (MyCommonUtil.existBlankArgument(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysRole sysRole = sysRoleService.getByIdWithRelation(roleId, MyRelationParam.full()); + if (sysRole == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysRoleVo sysRoleVo = MyModelUtil.copyTo(sysRole, SysRoleVo.class); + return ResponseResult.success(sysRoleVo); + } + + /** + * 获取不包含指定角色Id的用户列表。 + * 用户和角色是多对多关系,当前接口将返回没有赋值指定RoleId的用户列表。可用于给角色添加新用户。 + * + * @param roleId 角色主键Id。 + * @param sysUserDtoFilter 用户过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含用户列表数据。 + */ + @PostMapping("/listNotInUserRole") + public ResponseResult> listNotInUserRole( + @MyRequestBody Long roleId, + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doRoleUserVerify(roleId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List userList = sysUserService.getNotInSysUserListByRoleId(roleId, filter, orderBy); + List userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class); + return ResponseResult.success(MyPageUtil.makeResponseData(userVoList)); + } + + /** + * 拥有指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param sysUserDtoFilter 用户过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含用户列表数据。 + */ + @PostMapping("/listUserRole") + public ResponseResult> listUserRole( + @MyRequestBody Long roleId, + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doRoleUserVerify(roleId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List userList = sysUserService.getSysUserListByRoleId(roleId, filter, orderBy); + List userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class); + return ResponseResult.success(MyPageUtil.makeResponseData(userVoList)); + } + + private ResponseResult doRoleUserVerify(Long roleId) { + if (MyCommonUtil.existBlankArgument(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysRoleService.existId(roleId)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + return ResponseResult.success(); + } + + /** + * 为指定角色添加用户列表。该操作可同时给一批用户赋值角色,并在同一事务内完成。 + * + * @param roleId 角色主键Id。 + * @param userIdListString 逗号分隔的用户Id列表。 + * @return 应答结果对象。 + */ + @PostMapping("/addUserRole") + public ResponseResult addUserRole( + @MyRequestBody Long roleId, @MyRequestBody String userIdListString) { + if (MyCommonUtil.existBlankArgument(roleId, userIdListString)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + Set userIdSet = Arrays.stream( + userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysRoleService.existId(roleId) + || !sysUserService.existUniqueKeyList("userId", userIdSet)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + List userRoleList = new LinkedList<>(); + for (Long userId : userIdSet) { + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(roleId); + userRole.setUserId(userId); + userRoleList.add(userRole); + } + sysRoleService.addUserRoleList(userRoleList); + return ResponseResult.success(); + } + + /** + * 为指定用户移除指定角色。 + * + * @param roleId 指定角色主键Id。 + * @param userId 指定用户主键Id。 + * @return 应答数据结果。 + */ + @PostMapping("/deleteUserRole") + public ResponseResult deleteUserRole( + @MyRequestBody Long roleId, @MyRequestBody Long userId) { + if (MyCommonUtil.existBlankArgument(roleId, userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysRoleService.removeUserRole(roleId, userId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 查询角色的权限资源地址列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param url url过滤条件。 + * @return 应答对象,包含从角色到权限资源的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermWithDetail") + public ResponseResult>> listSysPermByWithDetail(Long roleId, String url) { + if (MyCommonUtil.isBlankOrNull(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysRoleService.getSysPermListWithDetail(roleId, url)); + } + + /** + * 查询角色的权限字列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param permCode 权限字名称过滤条件。 + * @return 应答对象,包含从角色到权限字的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermCodeWithDetail") + public ResponseResult>> listSysPermCodeWithDetail(Long roleId, String permCode) { + if (MyCommonUtil.isBlankOrNull(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysRoleService.getSysPermCodeListWithDetail(roleId, permCode)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysUserController.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysUserController.java new file mode 100644 index 00000000..ef762fb3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/controller/SysUserController.java @@ -0,0 +1,241 @@ +package com.flow.demo.webadmin.upms.controller; + +import com.alibaba.fastjson.TypeReference; +import com.github.pagehelper.page.PageMethod; +import com.flow.demo.webadmin.upms.vo.*; +import com.flow.demo.webadmin.upms.dto.*; +import com.flow.demo.webadmin.upms.model.*; +import com.flow.demo.webadmin.upms.service.*; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.constant.*; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.validator.AddGroup; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.webadmin.config.ApplicationConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import javax.validation.groups.Default; + +/** + * 用户管理操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/sysUser") +public class SysUserController { + + @Autowired + private SysUserService sysUserService; + @Autowired + private PasswordEncoder passwordEncoder; + @Autowired + private ApplicationConfig appConfig; + + /** + * 新增用户操作。 + * + * @param sysUserDto 新增用户对象。 + * @param deptPostIdListString 逗号分隔的部门岗位Id列表。 + * @param dataPermIdListString 逗号分隔的数据权限Id列表。 + * @param roleIdListString 逗号分隔的角色Id列表。 + * @return 应答结果对象,包含新增用户的主键Id。 + */ + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysUserDto sysUserDto, + @MyRequestBody String deptPostIdListString, + @MyRequestBody String dataPermIdListString, + @MyRequestBody String roleIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysUserDto, Default.class, AddGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysUser sysUser = MyModelUtil.copyTo(sysUserDto, SysUser.class); + CallResult result = sysUserService.verifyRelatedData( + sysUser, null, roleIdListString, deptPostIdListString, dataPermIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set deptPostIdSet = result.getData().getObject("deptPostIdSet", new TypeReference>() {}); + Set roleIdSet = result.getData().getObject("roleIdSet", new TypeReference>() {}); + Set dataPermIdSet = result.getData().getObject("dataPermIdSet", new TypeReference>() {}); + sysUserService.saveNew(sysUser, roleIdSet, deptPostIdSet, dataPermIdSet); + return ResponseResult.success(sysUser.getUserId()); + } + + /** + * 更新用户操作。 + * + * @param sysUserDto 更新用户对象。 + * @param deptPostIdListString 逗号分隔的部门岗位Id列表。 + * @param dataPermIdListString 逗号分隔的数据权限Id列表。 + * @param roleIdListString 逗号分隔的角色Id列表。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysUserDto sysUserDto, + @MyRequestBody String deptPostIdListString, + @MyRequestBody String dataPermIdListString, + @MyRequestBody String roleIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysUserDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysUser originalUser = sysUserService.getById(sysUserDto.getUserId()); + if (originalUser == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysUser sysUser = MyModelUtil.copyTo(sysUserDto, SysUser.class); + CallResult result = sysUserService.verifyRelatedData( + sysUser, originalUser, roleIdListString, deptPostIdListString, dataPermIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set deptPostIdSet = result.getData().getObject("deptPostIdSet", new TypeReference>() {}); + Set roleIdSet = result.getData().getObject("roleIdSet", new TypeReference>() {}); + Set dataPermIdSet = result.getData().getObject("dataPermIdSet", new TypeReference>() {}); + if (!sysUserService.update(sysUser, originalUser, roleIdSet, deptPostIdSet, dataPermIdSet)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 重置密码操作。 + * + * @param userId 指定用户主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/resetPassword") + public ResponseResult resetPassword(@MyRequestBody Long userId) { + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysUserService.changePassword(userId, appConfig.getDefaultUserPassword())) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除用户管理数据。 + * + * @param userId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long userId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + SysUser originalSysUser = sysUserService.getById(userId); + if (originalSysUser == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysUserService.remove(userId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的用户管理列表。 + * + * @param sysUserDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser sysUserFilter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List sysUserList = sysUserService.getSysUserListWithRelation(sysUserFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(sysUserList, SysUser.INSTANCE)); + } + + /** + * 查看指定用户管理对象详情。 + * + * @param userId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long userId) { + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 这里查看用户数据时候,需要把用户多对多关联的角色和数据权限Id一并查出。 + SysUser sysUser = sysUserService.getByIdWithRelation(userId, MyRelationParam.full()); + if (sysUser == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysUserVo sysUserVo = SysUser.INSTANCE.fromModel(sysUser); + return ResponseResult.success(sysUserVo); + } + + /** + * 查询用户的权限资源地址列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param url url过滤条件。 + * @return 应答对象,包含从用户到权限资源的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermWithDetail") + public ResponseResult>> listSysPermWithDetail(Long userId, String url) { + if (MyCommonUtil.isBlankOrNull(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysUserService.getSysPermListWithDetail(userId, url)); + } + + /** + * 查询用户的权限字列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param permCode 权限字名称过滤条件。 + * @return 应答对象,包含从用户到权限字的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermCodeWithDetail") + public ResponseResult>> listSysPermCodeWithDetail(Long userId, String permCode) { + if (MyCommonUtil.isBlankOrNull(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysUserService.getSysPermCodeListWithDetail(userId, permCode)); + } + + /** + * 查询用户的菜单列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param menuName 菜单名称过滤条件。 + * @return 应答对象,包含从用户到菜单的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysMenuWithDetail") + public ResponseResult>> listSysMenuWithDetail(Long userId, String menuName) { + if (MyCommonUtil.isBlankOrNull(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysUserService.getSysMenuListWithDetail(userId, menuName)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDataPermDeptMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDataPermDeptMapper.java new file mode 100644 index 00000000..7497a954 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDataPermDeptMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysDataPermDept; + +/** + * 数据权限与部门关系数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysDataPermDeptMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDataPermMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDataPermMapper.java new file mode 100644 index 00000000..59612cae --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDataPermMapper.java @@ -0,0 +1,35 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysDataPerm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 数据权限数据访问操作接口。 + * NOTE: 该对象一定不能被 @EnableDataPerm 注解标注,否则会导致无限递归。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysDataPermMapper extends BaseDaoMapper { + + /** + * 获取数据权限列表。 + * + * @param sysDataPermFilter 过滤对象。 + * @param orderBy 排序字符串。 + * @return 过滤后的数据权限列表。 + */ + List getSysDataPermList( + @Param("sysDataPermFilter") SysDataPerm sysDataPermFilter, @Param("orderBy") String orderBy); + + /** + * 获取指定用户的数据权限列表。 + * + * @param userId 用户Id。 + * @return 数据权限列表。 + */ + List getSysDataPermListByUserId(@Param("userId") Long userId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDataPermUserMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDataPermUserMapper.java new file mode 100644 index 00000000..9a3b3817 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDataPermUserMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysDataPermUser; + +/** + * 数据权限与用户关系数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysDataPermUserMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDeptMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDeptMapper.java new file mode 100644 index 00000000..5745592c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDeptMapper.java @@ -0,0 +1,26 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysDept; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 部门管理数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysDeptMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param sysDeptFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getSysDeptList( + @Param("sysDeptFilter") SysDept sysDeptFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDeptPostMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDeptPostMapper.java new file mode 100644 index 00000000..c405692a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDeptPostMapper.java @@ -0,0 +1,33 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysDeptPost; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 部门岗位数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysDeptPostMapper extends BaseDaoMapper { + + /** + * 获取指定部门Id的部门岗位多对多关联数据列表,以及关联的部门和岗位数据。 + * + * @param deptId 部门Id。如果参数为空则返回全部数据。 + * @return 部门岗位多对多数量列表。 + */ + List> getSysDeptPostListWithRelationByDeptId(@Param("deptId") Long deptId); + + /** + * 获取指定部门Id的领导部门岗位列表。 + * + * @param deptId 部门Id。 + * @return 指定部门Id的领导部门岗位列表 + */ + List getLeaderDeptPostList(@Param("deptId") Long deptId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDeptRelationMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDeptRelationMapper.java new file mode 100644 index 00000000..267c4ad3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysDeptRelationMapper.java @@ -0,0 +1,42 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysDeptRelation; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 部门关系树关联关系表访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysDeptRelationMapper extends BaseDaoMapper { + + /** + * 将myDeptId的所有子部门,与其父部门parentDeptId解除关联关系。 + * + * @param parentDeptId myDeptId的父部门Id。 + * @param myDeptId 当前部门。 + */ + void removeBetweenChildrenAndParents( + @Param("parentDeptId") Long parentDeptId, @Param("myDeptId") Long myDeptId); + + /** + * 批量插入部门关联数据。 + * 由于目前版本(3.4.1)的Mybatis Plus没有提供真正的批量插入,为了保证效率需要自己实现。 + * 目前我们仅仅给出MySQL的insert list实现作为参考,其他数据库需要自行修改。 + * + * @param deptRelationList 部门关联关系数据列表。 + */ + void insertList(List deptRelationList); + + /** + * 批量插入当前部门的所有父部门列表,包括自己和自己的关系。 + * + * @param parentDeptId myDeptId的父部门Id。 + * @param myDeptId 当前部门。 + */ + void insertParentList(@Param("parentDeptId") Long parentDeptId, @Param("myDeptId") Long myDeptId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysMenuMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysMenuMapper.java new file mode 100644 index 00000000..c557f90a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysMenuMapper.java @@ -0,0 +1,54 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysMenu; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 菜单数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysMenuMapper extends BaseDaoMapper { + + /** + * 获取登录用户的菜单列表。 + * + * @param userId 登录用户。 + * @return 菜单列表。 + */ + List getMenuListByUserId(@Param("userId") Long userId); + + /** + * 获取当前用户有权访问的在线表单菜单,仅返回类型为BUTTON的菜单。 + * + * @param userId 指定的用户。 + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + List getOnlineMenuListByUserId( + @Param("userId") Long userId, @Param("menuType") Integer menuType); + + /** + * 查询菜单的权限资源地址列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param url 权限资源地址过滤条件。 + * @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail( + @Param("menuId") Long menuId, @Param("url") String url); + + /** + * 查询菜单的用户列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param loginName 登录名。 + * @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail( + @Param("menuId") Long menuId, @Param("loginName") String loginName); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysMenuPermCodeMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysMenuPermCodeMapper.java new file mode 100644 index 00000000..c4e930ce --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysMenuPermCodeMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysMenuPermCode; + +/** + * 菜单与权限字关系数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysMenuPermCodeMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermCodeMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermCodeMapper.java new file mode 100644 index 00000000..76711a40 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermCodeMapper.java @@ -0,0 +1,45 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysPermCode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 权限字数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPermCodeMapper extends BaseDaoMapper { + + /** + * 获取用户的所有权限字列表。 + * + * @param userId 用户Id。 + * @return 该用户的权限字列表。 + */ + List getPermCodeListByUserId(@Param("userId") Long userId); + + /** + * 查询权限字的用户列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param loginName 登录名。 + * @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail( + @Param("permCodeId") Long permCodeId, @Param("loginName") String loginName); + + /** + * 查询权限字的角色列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param roleName 角色名。 + * @return 包含从权限字到角色的权限分配路径信息的查询结果列表。 + */ + List> getSysRoleListWithDetail( + @Param("permCodeId") Long permCodeId, @Param("roleName") String roleName); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermCodePermMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermCodePermMapper.java new file mode 100644 index 00000000..80dae542 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermCodePermMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysPermCodePerm; + +/** + * 权限字与权限资源关系数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPermCodePermMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermMapper.java new file mode 100644 index 00000000..d8e351b1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermMapper.java @@ -0,0 +1,54 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysPerm; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 权限资源数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPermMapper extends BaseDaoMapper { + + /** + * 获取用户的权限列表。 + * + * @param userId 用户Id。 + * @return 该用户的权限标识列表。 + */ + List getPermListByUserId(@Param("userId") Long userId); + + /** + * 查询权限资源地址的用户列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param loginName 登录名。 + * @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail( + @Param("permId") Long permId, @Param("loginName") String loginName); + + /** + * 查询权限资源地址的角色列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param roleName 角色名。 + * @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。 + */ + List> getSysRoleListWithDetail( + @Param("permId") Long permId, @Param("roleName") String roleName); + + /** + * 查询权限资源地址的菜单列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param menuName 菜单名。 + * @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。 + */ + List> getSysMenuListWithDetail( + @Param("permId") Long permId, @Param("menuName") String menuName); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermModuleMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermModuleMapper.java new file mode 100644 index 00000000..494eb9ba --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermModuleMapper.java @@ -0,0 +1,22 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysPermModule; + +import java.util.List; + +/** + * 权限资源模块数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPermModuleMapper extends BaseDaoMapper { + + /** + * 获取整个权限模块和权限关联后的全部数据。 + * + * @return 关联的权限模块和权限资源列表。 + */ + List getPermModuleAndPermList(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermWhitelistMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermWhitelistMapper.java new file mode 100644 index 00000000..803a2c5c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPermWhitelistMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysPermWhitelist; + +/** + * 权限资源白名单数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPermWhitelistMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPostMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPostMapper.java new file mode 100644 index 00000000..1bb63676 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysPostMapper.java @@ -0,0 +1,52 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysPost; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 岗位管理数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPostMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param sysPostFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getSysPostList( + @Param("sysPostFilter") SysPost sysPostFilter, @Param("orderBy") String orderBy); + + /** + * 获取指定部门的岗位列表。 + * + * @param deptId 部门Id。 + * @param sysPostFilter 从表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 岗位数据列表。 + */ + List getSysPostListByDeptId( + @Param("deptId") Long deptId, + @Param("sysPostFilter") SysPost sysPostFilter, + @Param("orderBy") String orderBy); + + /** + * 根据关联主表Id,获取关联从表中没有和主表建立关联关系的数据列表。 + * + * @param deptId 关联主表Id。 + * @param sysPostFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 与主表没有建立关联的从表数据列表。 + */ + List getNotInSysPostListByDeptId( + @Param("deptId") Long deptId, + @Param("sysPostFilter") SysPost sysPostFilter, + @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysRoleMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysRoleMapper.java new file mode 100644 index 00000000..bb9c5e81 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysRoleMapper.java @@ -0,0 +1,45 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysRole; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 角色数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysRoleMapper extends BaseDaoMapper { + + /** + * 获取对象列表,过滤条件中包含like和between条件。 + * + * @param sysRoleFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getSysRoleList(@Param("sysRoleFilter") SysRole sysRoleFilter, @Param("orderBy") String orderBy); + + /** + * 查询角色的权限资源地址列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param url url过滤条件。 + * @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail( + @Param("roleId") Long roleId, @Param("url") String url); + + /** + * 查询角色的权限字列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从角色到权限字的权限分配路径信息的查询结果列表。 + */ + List> getSysPermCodeListWithDetail( + @Param("roleId") Long roleId, @Param("permCode") String permCode); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysRoleMenuMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysRoleMenuMapper.java new file mode 100644 index 00000000..0c141fe3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysRoleMenuMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysRoleMenu; + +/** + * 角色与菜单操作关联关系数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysRoleMenuMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysUserMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysUserMapper.java new file mode 100644 index 00000000..518dbdd0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysUserMapper.java @@ -0,0 +1,108 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysUser; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 用户管理数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysUserMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param sysUserFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getSysUserList( + @Param("sysUserFilter") SysUser sysUserFilter, @Param("orderBy") String orderBy); + + /** + * 根据角色Id,获取关联的用户Id列表。 + * + * @param roleId 关联的角色Id。 + * @param sysUserFilter 用户过滤条件对象。 + * @param orderBy order by从句的参数。 + * @return 和RoleId关联的用户列表。 + */ + List getSysUserListByRoleId( + @Param("roleId") Long roleId, + @Param("sysUserFilter") SysUser sysUserFilter, + @Param("orderBy") String orderBy); + + /** + * 根据角色Id,获取和当前角色Id没有建立多对多关联关系的用户Id列表。 + * + * @param roleId 关联的角色Id。 + * @param sysUserFilter 用户过滤条件对象。 + * @param orderBy order by从句的参数。 + * @return 和RoleId没有建立关联关系的用户列表。 + */ + List getNotInSysUserListByRoleId( + @Param("roleId") Long roleId, + @Param("sysUserFilter") SysUser sysUserFilter, + @Param("orderBy") String orderBy); + + /** + * 根据数据权限Id,获取关联的用户Id列表。 + * + * @param dataPermId 关联的数据权限Id。 + * @param sysUserFilter 用户过滤条件对象。 + * @param orderBy order by从句的参数。 + * @return 和DataPermId关联的用户列表。 + */ + List getSysUserListByDataPermId( + @Param("dataPermId") Long dataPermId, + @Param("sysUserFilter") SysUser sysUserFilter, + @Param("orderBy") String orderBy); + + /** + * 根据数据权限Id,获取和当前数据权限Id没有建立多对多关联关系的用户Id列表。 + * + * @param dataPermId 关联的数据权限Id。 + * @param sysUserFilter 用户过滤条件对象。 + * @param orderBy order by从句的参数。 + * @return 和DataPermId没有建立关联关系的用户列表。 + */ + List getNotInSysUserListByDataPermId( + @Param("dataPermId") Long dataPermId, + @Param("sysUserFilter") SysUser sysUserFilter, + @Param("orderBy") String orderBy); + + /** + * 查询用户的权限资源地址列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param url url过滤条件。 + * @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail( + @Param("userId") Long userId, @Param("url") String url); + + /** + * 查询用户的权限字列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从用户到权限字的权限分配路径信息的查询结果列表。 + */ + List> getSysPermCodeListWithDetail( + @Param("userId") Long userId, @Param("permCode") String permCode); + + /** + * 查询用户的菜单列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param menuName 菜单名称过滤条件。 + * @return 包含从用户到菜单的权限分配路径信息的查询结果列表。 + */ + List> getSysMenuListWithDetail( + @Param("userId") Long userId, @Param("menuName") String menuName); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysUserPostMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysUserPostMapper.java new file mode 100644 index 00000000..c876543d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysUserPostMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysUserPost; + +/** + * 用户岗位数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysUserPostMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysUserRoleMapper.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysUserRoleMapper.java new file mode 100644 index 00000000..93b04971 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/SysUserRoleMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.webadmin.upms.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.model.SysUserRole; + +/** + * 用户与角色关联关系数据访问操作接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysUserRoleMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDataPermDeptMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDataPermDeptMapper.xml new file mode 100644 index 00000000..22b6372e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDataPermDeptMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDataPermMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDataPermMapper.xml new file mode 100644 index 00000000..b01c1acc --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDataPermMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + AND zz_sys_data_perm.rule_type = #{sysDataPermFilter.ruleType} + + + + AND IFNULL(zz_sys_data_perm.data_perm_name, '') LIKE #{safeSearchString} + + + AND zz_sys_data_perm.deleted_flag = ${@com.flow.demo.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDataPermUserMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDataPermUserMapper.xml new file mode 100644 index 00000000..259f00ad --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDataPermUserMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDeptMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDeptMapper.xml new file mode 100644 index 00000000..e356422f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDeptMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + AND zz_sys_dept.deleted_flag = ${@com.flow.demo.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + + AND zz_sys_dept.dept_name LIKE #{safeSysDeptDeptName} + + + AND zz_sys_dept.parent_id = #{sysDeptFilter.parentId} + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDeptPostMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDeptPostMapper.xml new file mode 100644 index 00000000..aad5efc8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDeptPostMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDeptRelationMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDeptRelationMapper.xml new file mode 100644 index 00000000..9f7c2093 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysDeptRelationMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + DELETE a FROM zz_sys_dept_relation a + INNER JOIN zz_sys_dept_relation b ON a.dept_id = b.dept_id + WHERE a.parent_dept_id = #{parentDeptId} AND b.parent_dept_id = #{myDeptId} + + + + INSERT INTO zz_sys_dept_relation(parent_dept_id, dept_id) VALUES + + (#{item.parentDeptId}, #{item.deptId}) + + + + + INSERT INTO zz_sys_dept_relation(parent_dept_id, dept_id) + SELECT t.parent_dept_id, #{myDeptId} FROM zz_sys_dept_relation t + WHERE t.dept_id = #{parentDeptId} + UNION ALL + SELECT #{myDeptId}, #{myDeptId} + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysMenuMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysMenuMapper.xml new file mode 100644 index 00000000..9fb5725d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysMenuMapper.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysMenuPermCodeMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysMenuPermCodeMapper.xml new file mode 100644 index 00000000..33446247 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysMenuPermCodeMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermCodeMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermCodeMapper.xml new file mode 100644 index 00000000..84a45935 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermCodeMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermCodePermMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermCodePermMapper.xml new file mode 100644 index 00000000..c2aeef33 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermCodePermMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermMapper.xml new file mode 100644 index 00000000..eabe9f32 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermMapper.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermModuleMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermModuleMapper.xml new file mode 100644 index 00000000..50f93342 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermModuleMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermWhitelistMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermWhitelistMapper.xml new file mode 100644 index 00000000..ca7cef02 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPermWhitelistMapper.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPostMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPostMapper.xml new file mode 100644 index 00000000..4eb8348e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysPostMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + AND zz_sys_post.deleted_flag = ${@com.flow.demo.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + + AND zz_sys_post.post_name LIKE #{safeSysPostPostName} + + + AND zz_sys_post.leader_post = #{sysPostFilter.leaderPost} + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysRoleMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysRoleMapper.xml new file mode 100644 index 00000000..62b5f581 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysRoleMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + AND role_name LIKE #{safeRoleName} + + + AND deleted_flag = ${@com.flow.demo.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysRoleMenuMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysRoleMenuMapper.xml new file mode 100644 index 00000000..30fec4eb --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysRoleMenuMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysUserMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysUserMapper.xml new file mode 100644 index 00000000..5fa3cfdd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysUserMapper.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + AND zz_sys_user.deleted_flag = ${@com.flow.demo.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + + AND zz_sys_user.login_name LIKE #{safeSysUserLoginName} + + + + AND zz_sys_user.show_name LIKE #{safeSysUserShowName} + + + AND zz_sys_user.dept_id = #{sysUserFilter.deptId} + + + AND zz_sys_user.user_status = #{sysUserFilter.userStatus} + + + AND zz_sys_user.create_time >= #{sysUserFilter.createTimeStart} + + + AND zz_sys_user.create_time <= #{sysUserFilter.createTimeEnd} + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysUserPostMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysUserPostMapper.xml new file mode 100644 index 00000000..e2747cd2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysUserPostMapper.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysUserRoleMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysUserRoleMapper.xml new file mode 100644 index 00000000..cecb2dd7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dao/mapper/SysUserRoleMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDataPermDeptDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDataPermDeptDto.java new file mode 100644 index 00000000..d1f4f9ae --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDataPermDeptDto.java @@ -0,0 +1,23 @@ +package com.flow.demo.webadmin.upms.dto; + +import lombok.Data; + +/** + * 数据权限与部门关联Dto。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysDataPermDeptDto { + + /** + * 数据权限Id。 + */ + private Long dataPermId; + + /** + * 关联部门Id。 + */ + private Long deptId; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDataPermDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDataPermDto.java new file mode 100644 index 00000000..6c974605 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDataPermDto.java @@ -0,0 +1,48 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.datafilter.constant.DataPermRuleType; + +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * 数据权限Dto。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysDataPermDto { + + /** + * 数据权限Id。 + */ + @NotNull(message = "数据权限Id不能为空!", groups = {UpdateGroup.class}) + private Long dataPermId; + + /** + * 显示名称。 + */ + @NotBlank(message = "数据权限名称不能为空!") + private String dataPermName; + + /** + * 数据权限规则类型(0: 全部可见 1: 只看自己 2: 只看本部门 3: 本部门及子部门 4: 多部门及子部门 5: 自定义部门列表)。 + */ + @NotNull(message = "数据权限规则类型不能为空!") + @ConstDictRef(constDictClass = DataPermRuleType.class) + private Integer ruleType; + + /** + * 部门Id列表(逗号分隔)。 + */ + private String deptIdListString; + + /** + * 搜索字符串。 + */ + private String searchString; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDeptDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDeptDto.java new file mode 100644 index 00000000..8ab96987 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDeptDto.java @@ -0,0 +1,40 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; + +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * SysDeptDto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysDeptDto { + + /** + * 部门Id。 + */ + @NotNull(message = "数据验证失败,部门Id不能为空!", groups = {UpdateGroup.class}) + private Long deptId; + + /** + * 部门名称。 + */ + @NotBlank(message = "数据验证失败,部门名称不能为空!") + private String deptName; + + /** + * 显示顺序。 + */ + @NotNull(message = "数据验证失败,显示顺序不能为空!") + private Integer showOrder; + + /** + * 父部门Id。 + */ + private Long parentId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDeptPostDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDeptPostDto.java new file mode 100644 index 00000000..d17e2478 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysDeptPostDto.java @@ -0,0 +1,41 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; + +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * 部门岗位Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysDeptPostDto { + + /** + * 部门岗位Id。 + */ + @NotNull(message = "数据验证失败,部门岗位Id不能为空!", groups = {UpdateGroup.class}) + private Long deptPostId; + + /** + * 部门Id。 + */ + @NotNull(message = "数据验证失败,部门Id不能为空!", groups = {UpdateGroup.class}) + private Long deptId; + + /** + * 岗位Id。 + */ + @NotNull(message = "数据验证失败,岗位Id不能为空!", groups = {UpdateGroup.class}) + private Long postId; + + /** + * 部门岗位显示名称。 + */ + @NotBlank(message = "数据验证失败,部门岗位显示名称不能为空!") + private String postShowName; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysMenuDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysMenuDto.java new file mode 100644 index 00000000..2e53b1ae --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysMenuDto.java @@ -0,0 +1,69 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.webadmin.upms.model.constant.SysMenuType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 菜单Dto。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysMenuDto { + + /** + * 菜单Id。 + */ + @NotNull(message = "菜单Id不能为空!", groups = {UpdateGroup.class}) + private Long menuId; + + /** + * 父菜单Id,目录菜单的父菜单为null + */ + private Long parentId; + + /** + * 菜单显示名称。 + */ + @NotBlank(message = "菜单显示名称不能为空!") + private String menuName; + + /** + * 菜单类型 (0: 目录 1: 菜单 2: 按钮 3: UI片段)。 + */ + @NotNull(message = "菜单类型不能为空!") + @ConstDictRef(constDictClass = SysMenuType.class, message = "数据验证失败,菜单类型为无效值!") + private Integer menuType; + + /** + * 前端表单路由名称,仅用于menu_type为1的菜单类型。 + */ + private String formRouterName; + + /** + * 在线表单主键Id,仅用于在线表单绑定的菜单。 + */ + private Long onlineFormId; + + /** + * 仅用于在线表单的流程Id。 + */ + private Long onlineFlowEntryId; + + /** + * 菜单显示顺序 (值越小,排序越靠前)。 + */ + @NotNull(message = "菜单显示顺序不能为空!") + private Integer showOrder; + + /** + * 菜单图标。 + */ + private String icon; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPermCodeDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPermCodeDto.java new file mode 100644 index 00000000..d7cbe342 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPermCodeDto.java @@ -0,0 +1,55 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.webadmin.upms.model.constant.SysPermCodeType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 权限字Dto。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysPermCodeDto { + + /** + * 权限字Id。 + */ + @NotNull(message = "权限字Id不能为空!", groups = {UpdateGroup.class}) + private Long permCodeId; + + /** + * 权限字标识(一般为有含义的英文字符串)。 + */ + @NotBlank(message = "权限字编码不能为空!") + private String permCode; + + /** + * 上级权限字Id。 + */ + private Long parentId; + + /** + * 权限字类型(0: 表单 1: UI片段 2: 操作)。 + */ + @NotNull(message = "权限字类型不能为空!") + @ConstDictRef(constDictClass = SysPermCodeType.class, message = "数据验证失败,权限类型为无效值!") + private Integer permCodeType; + + /** + * 显示名称。 + */ + @NotBlank(message = "权限字显示名称不能为空!") + private String showName; + + /** + * 显示顺序(数值越小,越靠前)。 + */ + @NotNull(message = "权限字显示顺序不能为空!") + private Integer showOrder; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPermDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPermDto.java new file mode 100644 index 00000000..6f5133f6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPermDto.java @@ -0,0 +1,52 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 权限资源Dto。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysPermDto { + + /** + * 权限资源Id。 + */ + @NotNull(message = "权限Id不能为空!", groups = {UpdateGroup.class}) + private Long permId; + + /** + * 权限资源名称。 + */ + @NotBlank(message = "权限资源名称不能为空!") + private String permName; + + /** + * shiro格式的权限字,如(upms:sysUser:add)。 + */ + private String permCode; + + /** + * 权限所在的权限模块Id。 + */ + @NotNull(message = "权限模块Id不能为空!") + private Long moduleId; + + /** + * 关联的URL。 + */ + @NotBlank(message = "权限关联的url不能为空!") + private String url; + + /** + * 权限在当前模块下的顺序,由小到大。 + */ + @NotNull(message = "权限显示顺序不能为空!") + private Integer showOrder; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPermModuleDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPermModuleDto.java new file mode 100644 index 00000000..46de7ae3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPermModuleDto.java @@ -0,0 +1,49 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.webadmin.upms.model.constant.SysPermModuleType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 权限资源模块Dto。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysPermModuleDto { + + /** + * 权限模块Id。 + */ + @NotNull(message = "权限模块Id不能为空!", groups = {UpdateGroup.class}) + private Long moduleId; + + /** + * 权限模块名称。 + */ + @NotBlank(message = "权限模块名称不能为空!") + private String moduleName; + + /** + * 上级权限模块Id。 + */ + private Long parentId; + + /** + * 权限模块类型(0: 普通模块 1: Controller模块)。 + */ + @NotNull(message = "模块类型不能为空!") + @ConstDictRef(constDictClass = SysPermModuleType.class, message = "数据验证失败,权限模块类型为无效值!") + private Integer moduleType; + + /** + * 权限模块在当前层级下的顺序,由小到大。 + */ + @NotNull(message = "权限模块显示顺序不能为空!") + private Integer showOrder; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPostDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPostDto.java new file mode 100644 index 00000000..a4178825 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysPostDto.java @@ -0,0 +1,41 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; + +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * 岗位Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysPostDto { + + /** + * 岗位Id。 + */ + @NotNull(message = "数据验证失败,岗位Id不能为空!", groups = {UpdateGroup.class}) + private Long postId; + + /** + * 岗位名称。 + */ + @NotBlank(message = "数据验证失败,岗位名称不能为空!") + private String postName; + + /** + * 岗位层级,数值越小级别越高。 + */ + @NotNull(message = "数据验证失败,岗位层级不能为空!") + private Integer level; + + /** + * 是否领导岗位。 + */ + @NotNull(message = "数据验证失败,领导岗位不能为空!", groups = {UpdateGroup.class}) + private Boolean leaderPost; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysRoleDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysRoleDto.java new file mode 100644 index 00000000..529181c6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysRoleDto.java @@ -0,0 +1,28 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * 角色Dto。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysRoleDto { + + /** + * 角色Id。 + */ + @NotNull(message = "角色Id不能为空!", groups = {UpdateGroup.class}) + private Long roleId; + + /** + * 角色名称。 + */ + @NotBlank(message = "角色名称不能为空!") + private String roleName; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysUserDto.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysUserDto.java new file mode 100644 index 00000000..ec0b2776 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/dto/SysUserDto.java @@ -0,0 +1,80 @@ +package com.flow.demo.webadmin.upms.dto; + +import com.flow.demo.common.core.validator.AddGroup; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.webadmin.upms.model.constant.SysUserType; +import com.flow.demo.webadmin.upms.model.constant.SysUserStatus; + +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * SysUserDto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysUserDto { + + /** + * 用户Id。 + */ + @NotNull(message = "数据验证失败,用户Id不能为空!", groups = {UpdateGroup.class}) + private Long userId; + + /** + * 登录用户名。 + */ + @NotBlank(message = "数据验证失败,登录用户名不能为空!") + private String loginName; + + /** + * 用户密码。 + */ + @NotBlank(message = "数据验证失败,用户密码不能为空!", groups = {AddGroup.class}) + private String password; + + /** + * 用户显示名称。 + */ + @NotBlank(message = "数据验证失败,用户显示名称不能为空!") + private String showName; + + /** + * 用户部门Id。 + */ + @NotNull(message = "数据验证失败,用户部门Id不能为空!") + private Long deptId; + + /** + * 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。 + */ + @NotNull(message = "数据验证失败,用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)不能为空!") + @ConstDictRef(constDictClass = SysUserType.class, message = "数据验证失败,用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)为无效值!") + private Integer userType; + + /** + * 用户头像的Url。 + */ + private String headImageUrl; + + /** + * 用户状态(0: 正常 1: 锁定)。 + */ + @NotNull(message = "数据验证失败,用户状态(0: 正常 1: 锁定)不能为空!") + @ConstDictRef(constDictClass = SysUserStatus.class, message = "数据验证失败,用户状态(0: 正常 1: 锁定)为无效值!") + private Integer userStatus; + + /** + * createTime 范围过滤起始值(>=)。 + */ + private String createTimeStart; + + /** + * createTime 范围过滤结束值(<=)。 + */ + private String createTimeEnd; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDataPerm.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDataPerm.java new file mode 100644 index 00000000..ce798258 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDataPerm.java @@ -0,0 +1,113 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.annotation.RelationManyToMany; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.webadmin.upms.vo.SysDataPermVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.*; + +/** + * 数据权限实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_data_perm") +public class SysDataPerm { + + /** + * 主键Id。 + */ + @TableId(value = "data_perm_id") + private Long dataPermId; + + /** + * 显示名称。 + */ + @TableField(value = "data_perm_name") + private String dataPermName; + + /** + * 数据权限规则类型(0: 全部可见 1: 只看自己 2: 只看本部门 3: 本部门及子部门 4: 多部门及子部门 5: 自定义部门列表)。 + */ + @TableField(value = "rule_type") + private Integer ruleType; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @TableField(exist = false) + private String deptIdListString; + + @RelationManyToMany( + relationMapperName = "sysDataPermDeptMapper", + relationMasterIdField = "dataPermId", + relationModelClass = SysDataPermDept.class) + @TableField(exist = false) + private List dataPermDeptList; + + @TableField(exist = false) + private String searchString; + + public void setSearchString(String searchString) { + this.searchString = MyCommonUtil.replaceSqlWildcard(searchString); + } + + @Mapper + public interface SysDataPermModelMapper extends BaseModelMapper { + /** + * 转换VO对象到实体对象。 + * + * @param sysDataPermVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "dataPermDeptList", expression = "java(mapToBean(sysDataPermVo.getDataPermDeptList(), com.flow.demo.webadmin.upms.model.SysDataPermDept.class))") + @Override + SysDataPerm toModel(SysDataPermVo sysDataPermVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysDataPerm 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "dataPermDeptList", expression = "java(beanToMap(sysDataPerm.getDataPermDeptList(), false))") + @Override + SysDataPermVo fromModel(SysDataPerm sysDataPerm); + } + public static final SysDataPermModelMapper INSTANCE = Mappers.getMapper(SysDataPerm.SysDataPermModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDataPermDept.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDataPermDept.java new file mode 100644 index 00000000..39c4a94c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDataPermDept.java @@ -0,0 +1,29 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.ToString; + +/** + * 数据权限与部门关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ToString(of = {"deptId"}) +@TableName(value = "zz_sys_data_perm_dept") +public class SysDataPermDept { + + /** + * 数据权限Id。 + */ + @TableField(value = "data_perm_id") + private Long dataPermId; + + /** + * 关联部门Id。 + */ + @TableField(value = "dept_id") + private Long deptId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDataPermUser.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDataPermUser.java new file mode 100644 index 00000000..8a19c9b6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDataPermUser.java @@ -0,0 +1,27 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 数据权限与用户关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_data_perm_user") +public class SysDataPermUser { + + /** + * 数据权限Id。 + */ + @TableField(value = "data_perm_id") + private Long dataPermId; + + /** + * 用户Id。 + */ + @TableField(value = "user_id") + private Long userId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDept.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDept.java new file mode 100644 index 00000000..303c8345 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDept.java @@ -0,0 +1,81 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.webadmin.upms.vo.SysDeptVo; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; + +/** + * SysDept实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_dept") +public class SysDept { + + /** + * 部门Id。 + */ + @TableId(value = "dept_id") + private Long deptId; + + /** + * 部门名称。 + */ + @TableField(value = "dept_name") + private String deptName; + + /** + * 显示顺序。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 父部门Id。 + */ + @TableField(value = "parent_id") + private Long parentId; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + @Mapper + public interface SysDeptModelMapper extends BaseModelMapper { + } + public static final SysDeptModelMapper INSTANCE = Mappers.getMapper(SysDeptModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDeptPost.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDeptPost.java new file mode 100644 index 00000000..d0600879 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDeptPost.java @@ -0,0 +1,39 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 部门岗位多对多关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_dept_post") +public class SysDeptPost { + + /** + * 部门岗位Id。 + */ + @TableId(value = "dept_post_id") + private Long deptPostId; + + /** + * 部门Id。 + */ + @TableField(value = "dept_id") + private Long deptId; + + /** + * 岗位Id。 + */ + @TableField(value = "post_id") + private Long postId; + + /** + * 部门岗位显示名称。 + */ + @TableField(value = "post_show_name") + private String postShowName; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDeptRelation.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDeptRelation.java new file mode 100644 index 00000000..7faf2306 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysDeptRelation.java @@ -0,0 +1,31 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 部门关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "zz_sys_dept_relation") +public class SysDeptRelation { + + /** + * 上级部门Id。 + */ + @TableField(value = "parent_dept_id") + private Long parentDeptId; + + /** + * 部门Id。 + */ + @TableField(value = "dept_id") + private Long deptId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysMenu.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysMenu.java new file mode 100644 index 00000000..66cd7d10 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysMenu.java @@ -0,0 +1,143 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationManyToMany; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.webadmin.upms.vo.SysMenuVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.*; + +/** + * 菜单实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_menu") +public class SysMenu { + + /** + * 菜单Id。 + */ + @TableId(value = "menu_id") + private Long menuId; + + /** + * 父菜单Id,目录菜单的父菜单为null。 + */ + @TableField(value = "parent_id") + private Long parentId; + + /** + * 菜单显示名称。 + */ + @TableField(value = "menu_name") + private String menuName; + + /** + * 菜单类型(0: 目录 1: 菜单 2: 按钮 3: UI片段)。 + */ + @TableField(value = "menu_type") + private Integer menuType; + + /** + * 前端表单路由名称,仅用于menu_type为1的菜单类型。 + */ + @TableField(value = "form_router_name") + private String formRouterName; + + /** + * 在线表单主键Id,仅用于在线表单绑定的菜单。 + */ + @TableField(value = "online_form_id") + private Long onlineFormId; + + /** + * 在线表单菜单的权限控制类型,具体值可参考SysOnlineMenuPermType常量对象。 + */ + @TableField(value = "online_menu_perm_type") + private Integer onlineMenuPermType; + + /** + * 仅用于在线表单的流程Id。 + */ + @TableField(value = "online_flow_entry_id") + private Long onlineFlowEntryId; + + /** + * 菜单显示顺序 (值越小,排序越靠前)。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 菜单图标。 + */ + private String icon; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @RelationManyToMany( + relationMapperName = "sysMenuPermCodeMapper", + relationMasterIdField = "menuId", + relationModelClass = SysMenuPermCode.class) + @TableField(exist = false) + private List sysMenuPermCodeList; + + @Mapper + public interface SysMenuModelMapper extends BaseModelMapper { + /** + * 转换VO对象到实体对象。 + * + * @param sysMenuVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "sysMenuPermCodeList", expression = "java(mapToBean(sysMenuVo.getSysMenuPermCodeList(), com.flow.demo.webadmin.upms.model.SysMenuPermCode.class))") + @Override + SysMenu toModel(SysMenuVo sysMenuVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysMenu 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "sysMenuPermCodeList", expression = "java(beanToMap(sysMenu.getSysMenuPermCodeList(), false))") + @Override + SysMenuVo fromModel(SysMenu sysMenu); + } + public static final SysMenuModelMapper INSTANCE = Mappers.getMapper(SysMenu.SysMenuModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysMenuPermCode.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysMenuPermCode.java new file mode 100644 index 00000000..ad47fa04 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysMenuPermCode.java @@ -0,0 +1,27 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 菜单与权限字关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_menu_perm_code") +public class SysMenuPermCode { + + /** + * 关联菜单Id。 + */ + @TableField(value = "menu_id") + private Long menuId; + + /** + * 关联权限字Id。 + */ + @TableField(value = "perm_code_id") + private Long permCodeId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPerm.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPerm.java new file mode 100644 index 00000000..2e78d04c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPerm.java @@ -0,0 +1,87 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationDict; +import lombok.Data; + +import java.util.*; + +/** + * 权限资源实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_perm") +public class SysPerm { + + /** + * 权限资源Id。 + */ + @TableId(value = "perm_id") + private Long permId; + + /** + * 权限所在的权限模块Id。 + */ + @TableField(value = "module_id") + private Long moduleId; + + /** + * 权限名称。 + */ + @TableField(value = "perm_name") + private String permName; + + /** + * 关联的URL。 + */ + private String url; + + /** + * 权限在当前模块下的顺序,由小到大。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @RelationDict( + masterIdField = "moduleId", + slaveServiceName = "SysPermModuleService", + slaveModelClass = SysPermModule.class, + slaveIdField = "moduleId", + slaveNameField = "moduleName") + @TableField(exist = false) + private Map moduleIdDictMap; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermCode.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermCode.java new file mode 100644 index 00000000..23bc944c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermCode.java @@ -0,0 +1,120 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationManyToMany; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.webadmin.upms.vo.SysPermCodeVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.*; + +/** + * 权限字实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_perm_code") +public class SysPermCode { + + /** + * 权限字Id。 + */ + @TableId(value = "perm_code_id") + private Long permCodeId; + + /** + * 上级权限字Id。 + */ + @TableField(value = "parent_id") + private Long parentId; + + /** + * 权限字标识(一般为有含义的英文字符串)。 + */ + @TableField(value = "perm_code") + private String permCode; + + /** + * 权限类型(0: 表单 1: UI片段 2: 操作)。 + */ + @TableField(value = "perm_code_type") + private Integer permCodeType; + + /** + * 显示名称。 + */ + @TableField(value = "show_name") + private String showName; + + /** + * 显示顺序(数值越小,越靠前)。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @RelationManyToMany( + relationMapperName = "sysPermCodePermMapper", + relationMasterIdField = "permCodeId", + relationModelClass = SysPermCodePerm.class) + @TableField(exist = false) + private List sysPermCodePermList; + + @Mapper + public interface SysPermCodeModelMapper extends BaseModelMapper { + /** + * 转换VO对象到实体对象。 + * + * @param sysPermCodeVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "sysPermCodePermList", expression = "java(mapToBean(sysPermCodeVo.getSysPermCodePermList(), com.flow.demo.webadmin.upms.model.SysPermCodePerm.class))") + @Override + SysPermCode toModel(SysPermCodeVo sysPermCodeVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysPermCode 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "sysPermCodePermList", expression = "java(beanToMap(sysPermCode.getSysPermCodePermList(), false))") + @Override + SysPermCodeVo fromModel(SysPermCode sysPermCode); + } + public static final SysPermCodeModelMapper INSTANCE = Mappers.getMapper(SysPermCode.SysPermCodeModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermCodePerm.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermCodePerm.java new file mode 100644 index 00000000..1b39a351 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermCodePerm.java @@ -0,0 +1,27 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 权限字与权限资源关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_perm_code_perm") +public class SysPermCodePerm { + + /** + * 权限字Id。 + */ + @TableField(value = "perm_code_id") + private Long permCodeId; + + /** + * 权限Id。 + */ + @TableField(value = "perm_id") + private Long permId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermModule.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermModule.java new file mode 100644 index 00000000..d80f38bb --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermModule.java @@ -0,0 +1,81 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.*; + +/** + * 权限模块实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_perm_module") +public class SysPermModule { + + /** + * 权限模块Id。 + */ + @TableId(value = "module_id") + private Long moduleId; + + /** + * 上级权限模块Id。 + */ + @TableField(value = "parent_id") + private Long parentId; + + /** + * 权限模块名称。 + */ + @TableField(value = "module_name") + private String moduleName; + + /** + * 权限模块类型(0: 普通模块 1: Controller模块)。 + */ + @TableField(value = "module_type") + private Integer moduleType; + + /** + * 权限模块在当前层级下的顺序,由小到大。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @TableField(exist = false) + private List sysPermList; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermWhitelist.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermWhitelist.java new file mode 100644 index 00000000..1cccff3b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPermWhitelist.java @@ -0,0 +1,33 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 白名单实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_perm_whitelist") +public class SysPermWhitelist { + + /** + * 权限资源的URL。 + */ + @TableId(value = "perm_url") + private String permUrl; + + /** + * 权限资源所属模块名字(通常是Controller的名字)。 + */ + @TableField(value = "module_name") + private String moduleName; + + /** + * 权限的名称。 + */ + @TableField(value = "perm_name") + private String permName; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPost.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPost.java new file mode 100644 index 00000000..e87190a9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysPost.java @@ -0,0 +1,104 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.webadmin.upms.vo.SysPostVo; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; + +/** + * 岗位实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_post") +public class SysPost { + + /** + * 岗位Id。 + */ + @TableId(value = "post_id") + private Long postId; + + /** + * 岗位名称。 + */ + @TableField(value = "post_name") + private String postName; + + /** + * 岗位层级,数值越小级别越高。 + */ + private Integer level; + + /** + * 是否领导岗位。 + */ + @TableField(value = "leader_post") + private Boolean leaderPost; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** + * postId 的多对多关联表数据对象。 + */ + @TableField(exist = false) + private SysDeptPost sysDeptPost; + + @Mapper + public interface SysPostModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param sysPostVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "sysDeptPost", expression = "java(mapToBean(sysPostVo.getSysDeptPost(), com.flow.demo.webadmin.upms.model.SysDeptPost.class))") + @Override + SysPost toModel(SysPostVo sysPostVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysPost 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "sysDeptPost", expression = "java(beanToMap(sysPost.getSysDeptPost(), false))") + @Override + SysPostVo fromModel(SysPost sysPost); + } + public static final SysPostModelMapper INSTANCE = Mappers.getMapper(SysPostModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysRole.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysRole.java new file mode 100644 index 00000000..4f4af670 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysRole.java @@ -0,0 +1,96 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationManyToMany; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.webadmin.upms.vo.SysRoleVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.*; + +/** + * 角色实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_role") +public class SysRole { + + /** + * 角色Id。 + */ + @TableId(value = "role_id") + private Long roleId; + + /** + * 角色名称。 + */ + @TableField(value = "role_name") + private String roleName; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @RelationManyToMany( + relationMapperName = "sysRoleMenuMapper", + relationMasterIdField = "roleId", + relationModelClass = SysRoleMenu.class) + @TableField(exist = false) + private List sysRoleMenuList; + + @Mapper + public interface SysRoleModelMapper extends BaseModelMapper { + /** + * 转换VO对象到实体对象。 + * + * @param sysRoleVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "sysRoleMenuList", expression = "java(mapToBean(sysRoleVo.getSysRoleMenuList(), com.flow.demo.webadmin.upms.model.SysRoleMenu.class))") + @Override + SysRole toModel(SysRoleVo sysRoleVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysRole 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "sysRoleMenuList", expression = "java(beanToMap(sysRole.getSysRoleMenuList(), false))") + @Override + SysRoleVo fromModel(SysRole sysRole); + } + public static final SysRoleModelMapper INSTANCE = Mappers.getMapper(SysRole.SysRoleModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysRoleMenu.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysRoleMenu.java new file mode 100644 index 00000000..b094e37a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysRoleMenu.java @@ -0,0 +1,27 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 角色菜单实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_role_menu") +public class SysRoleMenu { + + /** + * 角色Id。 + */ + @TableField(value = "role_id") + private Long roleId; + + /** + * 菜单Id。 + */ + @TableField(value = "menu_id") + private Long menuId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysUser.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysUser.java new file mode 100644 index 00000000..2fb16f3f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysUser.java @@ -0,0 +1,196 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.webadmin.upms.model.constant.SysUserType; +import com.flow.demo.webadmin.upms.model.constant.SysUserStatus; +import com.flow.demo.common.core.annotation.RelationDict; +import com.flow.demo.common.core.annotation.RelationConstDict; +import com.flow.demo.common.core.annotation.RelationManyToMany; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.webadmin.upms.vo.SysUserVo; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; +import java.util.List; + +/** + * SysUser实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_user") +public class SysUser { + + /** + * 用户Id。 + */ + @TableId(value = "user_id") + private Long userId; + + /** + * 登录用户名。 + */ + @TableField(value = "login_name") + private String loginName; + + /** + * 用户密码。 + */ + private String password; + + /** + * 用户显示名称。 + */ + @TableField(value = "show_name") + private String showName; + + /** + * 用户部门Id。 + */ + @TableField(value = "dept_id") + private Long deptId; + + /** + * 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。 + */ + @TableField(value = "user_type") + private Integer userType; + + /** + * 用户头像的Url。 + */ + @TableField(value = "head_image_url") + private String headImageUrl; + + /** + * 用户状态(0: 正常 1: 锁定)。 + */ + @TableField(value = "user_status") + private Integer userStatus; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * createTime 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String createTimeStart; + + /** + * createTime 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String createTimeEnd; + + /** + * 多对多用户部门岗位数据集合。 + */ + @RelationManyToMany( + relationMapperName = "sysUserPostMapper", + relationMasterIdField = "userId", + relationModelClass = SysUserPost.class) + @TableField(exist = false) + private List sysUserPostList; + + /** + * 多对多用户角色数据集合。 + */ + @RelationManyToMany( + relationMapperName = "sysUserRoleMapper", + relationMasterIdField = "userId", + relationModelClass = SysUserRole.class) + @TableField(exist = false) + private List sysUserRoleList; + + /** + * 多对多用户数据权限数据集合。 + */ + @RelationManyToMany( + relationMapperName = "sysDataPermUserMapper", + relationMasterIdField = "userId", + relationModelClass = SysDataPermUser.class) + @TableField(exist = false) + private List sysDataPermUserList; + + @RelationDict( + masterIdField = "deptId", + slaveServiceName = "sysDeptService", + slaveModelClass = SysDept.class, + slaveIdField = "deptId", + slaveNameField = "deptName") + @TableField(exist = false) + private Map deptIdDictMap; + + @RelationConstDict( + masterIdField = "userType", + constantDictClass = SysUserType.class) + @TableField(exist = false) + private Map userTypeDictMap; + + @RelationConstDict( + masterIdField = "userStatus", + constantDictClass = SysUserStatus.class) + @TableField(exist = false) + private Map userStatusDictMap; + + @Mapper + public interface SysUserModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param sysUserVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "sysUserRoleList", expression = "java(mapToBean(sysUserVo.getSysUserRoleList(), com.flow.demo.webadmin.upms.model.SysUserRole.class))") + @Mapping(target = "sysUserPostList", expression = "java(mapToBean(sysUserVo.getSysUserPostList(), com.flow.demo.webadmin.upms.model.SysUserPost.class))") + @Mapping(target = "sysDataPermUserList", expression = "java(mapToBean(sysUserVo.getSysDataPermUserList(), com.flow.demo.webadmin.upms.model.SysDataPermUser.class))") + @Override + SysUser toModel(SysUserVo sysUserVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysUser 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "sysUserRoleList", expression = "java(beanToMap(sysUser.getSysUserRoleList(), false))") + @Mapping(target = "sysUserPostList", expression = "java(beanToMap(sysUser.getSysUserPostList(), false))") + @Mapping(target = "sysDataPermUserList", expression = "java(beanToMap(sysUser.getSysDataPermUserList(), false))") + @Override + SysUserVo fromModel(SysUser sysUser); + } + public static final SysUserModelMapper INSTANCE = Mappers.getMapper(SysUserModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysUserPost.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysUserPost.java new file mode 100644 index 00000000..babc5814 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysUserPost.java @@ -0,0 +1,33 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 用户岗位多对多关系实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_user_post") +public class SysUserPost { + + /** + * 用户Id。 + */ + @TableField(value = "user_id") + private Long userId; + + /** + * 部门岗位Id。 + */ + @TableField(value = "dept_post_id") + private Long deptPostId; + + /** + * 岗位Id。 + */ + @TableField(value = "post_id") + private Long postId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysUserRole.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysUserRole.java new file mode 100644 index 00000000..04718de3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/SysUserRole.java @@ -0,0 +1,27 @@ +package com.flow.demo.webadmin.upms.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 用户角色实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_sys_user_role") +public class SysUserRole { + + /** + * 用户Id。 + */ + @TableField(value = "user_id") + private Long userId; + + /** + * 角色Id。 + */ + @TableField(value = "role_id") + private Long roleId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysMenuType.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysMenuType.java new file mode 100644 index 00000000..b46d11f8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysMenuType.java @@ -0,0 +1,54 @@ +package com.flow.demo.webadmin.upms.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 菜单类型常量对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class SysMenuType { + + /** + * 目录菜单。 + */ + public static final int TYPE_DIRECTORY = 0; + /** + * 普通菜单。 + */ + public static final int TYPE_MENU = 1; + /** + * 表单片段类型。 + */ + public static final int TYPE_UI_FRAGMENT = 2; + /** + * 按钮类型。 + */ + public static final int TYPE_BUTTON = 3; + + private static final Map DICT_MAP = new HashMap<>(4); + static { + DICT_MAP.put(TYPE_DIRECTORY, "目录菜单"); + DICT_MAP.put(TYPE_MENU, "普通菜单"); + DICT_MAP.put(TYPE_UI_FRAGMENT, "表单片段类型"); + DICT_MAP.put(TYPE_BUTTON, "按钮类型"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysMenuType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysOnlineMenuPermType.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysOnlineMenuPermType.java new file mode 100644 index 00000000..b026e64f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysOnlineMenuPermType.java @@ -0,0 +1,44 @@ +package com.flow.demo.webadmin.upms.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 菜单关联在线表单的控制权限类型。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class SysOnlineMenuPermType { + + /** + * 查看。 + */ + public static final int TYPE_VIEW = 0; + /** + * 编辑。 + */ + public static final int TYPE_EDIT = 1; + + private static final Map DICT_MAP = new HashMap<>(4); + static { + DICT_MAP.put(TYPE_VIEW, "查看"); + DICT_MAP.put(TYPE_EDIT, "编辑"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysOnlineMenuPermType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysPermCodeType.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysPermCodeType.java new file mode 100644 index 00000000..d17b8b6d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysPermCodeType.java @@ -0,0 +1,49 @@ +package com.flow.demo.webadmin.upms.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 权限字类型常量对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class SysPermCodeType { + + /** + * 表单权限字。 + */ + public static final int TYPE_FORM = 0; + /** + * 表单片段布局权限字。 + */ + public static final int TYPE_FRAGMENT = 1; + /** + * 操作权限字。 + */ + public static final int TYPE_OPERATION = 2; + + private static final Map DICT_MAP = new HashMap<>(3); + static { + DICT_MAP.put(TYPE_FORM, "表单权限字"); + DICT_MAP.put(TYPE_FRAGMENT, "表单片段布局权限字"); + DICT_MAP.put(TYPE_OPERATION, "操作权限字"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysPermCodeType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysPermModuleType.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysPermModuleType.java new file mode 100644 index 00000000..68eed76e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysPermModuleType.java @@ -0,0 +1,44 @@ +package com.flow.demo.webadmin.upms.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 权限资源模块类型常量对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class SysPermModuleType { + + /** + * 普通模块。 + */ + public static final int TYPE_NORMAL = 0; + /** + * controller接口模块。 + */ + public static final int TYPE_CONTROLLER = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(TYPE_NORMAL, "普通模块"); + DICT_MAP.put(TYPE_CONTROLLER, "controller接口模块"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysPermModuleType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysUserStatus.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysUserStatus.java new file mode 100644 index 00000000..f08e455f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysUserStatus.java @@ -0,0 +1,44 @@ +package com.flow.demo.webadmin.upms.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 用户状态常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class SysUserStatus { + + /** + * 正常状态。 + */ + public static final int STATUS_NORMAL = 0; + /** + * 锁定状态。 + */ + public static final int STATUS_LOCKED = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(STATUS_NORMAL, "正常状态"); + DICT_MAP.put(STATUS_LOCKED, "锁定状态"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysUserStatus() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysUserType.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysUserType.java new file mode 100644 index 00000000..580f492e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/model/constant/SysUserType.java @@ -0,0 +1,49 @@ +package com.flow.demo.webadmin.upms.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 用户类型常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class SysUserType { + + /** + * 管理员。 + */ + public static final int TYPE_ADMIN = 0; + /** + * 系统操作员。 + */ + public static final int TYPE_SYSTEM = 1; + /** + * 普通操作员。 + */ + public static final int TYPE_OPERATOR = 2; + + private static final Map DICT_MAP = new HashMap<>(3); + static { + DICT_MAP.put(TYPE_ADMIN, "管理员"); + DICT_MAP.put(TYPE_SYSTEM, "系统操作员"); + DICT_MAP.put(TYPE_OPERATOR, "普通操作员"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysUserType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysDataPermService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysDataPermService.java new file mode 100644 index 00000000..3012c5e9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysDataPermService.java @@ -0,0 +1,104 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.webadmin.upms.model.*; + +import java.util.*; + +/** + * 数据权限数据服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysDataPermService extends IBaseService { + + /** + * 保存新增的数据权限对象。 + * + * @param dataPerm 新增的数据权限对象。 + * @param deptIdSet 关联的部门Id列表。 + * @return 新增后的数据权限对象。 + */ + SysDataPerm saveNew(SysDataPerm dataPerm, Set deptIdSet); + + /** + * 更新数据权限对象。 + * + * @param dataPerm 更新的数据权限对象。 + * @param originalDataPerm 原有的数据权限对象。 + * @param deptIdSet 关联的部门Id列表。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysDataPerm dataPerm, SysDataPerm originalDataPerm, Set deptIdSet); + + /** + * 删除指定数据权限。 + * + * @param dataPermId 数据权限主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long dataPermId); + + /** + * 获取数据权限列表。 + * + * @param filter 数据权限过滤对象。 + * @param orderBy 排序参数。 + * @return 数据权限查询列表。 + */ + List getSysDataPermList(SysDataPerm filter, String orderBy); + + /** + * 将指定用户的指定会话的数据权限集合存入缓存。 + * + * @param sessionId 会话Id。 + * @param userId 用户主键Id。 + * @param deptId 用户所属部门主键Id。 + * @return 查询并缓存后的数据权限集合。返回格式为,Map。 + */ + Map putDataPermCache(String sessionId, Long userId, Long deptId); + + /** + * 将指定会话的数据权限集合从缓存中移除。 + * + * @param sessionId 会话Id。 + */ + void removeDataPermCache(String sessionId); + + /** + * 获取指定用户Id的数据权限列表。并基于权限规则类型进行了一级分组。 + * + * @param userId 指定的用户Id。 + * @param deptId 用户所属部门主键Id。 + * @return 合并优化后的数据权限列表。返回格式为,Map。 + */ + Map getSysDataPermListByUserId(Long userId, Long deptId); + + /** + * 添加用户和数据权限之间的多对多关联关系。 + * + * @param dataPermId 数据权限Id。 + * @param userIdSet 关联的用户Id列表。 + */ + void addDataPermUserList(Long dataPermId, Set userIdSet); + + /** + * 移除用户和数据权限之间的多对多关联关系。 + * + * @param dataPermId 数据权限主键Id。 + * @param userId 用户主键Id。 + * @return true移除成功,否则false。 + */ + boolean removeDataPermUser(Long dataPermId, Long userId); + + /** + * 验证数据权限对象关联菜单数据是否都合法。 + * + * @param dataPerm 数据权限关对象。 + * @param deptIdListString 与数据权限关联的部门Id列表。 + * @return 验证结果。 + */ + CallResult verifyRelatedData(SysDataPerm dataPerm, String deptIdListString); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysDeptService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysDeptService.java new file mode 100644 index 00000000..bfdae383 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysDeptService.java @@ -0,0 +1,144 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.webadmin.upms.model.*; +import com.flow.demo.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 部门管理数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysDeptService extends IBaseService { + + /** + * 保存新增的部门对象。 + * + * @param sysDept 新增的部门对象。 + * @param parentSysDept 上级部门对象。 + * @return 新增后的部门对象。 + */ + SysDept saveNew(SysDept sysDept, SysDept parentSysDept); + + /** + * 更新部门对象。 + * + * @param sysDept 更新的部门对象。 + * @param originalSysDept 原有的部门对象。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysDept sysDept, SysDept originalSysDept); + + /** + * 删除指定数据。 + * + * @param deptId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long deptId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysDeptListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysDeptList(SysDept filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getSysDeptList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysDeptListWithRelation(SysDept filter, String orderBy); + + /** + * 判断指定对象是否包含下级对象。 + * + * @param deptId 主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildren(Long deptId); + + /** + * 判断指定部门Id是否包含用户对象。 + * + * @param deptId 部门主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildrenUser(Long deptId); + + /** + * 批量添加多对多关联关系。 + * + * @param sysDeptPostList 多对多关联表对象集合。 + * @param deptId 主表Id。 + */ + void addSysDeptPostList(List sysDeptPostList, Long deptId); + + /** + * 更新中间表数据。 + * + * @param sysDeptPost 中间表对象。 + * @return 更新成功与否。 + */ + boolean updateSysDeptPost(SysDeptPost sysDeptPost); + + /** + * 移除单条多对多关系。 + * + * @param deptId 主表Id。 + * @param postId 从表Id。 + * @return 成功返回true,否则false。 + */ + boolean removeSysDeptPost(Long deptId, Long postId); + + /** + * 获取中间表数据。 + * + * @param deptId 主表Id。 + * @param postId 从表Id。 + * @return 中间表对象。 + */ + SysDeptPost getSysDeptPost(Long deptId, Long postId); + + /** + * 根据部门岗位Id获取部门岗位关联对象。 + * + * @param deptPostId 部门岗位Id。 + * @return 部门岗位对象。 + */ + SysDeptPost getSysDeptPost(Long deptPostId); + + /** + * 获取指定部门Id的部门岗位多对多关联数据列表,以及关联的部门和岗位数据。 + * + * @param deptId 部门Id。如果参数为空则返回全部数据。 + * @return 部门岗位多对多数量列表。 + */ + List> getSysDeptPostListWithRelationByDeptId(Long deptId); + + /** + * 根据部门Id获取该部门领导岗位的部门岗位Id集合。 + * + * @param deptId 部门Id。 + * @return 部门领导岗位的部门岗位Id集合。 + */ + List getLeaderDeptPostIdList(Long deptId); + + /** + * 根据部门Id获取上级部门领导岗位的部门岗位Id集合。 + * + * @param deptId 部门Id。 + * @return 上级部门领导岗位的部门岗位Id集合。 + */ + List getUpLeaderDeptPostIdList(Long deptId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysMenuService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysMenuService.java new file mode 100644 index 00000000..c320452f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysMenuService.java @@ -0,0 +1,111 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.webadmin.upms.model.SysMenu; + +import java.util.*; + +/** + * 菜单数据服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysMenuService extends IBaseService { + + /** + * 保存新增的菜单对象。 + * + * @param sysMenu 新增的菜单对象。 + * @param permCodeIdSet 权限字Id列表。 + * @return 新增后的菜单对象。 + */ + SysMenu saveNew(SysMenu sysMenu, Set permCodeIdSet); + + /** + * 更新菜单对象。 + * + * @param sysMenu 更新的菜单对象。 + * @param originalSysMenu 原有的菜单对象。 + * @param permCodeIdSet 权限字Id列表。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set permCodeIdSet); + + /** + * 删除指定的菜单。 + * + * @param menu 菜单对象。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(SysMenu menu); + + /** + * 获取全部菜单列表。 + * + * @return 全部菜单列表。 + */ + Collection getAllMenuList(); + + /** + * 获取指定用户Id的菜单列表,已去重。 + * + * @param userId 用户主键Id。 + * @return 用户关联的菜单列表。 + */ + Collection getMenuListByUserId(Long userId); + + /** + * 判断当前菜单是否存在子菜单。 + * + * @param menuId 菜单主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildren(Long menuId); + + /** + * 验证菜单对象关联的数据是否都合法。 + * + * @param sysMenu 当前操作的对象。 + * @param originalSysMenu 原有对象。 + * @param permCodeIdListString 逗号分隔的权限Id列表。 + * @return 验证结果。 + */ + CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString); + + /** + * 查询菜单的权限资源地址列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param url 权限资源地址过滤条件。 + * @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail(Long menuId, String url); + + /** + * 查询菜单的用户列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param loginName 登录名。 + * @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail(Long menuId, String loginName); + + /** + * 获取指定类型的所有在线表单的菜单。 + * + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + List getAllOnlineMenuList(Integer menuType); + + /** + * 获取当前用户有权访问的在线表单菜单,仅返回类型为BUTTON的菜单。 + * + * @param userId 指定的用户。 + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + List getOnlineMenuListByUserId(Long userId, Integer menuType); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermCodeService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermCodeService.java new file mode 100644 index 00000000..2863fea0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermCodeService.java @@ -0,0 +1,94 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.webadmin.upms.model.SysPermCode; + +import java.util.*; + +/** + * 权限字数据服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPermCodeService extends IBaseService { + + /** + * 获取指定用户的权限字列表,已去重。 + * + * @param userId 用户主键Id。 + * @return 用户关联的权限字列表。 + */ + Collection getPermCodeListByUserId(Long userId); + + /** + * 获取所有权限字数据列表,已去重。 + * + * @return 全部权限字列表。 + */ + Collection getAllPermCodeList(); + + /** + * 保存新增的权限字对象。 + * + * @param sysPermCode 新增的权限字对象。 + * @param permIdSet 权限资源Id列表。 + * @return 新增后的权限字对象。 + */ + SysPermCode saveNew(SysPermCode sysPermCode, Set permIdSet); + + /** + * 更新权限字对象。 + * + * @param sysPermCode 更新的权限字对象。 + * @param originalSysPermCode 原有的权限字对象。 + * @param permIdSet 权限资源Id列表。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set permIdSet); + + /** + * 删除指定的权限字。 + * + * @param permCodeId 权限字主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long permCodeId); + + /** + * 判断当前权限字是否存在下级权限字对象。 + * + * @param permCodeId 权限字主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildren(Long permCodeId); + + /** + * 验证权限字对象关联的数据是否都合法。 + * + * @param sysPermCode 当前操作的对象。 + * @param originalSysPermCode 原有对象。 + * @param permIdListString 逗号分隔的权限资源Id列表。 + * @return 验证结果。 + */ + CallResult verifyRelatedData(SysPermCode sysPermCode, SysPermCode originalSysPermCode, String permIdListString); + + /** + * 查询权限字的用户列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param loginName 登录名。 + * @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail(Long permCodeId, String loginName); + + /** + * 查询权限字的角色列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param roleName 角色名。 + * @return 包含从权限字到角色的权限分配路径信息的查询结果列表。 + */ + List> getSysRoleListWithDetail(Long permCodeId, String roleName); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermModuleService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermModuleService.java new file mode 100644 index 00000000..ebd3ff49 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermModuleService.java @@ -0,0 +1,63 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.webadmin.upms.model.SysPermModule; + +import java.util.*; + +/** + * 权限资源模块数据服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPermModuleService extends IBaseService { + + /** + * 保存新增的权限资源模块对象。 + * + * @param sysPermModule 新增的权限资源模块对象。 + * @return 新增后的权限资源模块对象。 + */ + SysPermModule saveNew(SysPermModule sysPermModule); + + /** + * 更新权限资源模块对象。 + * + * @param sysPermModule 更新的权限资源模块对象。 + * @param originalSysPermModule 原有的权限资源模块对象。 + * @return 更新成功返回true,否则false + */ + boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule); + + /** + * 删除指定的权限资源模块。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long moduleId); + + /** + * 获取权限模块资源及其关联的权限资源列表。 + * + * @return 权限资源模块及其关联的权限资源列表。 + */ + List getPermModuleAndPermList(); + + /** + * 判断是否存在下级权限资源模块。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildren(Long moduleId); + + /** + * 判断是否存在权限数据。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasModulePerms(Long moduleId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermService.java new file mode 100644 index 00000000..a863f729 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermService.java @@ -0,0 +1,117 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.webadmin.upms.model.SysPerm; + +import java.util.*; + +/** + * 权限资源数据服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPermService extends IBaseService { + + /** + * 保存新增的权限资源对象。 + * + * @param perm 新增的权限资源对象。 + * @return 新增后的权限资源对象。 + */ + SysPerm saveNew(SysPerm perm); + + /** + * 更新权限资源对象。 + * + * @param perm 更新的权限资源对象。 + * @param originalPerm 原有的权限资源对象。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysPerm perm, SysPerm originalPerm); + + /** + * 删除权限资源。 + * + * @param permId 权限资源主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long permId); + + /** + * 获取权限数据列表。 + * + * @param sysPermFilter 过滤对象。 + * @return 权限列表。 + */ + List getPermListWithRelation(SysPerm sysPermFilter); + + /** + * 将指定用户的指定会话的权限集合存入缓存。 + * + * @param sessionId 会话Id。 + * @param userId 用户主键Id。 + * @return 查询并缓存后的权限集合。 + */ + Collection putUserSysPermCache(String sessionId, Long userId); + + /** + * 把在线表单的权限URL集合,存放到权限URL的缓存中。 + * + * @param sessionId 会话Id。 + * @param permUrlSet URL集合。 + */ + void putOnlinePermToCache(String sessionId, Set permUrlSet); + + /** + * 将指定会话的权限集合从缓存中移除。 + * + * @param sessionId 会话Id。 + */ + void removeUserSysPermCache(String sessionId); + + /** + * 获取与指定用户关联的权限资源列表,已去重。 + * + * @param userId 关联的用户主键Id。 + * @return 与指定用户Id关联的权限资源列表。 + */ + Collection getPermListByUserId(Long userId); + + /** + * 验证权限资源对象关联的数据是否都合法。 + * + * @param sysPerm 当前操作的对象。 + * @param originalSysPerm 原有对象。 + * @return 验证结果。 + */ + CallResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm); + + /** + * 查询权限资源地址的用户列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param loginName 登录名。 + * @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail(Long permId, String loginName); + + /** + * 查询权限资源地址的角色列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param roleName 角色名。 + * @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。 + */ + List> getSysRoleListWithDetail(Long permId, String roleName); + + /** + * 查询权限资源地址的菜单列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param menuName 菜单名。 + * @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。 + */ + List> getSysMenuListWithDetail(Long permId, String menuName); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermWhitelistService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermWhitelistService.java new file mode 100644 index 00000000..3ff3d340 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPermWhitelistService.java @@ -0,0 +1,23 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.webadmin.upms.model.SysPermWhitelist; + +import java.util.List; + +/** + * 权限资源白名单数据服务接口。 + * 白名单中的权限资源,可以不受权限控制,任何用户皆可访问,一般用于常用的字典数据列表接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPermWhitelistService extends IBaseService { + + /** + * 获取白名单权限资源的列表。 + * + * @return 白名单权限资源地址列表。 + */ + List getWhitelistPermList(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPostService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPostService.java new file mode 100644 index 00000000..ee7bd497 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysPostService.java @@ -0,0 +1,99 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.webadmin.upms.model.SysPost; +import com.flow.demo.webadmin.upms.model.SysUserPost; + +import java.util.*; + +/** + * 岗位管理数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysPostService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param sysPost 新增对象。 + * @return 返回新增对象。 + */ + SysPost saveNew(SysPost sysPost); + + /** + * 更新数据对象。 + * + * @param sysPost 更新的对象。 + * @param originalSysPost 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(SysPost sysPost, SysPost originalSysPost); + + /** + * 删除指定数据。 + * + * @param postId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long postId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysPostListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysPostList(SysPost filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getSysPostList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysPostListWithRelation(SysPost filter, String orderBy); + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param deptId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getNotInSysPostListByDeptId(Long deptId, SysPost filter, String orderBy); + + /** + * 获取指定部门的岗位列表。 + * + * @param deptId 部门Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysPostListByDeptId(Long deptId, SysPost filter, String orderBy); + + /** + * 获取指定用户的用户岗位多对多关联数据列表。 + * + * @param userId 用户Id。 + * @return 用户岗位多对多关联数据列表。 + */ + List getSysUserPostListByUserId(Long userId); + + /** + * 判断指定的部门岗位Id集合是否都属于指定的部门Id。 + * + * @param deptPostIdSet 部门岗位Id集合。 + * @param deptId 部门Id。 + * @return 全部是返回true,否则false。 + */ + boolean existAllPrimaryKeys(Set deptPostIdSet, Long deptId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysRoleService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysRoleService.java new file mode 100644 index 00000000..6077e985 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysRoleService.java @@ -0,0 +1,97 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.webadmin.upms.model.SysRole; +import com.flow.demo.webadmin.upms.model.SysUserRole; + +import java.util.*; + +/** + * 角色数据服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysRoleService extends IBaseService { + + /** + * 保存新增的角色对象。 + * + * @param role 新增的角色对象。 + * @param menuIdSet 菜单Id列表。 + * @return 新增后的角色对象。 + */ + SysRole saveNew(SysRole role, Set menuIdSet); + + /** + * 更新角色对象。 + * + * @param role 更新的角色对象。 + * @param originalRole 原有的角色对象。 + * @param menuIdSet 菜单Id列表。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysRole role, SysRole originalRole, Set menuIdSet); + + /** + * 删除指定角色。 + * + * @param roleId 角色主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long roleId); + + /** + * 获取角色列表。 + * + * @param filter 角色过滤对象。 + * @param orderBy 排序参数。 + * @return 角色列表。 + */ + List getSysRoleList(SysRole filter, String orderBy); + + /** + * 批量新增用户角色关联。 + * + * @param userRoleList 用户角色关系数据列表。 + */ + void addUserRoleList(List userRoleList); + + /** + * 移除指定用户和指定角色的关联关系。 + * + * @param roleId 角色主键Id。 + * @param userId 用户主键Id。 + * @return 移除成功返回true,否则false。 + */ + boolean removeUserRole(Long roleId, Long userId); + + /** + * 验证角色对象关联的数据是否都合法。 + * + * @param sysRole 当前操作的对象。 + * @param originalSysRole 原有对象。 + * @param menuIdListString 逗号分隔的menuId列表。 + * @return 验证结果。 + */ + CallResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString); + + /** + * 查询角色的权限资源地址列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param url url过滤条件。 + * @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail(Long roleId, String url); + + /** + * 查询角色的权限字列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从角色到权限字的权限分配路径信息的查询结果列表。 + */ + List> getSysPermCodeListWithDetail(Long roleId, String permCode); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysUserService.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysUserService.java new file mode 100644 index 00000000..503d46ef --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/SysUserService.java @@ -0,0 +1,164 @@ +package com.flow.demo.webadmin.upms.service; + +import com.flow.demo.webadmin.upms.model.*; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 用户管理数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysUserService extends IBaseService { + + /** + * 获取指定登录名的用户对象。 + * + * @param loginName 指定登录用户名。 + * @return 用户对象。 + */ + SysUser getSysUserByLoginName(String loginName); + + /** + * 保存新增的用户对象。 + * + * @param user 新增的用户对象。 + * @param roleIdSet 用户角色Id集合。 + * @param deptPostIdSet 部门岗位Id集合。 + * @param dataPermIdSet 数据权限Id集合。 + * @return 新增后的用户对象。 + */ + SysUser saveNew(SysUser user, Set roleIdSet, Set deptPostIdSet, Set dataPermIdSet); + + /** + * 更新用户对象。 + * + * @param user 更新的用户对象。 + * @param originalUser 原有的用户对象。 + * @param roleIdSet 用户角色Id列表。 + * @param deptPostIdSet 部门岗位Id集合。 + * @param dataPermIdSet 数据权限Id集合。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysUser user, SysUser originalUser, Set roleIdSet, Set deptPostIdSet, Set dataPermIdSet); + + /** + * 修改用户密码。 + * @param userId 用户主键Id。 + * @param newPass 新密码。 + * @return 成功返回true,否则false。 + */ + boolean changePassword(Long userId, String newPass); + + /** + * 删除指定数据。 + * + * @param userId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long userId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysUserList(SysUser filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getSysUserList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysUserListWithRelation(SysUser filter, String orderBy); + + /** + * 获取指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + List getSysUserListByRoleId(Long roleId, SysUser filter, String orderBy); + + /** + * 获取不属于指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + List getNotInSysUserListByRoleId(Long roleId, SysUser filter, String orderBy); + + /** + * 获取指定数据权限的用户列表。 + * + * @param dataPermId 数据权限主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + List getSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy); + + /** + * 获取不属于指定数据权限的用户列表。 + * + * @param dataPermId 数据权限主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + List getNotInSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy); + + /** + * 查询用户的权限资源地址列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param url url过滤条件。 + * @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail(Long userId, String url); + + /** + * 查询用户的权限字列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从用户到权限字的权限分配路径信息的查询结果列表。 + */ + List> getSysPermCodeListWithDetail(Long userId, String permCode); + + /** + * 查询用户的菜单列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param menuName 菜单名称过滤条件。 + * @return 包含从用户到菜单的权限分配路径信息的查询结果列表。 + */ + List> getSysMenuListWithDetail(Long userId, String menuName); + + /** + * 验证用户对象关联的数据是否都合法。 + * + * @param sysUser 当前操作的对象。 + * @param originalSysUser 原有对象。 + * @param roleIds 逗号分隔的角色Id列表字符串。 + * @param deptPostIds 逗号分隔的部门岗位Id列表字符串。 + * @param dataPermIds 逗号分隔的数据权限Id列表字符串。 + * @return 验证结果。 + */ + CallResult verifyRelatedData( + SysUser sysUser, SysUser originalSysUser, String roleIds, String deptPostIds, String dataPermIds); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysDataPermServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysDataPermServiceImpl.java new file mode 100644 index 00000000..492c4203 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysDataPermServiceImpl.java @@ -0,0 +1,336 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.datafilter.constant.DataPermRuleType; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.RedisKeyUtil; +import com.flow.demo.webadmin.config.ApplicationConfig; +import com.flow.demo.webadmin.upms.dao.SysDataPermDeptMapper; +import com.flow.demo.webadmin.upms.dao.SysDataPermMapper; +import com.flow.demo.webadmin.upms.dao.SysDataPermUserMapper; +import com.flow.demo.webadmin.upms.model.*; +import com.flow.demo.webadmin.upms.service.SysDataPermService; +import com.flow.demo.webadmin.upms.service.SysDeptService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 数据权限数据服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysDataPermService") +public class SysDataPermServiceImpl extends BaseService implements SysDataPermService { + + @Autowired + private SysDataPermMapper sysDataPermMapper; + @Autowired + private SysDataPermDeptMapper sysDataPermDeptMapper; + @Autowired + private SysDataPermUserMapper sysDataPermUserMapper; + @Autowired + private SysDeptService sysDeptService; + @Autowired + private RedissonClient redissonClient; + @Autowired + private ApplicationConfig applicationConfig; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysDataPermMapper; + } + + /** + * 保存新增的数据权限对象。 + * + * @param dataPerm 新增的数据权限对象。 + * @param deptIdSet 关联的部门Id列表。 + * @return 新增后的数据权限对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysDataPerm saveNew(SysDataPerm dataPerm, Set deptIdSet) { + dataPerm.setDataPermId(idGenerator.nextLongId()); + MyModelUtil.fillCommonsForInsert(dataPerm); + dataPerm.setDeletedFlag(GlobalDeletedFlag.NORMAL); + sysDataPermMapper.insert(dataPerm); + this.insertRelationData(dataPerm, deptIdSet); + return dataPerm; + } + + /** + * 更新数据权限对象。 + * + * @param dataPerm 更新的数据权限对象。 + * @param originalDataPerm 原有的数据权限对象。 + * @param deptIdSet 关联的部门Id列表。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysDataPerm dataPerm, SysDataPerm originalDataPerm, Set deptIdSet) { + MyModelUtil.fillCommonsForUpdate(dataPerm, originalDataPerm); + UpdateWrapper uw = this.createUpdateQueryForNullValue(dataPerm, dataPerm.getDataPermId()); + if (sysDataPermMapper.update(dataPerm, uw) != 1) { + return false; + } + SysDataPermDept dataPermDept = new SysDataPermDept(); + dataPermDept.setDataPermId(dataPerm.getDataPermId()); + sysDataPermDeptMapper.delete(new QueryWrapper<>(dataPermDept)); + this.insertRelationData(dataPerm, deptIdSet); + return true; + } + + /** + * 删除指定数据权限。 + * + * @param dataPermId 数据权限主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long dataPermId) { + if (sysDataPermMapper.deleteById(dataPermId) != 1) { + return false; + } + SysDataPermDept dataPermDept = new SysDataPermDept(); + dataPermDept.setDataPermId(dataPermId); + sysDataPermDeptMapper.delete(new QueryWrapper<>(dataPermDept)); + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + sysDataPermUserMapper.delete(new QueryWrapper<>(dataPermUser)); + return true; + } + + /** + * 获取数据权限列表。 + * + * @param filter 数据权限过滤对象。 + * @param orderBy 排序参数。 + * @return 数据权限查询列表。 + */ + @Override + public List getSysDataPermList(SysDataPerm filter, String orderBy) { + return sysDataPermMapper.getSysDataPermList(filter, orderBy); + } + + /** + * 将指定用户的指定会话的数据权限集合存入缓存。 + * + * @param sessionId 会话Id。 + * @param userId 用户主键Id。 + * @param deptId 用户所属部门主键Id。 + * @return 查询并缓存后的数据权限集合。返回格式为,Map。 + */ + @Override + public Map putDataPermCache(String sessionId, Long userId, Long deptId) { + Map dataPermMap = this.getSysDataPermListByUserId(userId, deptId); + if (dataPermMap.size() > 0) { + String dataPermSessionKey = RedisKeyUtil.makeSessionDataPermIdKey(sessionId); + RBucket bucket = redissonClient.getBucket(dataPermSessionKey); + bucket.set(JSON.toJSONString(dataPermMap), + applicationConfig.getSessionExpiredSeconds(), TimeUnit.SECONDS); + } + return dataPermMap; + } + + /** + * 将指定会话的数据权限集合从缓存中移除。 + * + * @param sessionId 会话Id。 + */ + @Override + public void removeDataPermCache(String sessionId) { + String sessionPermKey = RedisKeyUtil.makeSessionDataPermIdKey(sessionId); + redissonClient.getBucket(sessionPermKey).deleteAsync(); + } + + /** + * 获取指定用户Id的数据权限列表。并基于权限规则类型进行了一级分组。 + * + * @param userId 指定的用户Id。 + * @param deptId 用户所属部门主键Id。 + * @return 合并优化后的数据权限列表。返回格式为,Map。 + */ + @Override + public Map getSysDataPermListByUserId(Long userId, Long deptId) { + List dataPermList = sysDataPermMapper.getSysDataPermListByUserId(userId); + dataPermList.forEach(dataPerm -> { + if (CollectionUtils.isNotEmpty(dataPerm.getDataPermDeptList())) { + Set deptIdSet = dataPerm.getDataPermDeptList().stream() + .map(SysDataPermDept::getDeptId).collect(Collectors.toSet()); + dataPerm.setDeptIdListString(StringUtils.join(deptIdSet, ",")); + } + }); + // 为了更方便进行后续的合并优化处理,这里再基于规则类型进行分组。ruleMap的key是规则类型。 + Map> ruleMap = + dataPermList.stream().collect(Collectors.groupingBy(SysDataPerm::getRuleType)); + Map resultMap = new HashMap<>(ruleMap.size()); + // 如有有ALL存在,就可以直接退出了,没有必要在处理后续的规则了。 + if (ruleMap.containsKey(DataPermRuleType.TYPE_ALL)) { + resultMap.put(DataPermRuleType.TYPE_ALL, "null"); + return resultMap; + } + // 这里优先合并最复杂的多部门及子部门场景。 + String deptIds = processMultiDeptAndChildren(ruleMap, deptId); + if (deptIds != null) { + resultMap.put(DataPermRuleType.TYPE_MULTI_DEPT_AND_CHILD_DEPT, deptIds); + } + // 合并当前部门及子部门的优化 + if (ruleMap.get(DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT) != null) { + // 需要与仅仅当前部门规则进行合并。 + ruleMap.remove(DataPermRuleType.TYPE_DEPT_ONLY); + resultMap.put(DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT, "null"); + } + // 合并自定义部门了。 + deptIds = processMultiDept(ruleMap, deptId); + if (deptIds != null) { + resultMap.put(DataPermRuleType.TYPE_CUSTOM_DEPT_LIST, deptIds); + } + // 最后处理当前部门和当前用户。 + if (ruleMap.get(DataPermRuleType.TYPE_DEPT_ONLY) != null) { + resultMap.put(DataPermRuleType.TYPE_DEPT_ONLY, "null"); + } + if (ruleMap.get(DataPermRuleType.TYPE_USER_ONLY) != null) { + resultMap.put(DataPermRuleType.TYPE_USER_ONLY, "null"); + } + return resultMap; + } + + private String processMultiDeptAndChildren(Map> ruleMap, Long deptId) { + List parentDeptList = ruleMap.get(DataPermRuleType.TYPE_MULTI_DEPT_AND_CHILD_DEPT); + if (parentDeptList == null) { + return null; + } + Set deptIdSet = new HashSet<>(); + for (SysDataPerm parentDept : parentDeptList) { + deptIdSet.addAll(Arrays.stream(StringUtils.split( + parentDept.getDeptIdListString(), ",")).map(Long::valueOf).collect(Collectors.toSet())); + } + // 在合并所有的多父部门Id之后,需要判断是否有本部门及子部门的规则。如果有,就继续合并。 + if (ruleMap.containsKey(DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT)) { + // 如果多父部门列表中包含当前部门,那么可以直接删除该规则了,如果没包含,就加入到多部门的DEPT_ID的IN LIST中。 + deptIdSet.add(deptId); + ruleMap.remove(DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT); + } + // 需要与仅仅当前部门规则进行合并。 + if (ruleMap.containsKey(DataPermRuleType.TYPE_DEPT_ONLY)) { + if (deptIdSet.contains(deptId)) { + ruleMap.remove(DataPermRuleType.TYPE_DEPT_ONLY); + } + } + return StringUtils.join(deptIdSet, ','); + } + + private String processMultiDept(Map> ruleMap, Long deptId) { + List customDeptList = ruleMap.get(DataPermRuleType.TYPE_CUSTOM_DEPT_LIST); + if (customDeptList == null) { + return null; + } + Set deptIdSet = new HashSet<>(); + for (SysDataPerm customDept : customDeptList) { + deptIdSet.addAll(Arrays.stream(StringUtils.split( + customDept.getDeptIdListString(), ",")).map(Long::valueOf).collect(Collectors.toSet())); + } + if (ruleMap.containsKey(DataPermRuleType.TYPE_DEPT_ONLY)) { + deptIdSet.add(deptId); + ruleMap.remove(DataPermRuleType.TYPE_DEPT_ONLY); + } + return StringUtils.join(deptIdSet, ','); + } + + /** + * 添加用户和数据权限之间的多对多关联关系。 + * + * @param dataPermId 数据权限Id。 + * @param userIdSet 关联的用户Id列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void addDataPermUserList(Long dataPermId, Set userIdSet) { + for (Long userId : userIdSet) { + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + dataPermUser.setUserId(userId); + sysDataPermUserMapper.insert(dataPermUser); + } + } + + /** + * 移除用户和数据权限之间的多对多关联关系。 + * + * @param dataPermId 数据权限主键Id。 + * @param userId 用户主键Id。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean removeDataPermUser(Long dataPermId, Long userId) { + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + dataPermUser.setUserId(userId); + return sysDataPermUserMapper.delete(new QueryWrapper<>(dataPermUser)) == 1; + } + + /** + * 验证数据权限对象关联菜单数据是否都合法。 + * + * @param dataPerm 数据权限关对象。 + * @param deptIdListString 与数据权限关联的部门Id列表。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData(SysDataPerm dataPerm, String deptIdListString) { + JSONObject jsonObject = new JSONObject(); + if (dataPerm.getRuleType() == DataPermRuleType.TYPE_MULTI_DEPT_AND_CHILD_DEPT + || dataPerm.getRuleType() == DataPermRuleType.TYPE_CUSTOM_DEPT_LIST) { + if (StringUtils.isBlank(deptIdListString)) { + return CallResult.error("数据验证失败,部门列表不能为空!"); + } + Set deptIdSet = Arrays.stream(StringUtils.split( + deptIdListString, ",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysDeptService.existAllPrimaryKeys(deptIdSet)) { + return CallResult.error("数据验证失败,存在不合法的部门数据,请刷新后重试!"); + } + jsonObject.put("deptIdSet", deptIdSet); + } + return CallResult.ok(jsonObject); + } + + private void insertRelationData(SysDataPerm dataPerm, Set deptIdSet) { + if (CollectionUtils.isNotEmpty(deptIdSet)) { + for (Long deptId : deptIdSet) { + SysDataPermDept dataPermDept = new SysDataPermDept(); + dataPermDept.setDataPermId(dataPerm.getDataPermId()); + dataPermDept.setDeptId(deptId); + sysDataPermDeptMapper.insert(dataPermDept); + } + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysDeptServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysDeptServiceImpl.java new file mode 100644 index 00000000..a0835a51 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,331 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.webadmin.upms.service.*; +import com.flow.demo.webadmin.upms.dao.*; +import com.flow.demo.webadmin.upms.model.*; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 部门管理数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysDeptService") +public class SysDeptServiceImpl extends BaseService implements SysDeptService { + + @Autowired + private SysDeptMapper sysDeptMapper; + @Autowired + private SysDeptRelationMapper sysDeptRelationMapper; + @Autowired + private SysUserService sysUserService; + @Autowired + private SysDeptPostMapper sysDeptPostMapper; + @Autowired + private SysDataPermDeptMapper sysDataPermDeptMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysDeptMapper; + } + + /** + * 保存新增的部门对象。 + * + * @param sysDept 新增的部门对象。 + * @param parentSysDept 上级部门对象。 + * @return 新增后的部门对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysDept saveNew(SysDept sysDept, SysDept parentSysDept) { + sysDept.setDeptId(idGenerator.nextLongId()); + sysDept.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(sysDept); + sysDeptMapper.insert(sysDept); + // 同步插入部门关联关系数据 + if (parentSysDept == null) { + sysDeptRelationMapper.insert(new SysDeptRelation(sysDept.getDeptId(), sysDept.getDeptId())); + } else { + sysDeptRelationMapper.insertParentList(parentSysDept.getDeptId(), sysDept.getDeptId()); + } + return sysDept; + } + + /** + * 更新部门对象。 + * + * @param sysDept 更新的部门对象。 + * @param originalSysDept 原有的部门对象。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysDept sysDept, SysDept originalSysDept) { + MyModelUtil.fillCommonsForUpdate(sysDept, originalSysDept); + UpdateWrapper uw = this.createUpdateQueryForNullValue(sysDept, sysDept.getDeptId()); + if (sysDeptMapper.update(sysDept, uw) == 0) { + return false; + } + if (ObjectUtils.notEqual(sysDept.getParentId(), originalSysDept.getParentId())) { + this.updateParentRelation(sysDept, originalSysDept); + } + return true; + } + + private void updateParentRelation(SysDept sysDept, SysDept originalSysDept) { + // 1. 在删除当前部门与原有父部门的关联关系之前,先将原有的所有父部门Id缓存。 + List originalParentIdList = new LinkedList<>(); + if (originalSysDept.getParentId() != null) { + SysDept originalParentDept = getById(originalSysDept.getParentId()); + while (originalParentDept != null) { + originalParentIdList.add(originalParentDept.getDeptId()); + if (originalParentDept.getParentId() == null) { + break; + } + originalParentDept = getById(originalParentDept.getParentId()); + } + } + // 删除其子部门与其原有父部门之间的关联关系。 + for (Long parentDeptId : originalParentIdList) { + sysDeptRelationMapper.removeBetweenChildrenAndParents(parentDeptId, sysDept.getDeptId()); + } + // 2. 将当前部门与原有的父部门列表解除关系。 + SysDeptRelation filter = new SysDeptRelation(); + filter.setDeptId(sysDept.getDeptId()); + sysDeptRelationMapper.delete(new QueryWrapper<>(filter)); + // 3. 将当前部门和新的父部门列表建立关联关系。 + // 在插入与新父部门的关联关系 + List deptRelationList = new LinkedList<>(); + // 先插入自己和自己的关系。 + deptRelationList.add(new SysDeptRelation(sysDept.getDeptId(), sysDept.getDeptId())); + SysDept parentSysDept = null; + if (sysDept.getParentId() != null) { + parentSysDept = getById(sysDept.getParentId()); + } + List newParentIdList = new LinkedList<>(); + // 再插入直接父部门,以及父部门的父部门,并向上以此类推。 + while (parentSysDept != null) { + newParentIdList.add(parentSysDept.getDeptId()); + deptRelationList.add( + new SysDeptRelation(parentSysDept.getDeptId(), sysDept.getDeptId())); + if (parentSysDept.getParentId() == null) { + break; + } + parentSysDept = getById(parentSysDept.getParentId()); + } + sysDeptRelationMapper.insertList(deptRelationList); + // 4. 将当前部门的子部门与其新的父部门建立关联关系 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(MyModelUtil.mapToColumnName("parentDeptId", SysDeptRelation.class), sysDept.getDeptId()); + queryWrapper.ne(MyModelUtil.mapToColumnName("deptId", SysDeptRelation.class), sysDept.getDeptId()); + List childRelationList = sysDeptRelationMapper.selectList(queryWrapper); + List newChildrenAndParentList = new LinkedList<>(); + for (Long newParentId : newParentIdList) { + for (SysDeptRelation childDeptRelation : childRelationList) { + newChildrenAndParentList.add(new SysDeptRelation(newParentId, childDeptRelation.getDeptId())); + } + } + if (CollectionUtils.isNotEmpty(newChildrenAndParentList)) { + sysDeptRelationMapper.insertList(newChildrenAndParentList); + } + } + + /** + * 删除指定数据。 + * + * @param deptId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long deptId) { + if (sysDeptMapper.deleteById(deptId) == 0) { + return false; + } + // 这里删除当前部门及其父部门的关联关系。 + // 当前部门和子部门的关系无需在这里删除,因为包含子部门时不能删除父部门。 + SysDeptRelation deptRelation = new SysDeptRelation(); + deptRelation.setDeptId(deptId); + sysDeptRelationMapper.delete(new QueryWrapper<>(deptRelation)); + SysDataPermDept dataPermDept = new SysDataPermDept(); + dataPermDept.setDeptId(deptId); + sysDataPermDeptMapper.delete(new QueryWrapper<>(dataPermDept)); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysDeptListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysDeptList(SysDept filter, String orderBy) { + return sysDeptMapper.getSysDeptList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getSysDeptList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysDeptListWithRelation(SysDept filter, String orderBy) { + List resultList = sysDeptMapper.getSysDeptList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 判断指定对象是否包含下级对象。 + * + * @param deptId 主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildren(Long deptId) { + SysDept filter = new SysDept(); + filter.setParentId(deptId); + return getCountByFilter(filter) > 0; + } + + /** + * 判断指定部门Id是否包含用户对象。 + * + * @param deptId 部门主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildrenUser(Long deptId) { + SysUser sysUser = new SysUser(); + sysUser.setDeptId(deptId); + return sysUserService.getCountByFilter(sysUser) > 0; + } + + /** + * 批量添加多对多关联关系。 + * + * @param sysDeptPostList 多对多关联表对象集合。 + * @param deptId 主表Id。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void addSysDeptPostList(List sysDeptPostList, Long deptId) { + for (SysDeptPost sysDeptPost : sysDeptPostList) { + sysDeptPost.setDeptPostId(idGenerator.nextLongId()); + sysDeptPost.setDeptId(deptId); + sysDeptPostMapper.insert(sysDeptPost); + } + } + + /** + * 更新中间表数据。 + * + * @param sysDeptPost 中间表对象。 + * @return 更新成功与否。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean updateSysDeptPost(SysDeptPost sysDeptPost) { + SysDeptPost filter = new SysDeptPost(); + filter.setDeptPostId(sysDeptPost.getDeptPostId()); + filter.setDeptId(sysDeptPost.getDeptId()); + filter.setPostId(sysDeptPost.getPostId()); + UpdateWrapper uw = + BaseService.createUpdateQueryForNullValue(sysDeptPost, SysDeptPost.class); + uw.setEntity(filter); + return sysDeptPostMapper.update(sysDeptPost, uw) > 0; + } + + /** + * 移除单条多对多关系。 + * + * @param deptId 主表Id。 + * @param postId 从表Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean removeSysDeptPost(Long deptId, Long postId) { + SysDeptPost filter = new SysDeptPost(); + filter.setDeptId(deptId); + filter.setPostId(postId); + return sysDeptPostMapper.delete(new QueryWrapper<>(filter)) > 0; + } + + /** + * 获取中间表数据。 + * + * @param deptId 主表Id。 + * @param postId 从表Id。 + * @return 中间表对象。 + */ + @Override + public SysDeptPost getSysDeptPost(Long deptId, Long postId) { + SysDeptPost filter = new SysDeptPost(); + filter.setDeptId(deptId); + filter.setPostId(postId); + return sysDeptPostMapper.selectOne(new QueryWrapper<>(filter)); + } + + @Override + public SysDeptPost getSysDeptPost(Long deptPostId) { + return sysDeptPostMapper.selectById(deptPostId); + } + + @Override + public List> getSysDeptPostListWithRelationByDeptId(Long deptId) { + return sysDeptPostMapper.getSysDeptPostListWithRelationByDeptId(deptId); + } + + @Override + public List getLeaderDeptPostIdList(Long deptId) { + List resultList = sysDeptPostMapper.getLeaderDeptPostList(deptId); + return resultList.stream().map(SysDeptPost::getDeptPostId).collect(Collectors.toList()); + } + + @Override + public List getUpLeaderDeptPostIdList(Long deptId) { + SysDept sysDept = this.getById(deptId); + if (sysDept.getParentId() == null) { + return new LinkedList<>(); + } + return this.getLeaderDeptPostIdList(sysDept.getParentId()); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysMenuServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysMenuServiceImpl.java new file mode 100644 index 00000000..84282819 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,335 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.webadmin.upms.dao.SysMenuMapper; +import com.flow.demo.webadmin.upms.dao.SysMenuPermCodeMapper; +import com.flow.demo.webadmin.upms.dao.SysRoleMenuMapper; +import com.flow.demo.webadmin.upms.model.SysMenu; +import com.flow.demo.webadmin.upms.model.SysMenuPermCode; +import com.flow.demo.webadmin.upms.model.SysRoleMenu; +import com.flow.demo.webadmin.upms.model.constant.SysMenuType; +import com.flow.demo.webadmin.upms.model.constant.SysOnlineMenuPermType; +import com.flow.demo.webadmin.upms.service.SysMenuService; +import com.flow.demo.webadmin.upms.service.SysPermCodeService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 菜单数据服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysMenuService") +public class SysMenuServiceImpl extends BaseService implements SysMenuService { + + @Autowired + private SysMenuMapper sysMenuMapper; + @Autowired + private SysRoleMenuMapper sysRoleMenuMapper; + @Autowired + private SysMenuPermCodeMapper sysMenuPermCodeMapper; + @Autowired + private SysPermCodeService sysPermCodeService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysMenuMapper; + } + + /** + * 保存新增的菜单对象。 + * + * @param sysMenu 新增的菜单对象。 + * @param permCodeIdSet 权限字Id列表。 + * @return 新增后的菜单对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysMenu saveNew(SysMenu sysMenu, Set permCodeIdSet) { + sysMenu.setMenuId(idGenerator.nextLongId()); + MyModelUtil.fillCommonsForInsert(sysMenu); + sysMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL); + sysMenuMapper.insert(sysMenu); + if (permCodeIdSet != null) { + for (Long permCodeId : permCodeIdSet) { + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setMenuId(sysMenu.getMenuId()); + menuPermCode.setPermCodeId(permCodeId); + sysMenuPermCodeMapper.insert(menuPermCode); + } + } + // 判断当前菜单是否为指向在线表单的菜单,并将根据约定,动态插入两个子菜单。 + if (sysMenu.getOnlineFormId() != null && sysMenu.getOnlineFlowEntryId() == null) { + SysMenu viewSubMenu = new SysMenu(); + viewSubMenu.setMenuId(idGenerator.nextLongId()); + viewSubMenu.setParentId(sysMenu.getMenuId()); + viewSubMenu.setMenuType(SysMenuType.TYPE_BUTTON); + viewSubMenu.setMenuName("查看"); + viewSubMenu.setShowOrder(0); + viewSubMenu.setOnlineFormId(sysMenu.getOnlineFormId()); + viewSubMenu.setOnlineMenuPermType(SysOnlineMenuPermType.TYPE_VIEW); + viewSubMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(viewSubMenu); + sysMenuMapper.insert(viewSubMenu); + SysMenu editSubMenu = new SysMenu(); + editSubMenu.setMenuId(idGenerator.nextLongId()); + editSubMenu.setParentId(sysMenu.getMenuId()); + editSubMenu.setMenuType(SysMenuType.TYPE_BUTTON); + editSubMenu.setMenuName("编辑"); + editSubMenu.setShowOrder(1); + editSubMenu.setOnlineFormId(sysMenu.getOnlineFormId()); + editSubMenu.setOnlineMenuPermType(SysOnlineMenuPermType.TYPE_EDIT); + editSubMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(editSubMenu); + sysMenuMapper.insert(editSubMenu); + } + return sysMenu; + } + + /** + * 更新菜单对象。 + * + * @param sysMenu 更新的菜单对象。 + * @param originalSysMenu 原有的菜单对象。 + * @param permCodeIdSet 权限字Id列表。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set permCodeIdSet) { + MyModelUtil.fillCommonsForUpdate(sysMenu, originalSysMenu); + sysMenu.setMenuType(originalSysMenu.getMenuType()); + UpdateWrapper uw = this.createUpdateQueryForNullValue(sysMenu, sysMenu.getMenuId()); + if (sysMenuMapper.update(sysMenu, uw) != 1) { + return false; + } + SysMenuPermCode deletedMenuPermCode = new SysMenuPermCode(); + deletedMenuPermCode.setMenuId(sysMenu.getMenuId()); + sysMenuPermCodeMapper.delete(new QueryWrapper<>(deletedMenuPermCode)); + if (permCodeIdSet != null) { + for (Long permCodeId : permCodeIdSet) { + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setMenuId(sysMenu.getMenuId()); + menuPermCode.setPermCodeId(permCodeId); + sysMenuPermCodeMapper.insert(menuPermCode); + } + } + // 如果当前菜单的在线表单Id变化了,就需要同步更新他的内置子菜单也同步更新。 + if (ObjectUtil.notEqual(originalSysMenu.getOnlineFormId(), sysMenu.getOnlineFormId())) { + SysMenu onlineSubMenu = new SysMenu(); + onlineSubMenu.setOnlineFormId(sysMenu.getOnlineFormId()); + sysMenuMapper.update(onlineSubMenu, + new QueryWrapper().lambda().eq(SysMenu::getParentId, sysMenu.getMenuId())); + } + return true; + } + + /** + * 删除指定的菜单。 + * + * @param menu 菜单对象。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(SysMenu menu) { + Long menuId = menu.getMenuId(); + if (sysMenuMapper.deleteById(menuId) != 1) { + return false; + } + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setMenuId(menuId); + sysRoleMenuMapper.delete(new QueryWrapper<>(roleMenu)); + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setMenuId(menuId); + sysMenuPermCodeMapper.delete(new QueryWrapper<>(menuPermCode)); + // 如果为指向在线表单的菜单,则连同删除子菜单 + if (menu.getOnlineFormId() != null) { + sysMenuMapper.delete(new QueryWrapper().lambda().eq(SysMenu::getParentId, menuId)); + } + return true; + } + + /** + * 获取全部菜单列表。 + * + * @return 全部菜单列表。 + */ + @Override + public Collection getAllMenuList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByAsc(this.safeMapToColumnName("showOrder")); + queryWrapper.in(this.safeMapToColumnName("menuType"), + Arrays.asList(SysMenuType.TYPE_MENU, SysMenuType.TYPE_DIRECTORY)); + return sysMenuMapper.selectList(queryWrapper); + } + + /** + * 获取指定用户Id的菜单列表,已去重。 + * + * @param userId 用户主键Id。 + * @return 用户关联的菜单列表。 + */ + @Override + public Collection getMenuListByUserId(Long userId) { + List menuList = sysMenuMapper.getMenuListByUserId(userId); + LinkedHashMap menuMap = new LinkedHashMap<>(); + for (SysMenu menu : menuList) { + menuMap.put(menu.getMenuId(), menu); + } + return menuMap.values(); + } + + /** + * 判断当前菜单是否存在子菜单。 + * + * @param menuId 菜单主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildren(Long menuId) { + SysMenu menu = new SysMenu(); + menu.setParentId(menuId); + return this.getCountByFilter(menu) > 0; + } + + /** + * 验证菜单对象关联的数据是否都合法。 + * + * @param sysMenu 当前操作的对象。 + * @param originalSysMenu 原有对象。 + * @param permCodeIdListString 逗号分隔的权限Id列表。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString) { + // menu、ui fragment和button类型的menu不能没有parentId + if (sysMenu.getParentId() == null) { + if (sysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) { + return CallResult.error("数据验证失败,当前类型菜单项的上级菜单不能为空!"); + } + } + if (this.needToVerify(sysMenu, originalSysMenu, SysMenu::getParentId)) { + String errorMessage = checkErrorOfNonDirectoryMenu(sysMenu); + if (errorMessage != null) { + return CallResult.error(errorMessage); + } + } + JSONObject jsonObject = null; + if (StringUtils.isNotBlank(permCodeIdListString)) { + Set permCodeIdSet = Arrays.stream( + permCodeIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysPermCodeService.existAllPrimaryKeys(permCodeIdSet)) { + return CallResult.error("数据验证失败,存在不合法的权限字,请刷新后重试!"); + } + jsonObject = new JSONObject(); + jsonObject.put("permCodeIdSet", permCodeIdSet); + } + return CallResult.ok(jsonObject); + } + + /** + * 查询菜单的权限资源地址列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param url 权限资源地址过滤条件。 + * @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermListWithDetail(Long menuId, String url) { + return sysMenuMapper.getSysPermListWithDetail(menuId, url); + } + + /** + * 查询菜单的用户列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param loginName 登录名。 + * @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysUserListWithDetail(Long menuId, String loginName) { + return sysMenuMapper.getSysUserListWithDetail(menuId, loginName); + } + + /** + * 获取指定类型的所有在线表单的菜单。 + * + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + @Override + public List getAllOnlineMenuList(Integer menuType) { + LambdaQueryWrapper queryWrapper = + new QueryWrapper().lambda().isNotNull(SysMenu::getOnlineFormId); + if (menuType != null) { + queryWrapper.eq(SysMenu::getMenuType, menuType); + } + return sysMenuMapper.selectList(queryWrapper); + } + + /** + * 获取当前用户有权访问的在线表单菜单,仅返回类型为BUTTON的菜单。 + * + * @param userId 指定的用户。 + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + @Override + public List getOnlineMenuListByUserId(Long userId, Integer menuType) { + return sysMenuMapper.getOnlineMenuListByUserId(userId, menuType); + } + + private String checkErrorOfNonDirectoryMenu(SysMenu sysMenu) { + // 判断父节点是否存在 + SysMenu parentSysMenu = getById(sysMenu.getParentId()); + if (parentSysMenu == null) { + return "数据验证失败,关联的上级菜单并不存在,请刷新后重试!"; + } + // 逐个判断每种类型的菜单,他的父菜单的合法性,先从目录类型和菜单类型开始 + if (sysMenu.getMenuType() == SysMenuType.TYPE_DIRECTORY + || sysMenu.getMenuType() == SysMenuType.TYPE_MENU) { + // 他们的上级只能是目录 + if (parentSysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) { + return "数据验证失败,当前类型菜单项的上级菜单只能是目录类型!"; + } + } else if (sysMenu.getMenuType() == SysMenuType.TYPE_UI_FRAGMENT) { + // ui fragment的上级只能是menu类型 + if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU) { + return "数据验证失败,当前类型菜单项的上级菜单只能是菜单类型和按钮类型!"; + } + } else if (sysMenu.getMenuType() == SysMenuType.TYPE_BUTTON) { + // button的上级只能是menu和ui fragment + if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU + && parentSysMenu.getMenuType() != SysMenuType.TYPE_UI_FRAGMENT) { + return "数据验证失败,当前类型菜单项的上级菜单只能是菜单类型和UI片段类型!"; + } + } + return null; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermCodeServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermCodeServiceImpl.java new file mode 100644 index 00000000..1de30fe3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermCodeServiceImpl.java @@ -0,0 +1,226 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.webadmin.upms.dao.SysMenuPermCodeMapper; +import com.flow.demo.webadmin.upms.dao.SysPermCodeMapper; +import com.flow.demo.webadmin.upms.dao.SysPermCodePermMapper; +import com.flow.demo.webadmin.upms.model.SysMenuPermCode; +import com.flow.demo.webadmin.upms.model.SysPermCode; +import com.flow.demo.webadmin.upms.model.SysPermCodePerm; +import com.flow.demo.webadmin.upms.service.SysPermCodeService; +import com.flow.demo.webadmin.upms.service.SysPermService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 权限字数据服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysPermCodeService") +public class SysPermCodeServiceImpl extends BaseService implements SysPermCodeService { + + @Autowired + private SysPermCodeMapper sysPermCodeMapper; + @Autowired + private SysPermCodePermMapper sysPermCodePermMapper; + @Autowired + private SysMenuPermCodeMapper sysMenuPermCodeMapper; + @Autowired + private SysPermService sysPermService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysPermCodeMapper; + } + + /** + * 获取指定用户的权限字列表,已去重。 + * + * @param userId 用户主键Id。 + * @return 用户关联的权限字列表。 + */ + @Override + public Collection getPermCodeListByUserId(Long userId) { + List permCodeList = sysPermCodeMapper.getPermCodeListByUserId(userId); + return new HashSet<>(permCodeList); + } + + /** + * 获取所有权限字数据列表,已去重。 + * + * @return 全部权限字列表。 + */ + @Override + public Collection getAllPermCodeList() { + List permCodeList = this.getAllList(); + return permCodeList.stream().map(SysPermCode::getPermCode).collect(Collectors.toSet()); + } + + /** + * 保存新增的权限字对象。 + * + * @param sysPermCode 新增的权限字对象。 + * @param permIdSet 权限资源Id列表。 + * @return 新增后的权限字对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysPermCode saveNew(SysPermCode sysPermCode, Set permIdSet) { + sysPermCode.setPermCodeId(idGenerator.nextLongId()); + MyModelUtil.fillCommonsForInsert(sysPermCode); + sysPermCode.setDeletedFlag(GlobalDeletedFlag.NORMAL); + sysPermCodeMapper.insert(sysPermCode); + if (permIdSet != null) { + for (Long permId : permIdSet) { + SysPermCodePerm permCodePerm = new SysPermCodePerm(); + permCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); + permCodePerm.setPermId(permId); + sysPermCodePermMapper.insert(permCodePerm); + } + } + return sysPermCode; + } + + /** + * 更新权限字对象。 + * + * @param sysPermCode 更新的权限字对象。 + * @param originalSysPermCode 原有的权限字对象。 + * @param permIdSet 权限资源Id列表。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set permIdSet) { + MyModelUtil.fillCommonsForUpdate(sysPermCode, originalSysPermCode); + sysPermCode.setParentId(originalSysPermCode.getParentId()); + UpdateWrapper uw = + this.createUpdateQueryForNullValue(sysPermCode, sysPermCode.getPermCodeId()); + if (sysPermCodeMapper.update(sysPermCode, uw) != 1) { + return false; + } + SysPermCodePerm deletedPermCodePerm = new SysPermCodePerm(); + deletedPermCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); + sysPermCodePermMapper.delete(new QueryWrapper<>(deletedPermCodePerm)); + if (permIdSet != null) { + for (Long permId : permIdSet) { + SysPermCodePerm permCodePerm = new SysPermCodePerm(); + permCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); + permCodePerm.setPermId(permId); + sysPermCodePermMapper.insert(permCodePerm); + } + } + return true; + } + + /** + * 删除指定的权限字。 + * + * @param permCodeId 权限字主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long permCodeId) { + if (sysPermCodeMapper.deleteById(permCodeId) != 1) { + return false; + } + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setPermCodeId(permCodeId); + sysMenuPermCodeMapper.delete(new QueryWrapper<>(menuPermCode)); + SysPermCodePerm permCodePerm = new SysPermCodePerm(); + permCodePerm.setPermCodeId(permCodeId); + sysPermCodePermMapper.delete(new QueryWrapper<>(permCodePerm)); + return true; + } + + /** + * 判断当前权限字是否存在下级权限字对象。 + * + * @param permCodeId 权限字主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildren(Long permCodeId) { + SysPermCode permCode = new SysPermCode(); + permCode.setParentId(permCodeId); + return this.getCountByFilter(permCode) > 0; + } + + /** + * 验证权限字对象关联的数据是否都合法。 + * + * @param sysPermCode 当前操作的对象。 + * @param originalSysPermCode 原有对象。 + * @param permIdListString 逗号分隔的权限资源Id列表。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData( + SysPermCode sysPermCode, SysPermCode originalSysPermCode, String permIdListString) { + if (this.needToVerify(sysPermCode, originalSysPermCode, SysPermCode::getParentId)) { + if (getById(sysPermCode.getParentId()) == null) { + return CallResult.error("数据验证失败,关联的上级权限字并不存在,请刷新后重试!"); + } + } + JSONObject jsonObject = null; + if (StringUtils.isNotBlank(permIdListString)) { + Set permIdSet = Arrays.stream( + permIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysPermService.existAllPrimaryKeys(permIdSet)) { + return CallResult.error("数据验证失败,存在不合法的权限资源,请刷新后重试!"); + } + jsonObject = new JSONObject(); + jsonObject.put("permIdSet", permIdSet); + } + return CallResult.ok(jsonObject); + } + + /** + * 查询权限字的用户列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param loginName 登录名。 + * @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysUserListWithDetail(Long permCodeId, String loginName) { + return sysPermCodeMapper.getSysUserListWithDetail(permCodeId, loginName); + } + + /** + * 查询权限字的角色列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param roleName 角色名。 + * @return 包含从权限字到角色的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysRoleListWithDetail(Long permCodeId, String roleName) { + return sysPermCodeMapper.getSysRoleListWithDetail(permCodeId, roleName); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermModuleServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermModuleServiceImpl.java new file mode 100644 index 00000000..20f5dc6f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermModuleServiceImpl.java @@ -0,0 +1,124 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.webadmin.upms.dao.SysPermModuleMapper; +import com.flow.demo.webadmin.upms.model.SysPerm; +import com.flow.demo.webadmin.upms.model.SysPermModule; +import com.flow.demo.webadmin.upms.service.SysPermModuleService; +import com.flow.demo.webadmin.upms.service.SysPermService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 权限资源模块数据服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysPermModuleService") +public class SysPermModuleServiceImpl extends BaseService implements SysPermModuleService { + + @Autowired + private SysPermModuleMapper sysPermModuleMapper; + @Autowired + private SysPermService sysPermService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysPermModuleMapper; + } + + /** + * 保存新增的权限资源模块对象。 + * + * @param sysPermModule 新增的权限资源模块对象。 + * @return 新增后的权限资源模块对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysPermModule saveNew(SysPermModule sysPermModule) { + sysPermModule.setModuleId(idGenerator.nextLongId()); + MyModelUtil.fillCommonsForInsert(sysPermModule); + sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL); + sysPermModuleMapper.insert(sysPermModule); + return sysPermModule; + } + + /** + * 更新权限资源模块对象。 + * + * @param sysPermModule 更新的权限资源模块对象。 + * @param originalSysPermModule 原有的权限资源模块对象。 + * @return 更新成功返回true,否则false + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule) { + MyModelUtil.fillCommonsForUpdate(sysPermModule, originalSysPermModule); + return sysPermModuleMapper.updateById(sysPermModule) != 0; + } + + /** + * 删除指定的权限资源模块。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long moduleId) { + return sysPermModuleMapper.deleteById(moduleId) == 1; + } + + /** + * 获取权限模块资源及其关联的权限资源列表。 + * + * @return 权限资源模块及其关联的权限资源列表。 + */ + @Override + public List getPermModuleAndPermList() { + return sysPermModuleMapper.getPermModuleAndPermList(); + } + + /** + * 判断是否存在下级权限资源模块。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildren(Long moduleId) { + SysPermModule permModule = new SysPermModule(); + permModule.setParentId(moduleId); + return this.getCountByFilter(permModule) > 0; + } + + /** + * 判断是否存在权限数据。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasModulePerms(Long moduleId) { + SysPerm filter = new SysPerm(); + filter.setModuleId(moduleId); + return sysPermService.getCountByFilter(filter) > 0; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermServiceImpl.java new file mode 100644 index 00000000..b8719b9e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermServiceImpl.java @@ -0,0 +1,243 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import cn.hutool.core.util.ObjectUtil; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.RedisKeyUtil; +import com.flow.demo.webadmin.config.ApplicationConfig; +import com.flow.demo.webadmin.upms.service.*; +import com.flow.demo.webadmin.upms.dao.SysPermCodePermMapper; +import com.flow.demo.webadmin.upms.dao.SysPermMapper; +import com.flow.demo.webadmin.upms.model.SysPerm; +import com.flow.demo.webadmin.upms.model.SysPermCodePerm; +import com.flow.demo.webadmin.upms.model.SysPermModule; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RSet; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 权限资源数据服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysPermService") +public class SysPermServiceImpl extends BaseService implements SysPermService { + + @Autowired + private SysPermMapper sysPermMapper; + @Autowired + private SysPermCodePermMapper sysPermCodePermMapper; + @Autowired + private SysPermModuleService sysPermModuleService; + @Autowired + private SysUserService sysUserService; + @Autowired + private IdGeneratorWrapper idGenerator; + @Autowired + private RedissonClient redissonClient; + @Autowired + private ApplicationConfig applicationConfig; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysPermMapper; + } + + /** + * 保存新增的权限资源对象。 + * + * @param perm 新增的权限资源对象。 + * @return 新增后的权限资源对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysPerm saveNew(SysPerm perm) { + perm.setPermId(idGenerator.nextLongId()); + MyModelUtil.fillCommonsForInsert(perm); + perm.setDeletedFlag(GlobalDeletedFlag.NORMAL); + sysPermMapper.insert(perm); + return perm; + } + + /** + * 更新权限资源对象。 + * + * @param perm 更新的权限资源对象。 + * @param originalPerm 原有的权限资源对象。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysPerm perm, SysPerm originalPerm) { + MyModelUtil.fillCommonsForUpdate(perm, originalPerm); + return sysPermMapper.updateById(perm) != 0; + } + + /** + * 删除权限资源。 + * + * @param permId 权限资源主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long permId) { + if (sysPermMapper.deleteById(permId) != 1) { + return false; + } + SysPermCodePerm permCodePerm = new SysPermCodePerm(); + permCodePerm.setPermId(permId); + sysPermCodePermMapper.delete(new QueryWrapper<>(permCodePerm)); + return true; + } + + /** + * 获取权限数据列表。 + * + * @param sysPermFilter 过滤对象。 + * @return 权限列表。 + */ + @Override + public List getPermListWithRelation(SysPerm sysPermFilter) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByAsc(this.safeMapToColumnName("showOrder")); + queryWrapper.eq(ObjectUtil.isNotNull(sysPermFilter.getModuleId()), + this.safeMapToColumnName("moduleId"), sysPermFilter.getModuleId()); + queryWrapper.like(ObjectUtil.isNotNull(sysPermFilter.getUrl()), + this.safeMapToColumnName("url"), "%" + sysPermFilter.getUrl() + "%"); + List permList = sysPermMapper.selectList(queryWrapper); + // 这里因为权限只有字典数据,所以仅仅做字典关联。 + this.buildRelationForDataList(permList, MyRelationParam.dictOnly()); + return permList; + } + + /** + * 将指定用户的指定会话的权限集合存入缓存。 + * + * @param sessionId 会话Id。 + * @param userId 用户主键Id。 + * @return 查询并缓存后的权限集合。 + */ + @Override + public Collection putUserSysPermCache(String sessionId, Long userId) { + Collection permList = this.getPermListByUserId(userId); + if (CollectionUtils.isEmpty(permList)) { + return permList; + } + String sessionPermKey = RedisKeyUtil.makeSessionPermIdKey(sessionId); + RSet redisPermSet = redissonClient.getSet(sessionPermKey); + redisPermSet.addAll(permList.stream().map(Object::toString).collect(Collectors.toSet())); + redisPermSet.expire(applicationConfig.getSessionExpiredSeconds(), TimeUnit.SECONDS); + return permList; + } + + /** + * 把在线表单的权限URL集合,存放到权限URL的缓存中。 + * + * @param sessionId 会话Id。 + * @param permUrlSet URL集合。 + */ + @Override + public void putOnlinePermToCache(String sessionId, Set permUrlSet) { + String sessionPermKey = RedisKeyUtil.makeSessionPermIdKey(sessionId); + redissonClient.getSet(sessionPermKey).addAll(permUrlSet); + } + + /** + * 将指定会话的权限集合从缓存中移除。 + * + * @param sessionId 会话Id。 + */ + @Override + public void removeUserSysPermCache(String sessionId) { + String sessionPermKey = RedisKeyUtil.makeSessionPermIdKey(sessionId); + redissonClient.getSet(sessionPermKey).deleteAsync(); + } + + /** + * 获取与指定用户关联的权限资源列表,已去重。 + * + * @param userId 关联的用户主键Id。 + * @return 与指定用户Id关联的权限资源列表。 + */ + @Override + public Collection getPermListByUserId(Long userId) { + List urlList = sysPermMapper.getPermListByUserId(userId); + return new HashSet<>(urlList); + } + + /** + * 验证权限资源对象关联的数据是否都合法。 + * + * @param sysPerm 当前操作的对象。 + * @param originalSysPerm 原有对象。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm) { + if (this.needToVerify(sysPerm, originalSysPerm, SysPerm::getModuleId)) { + SysPermModule permModule = sysPermModuleService.getById(sysPerm.getModuleId()); + if (permModule == null) { + return CallResult.error("数据验证失败,关联的权限模块Id并不存在,请刷新后重试!"); + } + } + return CallResult.ok(); + } + + /** + * 查询权限资源地址的用户列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param loginName 登录名。 + * @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysUserListWithDetail(Long permId, String loginName) { + return sysPermMapper.getSysUserListWithDetail(permId, loginName); + } + + /** + * 查询权限资源地址的角色列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param roleName 角色名。 + * @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysRoleListWithDetail(Long permId, String roleName) { + return sysPermMapper.getSysRoleListWithDetail(permId, roleName); + } + + /** + * 查询权限资源地址的菜单列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param menuName 菜单名。 + * @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysMenuListWithDetail(Long permId, String menuName) { + return sysPermMapper.getSysMenuListWithDetail(permId, menuName); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermWhitelistServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermWhitelistServiceImpl.java new file mode 100644 index 00000000..f9058e73 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPermWhitelistServiceImpl.java @@ -0,0 +1,52 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.webadmin.upms.dao.SysPermWhitelistMapper; +import com.flow.demo.webadmin.upms.model.SysPermWhitelist; +import com.flow.demo.webadmin.upms.service.SysPermWhitelistService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 权限资源白名单数据服务类。 + * 白名单中的权限资源,可以不受权限控制,任何用户皆可访问,一般用于常用的字典数据列表接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysPermWhitelistService") +public class SysPermWhitelistServiceImpl extends BaseService implements SysPermWhitelistService { + + @Autowired + private SysPermWhitelistMapper sysPermWhitelistMapper; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysPermWhitelistMapper; + } + + /** + * 获取白名单权限资源的列表。 + * + * @return 白名单权限资源地址列表。 + */ + @Override + public List getWhitelistPermList() { + List dataList = this.getAllList(); + Function getterFunc = SysPermWhitelist::getPermUrl; + return dataList.stream() + .filter(x -> getterFunc.apply(x) != null).map(getterFunc).collect(Collectors.toList()); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPostServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPostServiceImpl.java new file mode 100644 index 00000000..5f7b23c0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysPostServiceImpl.java @@ -0,0 +1,188 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.github.pagehelper.Page; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.webadmin.upms.dao.SysDeptPostMapper; +import com.flow.demo.webadmin.upms.dao.SysPostMapper; +import com.flow.demo.webadmin.upms.dao.SysUserPostMapper; +import com.flow.demo.webadmin.upms.model.SysDeptPost; +import com.flow.demo.webadmin.upms.model.SysPost; +import com.flow.demo.webadmin.upms.model.SysUserPost; +import com.flow.demo.webadmin.upms.service.SysPostService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Set; + +/** + * 岗位管理数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysPostService") +public class SysPostServiceImpl extends BaseService implements SysPostService { + + @Autowired + private SysPostMapper sysPostMapper; + @Autowired + private SysUserPostMapper sysUserPostMapper; + @Autowired + private SysDeptPostMapper sysDeptPostMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysPostMapper; + } + + /** + * 保存新增对象。 + * + * @param sysPost 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysPost saveNew(SysPost sysPost) { + sysPost.setPostId(idGenerator.nextLongId()); + sysPost.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(sysPost); + MyModelUtil.setDefaultValue(sysPost, "leaderPost", false); + sysPostMapper.insert(sysPost); + return sysPost; + } + + /** + * 更新数据对象。 + * + * @param sysPost 更新的对象。 + * @param originalSysPost 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysPost sysPost, SysPost originalSysPost) { + MyModelUtil.fillCommonsForUpdate(sysPost, originalSysPost); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(sysPost, sysPost.getPostId()); + return sysPostMapper.update(sysPost, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param postId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long postId) { + if (sysPostMapper.deleteById(postId) != 1) { + return false; + } + // 开始删除多对多父表的关联 + SysUserPost sysUserPost = new SysUserPost(); + sysUserPost.setPostId(postId); + sysUserPostMapper.delete(new QueryWrapper<>(sysUserPost)); + SysDeptPost sysDeptPost = new SysDeptPost(); + sysDeptPost.setPostId(postId); + sysDeptPostMapper.delete(new QueryWrapper<>(sysDeptPost)); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysPostListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysPostList(SysPost filter, String orderBy) { + return sysPostMapper.getSysPostList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getSysPostList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysPostListWithRelation(SysPost filter, String orderBy) { + List resultList = sysPostMapper.getSysPostList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param deptId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getNotInSysPostListByDeptId(Long deptId, SysPost filter, String orderBy) { + List resultList = sysPostMapper.getNotInSysPostListByDeptId(deptId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + /** + * 获取指定部门的岗位列表。 + * + * @param deptId 部门Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysPostListByDeptId(Long deptId, SysPost filter, String orderBy) { + List resultList = sysPostMapper.getSysPostListByDeptId(deptId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + @Override + public List getSysUserPostListByUserId(Long userId) { + SysUserPost filter = new SysUserPost(); + filter.setUserId(userId); + return sysUserPostMapper.selectList(new QueryWrapper<>(filter)); + } + + @Override + public boolean existAllPrimaryKeys(Set deptPostIdSet, Long deptId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysDeptPost::getDeptId, deptId); + queryWrapper.in(SysDeptPost::getDeptPostId, deptPostIdSet); + return sysDeptPostMapper.selectCount(queryWrapper) == deptPostIdSet.size(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysRoleServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysRoleServiceImpl.java new file mode 100644 index 00000000..1d01de6e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,221 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.webadmin.upms.dao.SysRoleMapper; +import com.flow.demo.webadmin.upms.dao.SysRoleMenuMapper; +import com.flow.demo.webadmin.upms.dao.SysUserRoleMapper; +import com.flow.demo.webadmin.upms.model.SysRole; +import com.flow.demo.webadmin.upms.model.SysRoleMenu; +import com.flow.demo.webadmin.upms.model.SysUserRole; +import com.flow.demo.webadmin.upms.service.SysMenuService; +import com.flow.demo.webadmin.upms.service.SysRoleService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 角色数据服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysRoleService") +public class SysRoleServiceImpl extends BaseService implements SysRoleService { + + @Autowired + private SysRoleMapper sysRoleMapper; + @Autowired + private SysRoleMenuMapper sysRoleMenuMapper; + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private SysMenuService sysMenuService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysRoleMapper; + } + + /** + * 保存新增的角色对象。 + * + * @param role 新增的角色对象。 + * @param menuIdSet 菜单Id列表。 + * @return 新增后的角色对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysRole saveNew(SysRole role, Set menuIdSet) { + role.setRoleId(idGenerator.nextLongId()); + MyModelUtil.fillCommonsForInsert(role); + role.setDeletedFlag(GlobalDeletedFlag.NORMAL); + sysRoleMapper.insert(role); + if (menuIdSet != null) { + for (Long menuId : menuIdSet) { + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(role.getRoleId()); + roleMenu.setMenuId(menuId); + sysRoleMenuMapper.insert(roleMenu); + } + } + return role; + } + + /** + * 更新角色对象。 + * + * @param role 更新的角色对象。 + * @param originalRole 原有的角色对象。 + * @param menuIdSet 菜单Id列表。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysRole role, SysRole originalRole, Set menuIdSet) { + MyModelUtil.fillCommonsForUpdate(role, originalRole); + if (sysRoleMapper.updateById(role) != 1) { + return false; + } + SysRoleMenu deletedRoleMenu = new SysRoleMenu(); + deletedRoleMenu.setRoleId(role.getRoleId()); + sysRoleMenuMapper.delete(new QueryWrapper<>(deletedRoleMenu)); + if (menuIdSet != null) { + for (Long menuId : menuIdSet) { + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(role.getRoleId()); + roleMenu.setMenuId(menuId); + sysRoleMenuMapper.insert(roleMenu); + } + } + return true; + } + + /** + * 删除指定角色。 + * + * @param roleId 角色主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long roleId) { + if (sysRoleMapper.deleteById(roleId) != 1) { + return false; + } + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(roleId); + sysRoleMenuMapper.delete(new QueryWrapper<>(roleMenu)); + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(roleId); + sysUserRoleMapper.delete(new QueryWrapper<>(userRole)); + return true; + } + + /** + * 获取角色列表。 + * + * @param filter 角色过滤对象。 + * @param orderBy 排序参数。 + * @return 角色列表。 + */ + @Override + public List getSysRoleList(SysRole filter, String orderBy) { + return sysRoleMapper.getSysRoleList(filter, orderBy); + } + + /** + * 批量新增用户角色关联。 + * + * @param userRoleList 用户角色关系数据列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void addUserRoleList(List userRoleList) { + for (SysUserRole userRole : userRoleList) { + sysUserRoleMapper.insert(userRole); + } + } + + /** + * 移除指定用户和指定角色的关联关系。 + * + * @param roleId 角色主键Id。 + * @param userId 用户主键Id。 + * @return 移除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean removeUserRole(Long roleId, Long userId) { + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(roleId); + userRole.setUserId(userId); + return sysUserRoleMapper.delete(new QueryWrapper<>(userRole)) == 1; + } + + /** + * 验证角色对象关联的数据是否都合法。 + * + * @param sysRole 当前操作的对象。 + * @param originalSysRole 原有对象。 + * @param menuIdListString 逗号分隔的menuId列表。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString) { + JSONObject jsonObject = null; + if (StringUtils.isNotBlank(menuIdListString)) { + Set menuIdSet = Arrays.stream( + menuIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysMenuService.existAllPrimaryKeys(menuIdSet)) { + return CallResult.error("数据验证失败,存在不合法的菜单权限,请刷新后重试!"); + } + jsonObject = new JSONObject(); + jsonObject.put("menuIdSet", menuIdSet); + } + return CallResult.ok(jsonObject); + } + + /** + * 查询角色的权限资源地址列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param url url过滤条件。 + * @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermListWithDetail(Long roleId, String url) { + return sysRoleMapper.getSysPermListWithDetail(roleId, url); + } + + /** + * 查询角色的权限字列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从角色到权限字的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermCodeListWithDetail(Long roleId, String permCode) { + return sysRoleMapper.getSysPermCodeListWithDetail(roleId, permCode); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysUserServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysUserServiceImpl.java new file mode 100644 index 00000000..a0c56cce --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/service/impl/SysUserServiceImpl.java @@ -0,0 +1,395 @@ +package com.flow.demo.webadmin.upms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.webadmin.upms.service.*; +import com.flow.demo.webadmin.upms.dao.*; +import com.flow.demo.webadmin.upms.model.*; +import com.flow.demo.webadmin.upms.model.constant.SysUserStatus; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 用户管理数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("sysUserService") +public class SysUserServiceImpl extends BaseService implements SysUserService { + + @Autowired + private SysUserMapper sysUserMapper; + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private SysUserPostMapper sysUserPostMapper; + @Autowired + private SysDataPermUserMapper sysDataPermUserMapper; + @Autowired + private SysDeptService sysDeptService; + @Autowired + private SysRoleService sysRoleService; + @Autowired + private SysDataPermService sysDataPermService; + @Autowired + private SysPostService sysPostService; + @Autowired + private IdGeneratorWrapper idGenerator; + @Autowired + private PasswordEncoder passwordEncoder; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysUserMapper; + } + + /** + * 获取指定登录名的用户对象。 + * + * @param loginName 指定登录用户名。 + * @return 用户对象。 + */ + @Override + public SysUser getSysUserByLoginName(String loginName) { + SysUser filter = new SysUser(); + filter.setLoginName(loginName); + return sysUserMapper.selectOne(new QueryWrapper<>(filter)); + } + + /** + * 保存新增的用户对象。 + * + * @param user 新增的用户对象。 + * @param roleIdSet 用户角色Id集合。 + * @param deptPostIdSet 部门岗位Id集合。 + * @param dataPermIdSet 数据权限Id集合。 + * @return 新增后的用户对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysUser saveNew(SysUser user, Set roleIdSet, Set deptPostIdSet, Set dataPermIdSet) { + user.setUserId(idGenerator.nextLongId()); + user.setPassword(passwordEncoder.encode(user.getPassword())); + user.setUserStatus(SysUserStatus.STATUS_NORMAL); + user.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(user); + sysUserMapper.insert(user); + if (CollectionUtils.isNotEmpty(deptPostIdSet)) { + for (Long deptPostId : deptPostIdSet) { + SysDeptPost deptPost = sysDeptService.getSysDeptPost(deptPostId); + SysUserPost userPost = new SysUserPost(); + userPost.setUserId(user.getUserId()); + userPost.setDeptPostId(deptPostId); + userPost.setPostId(deptPost.getPostId()); + sysUserPostMapper.insert(userPost); + } + } + if (CollectionUtils.isNotEmpty(roleIdSet)) { + for (Long roleId : roleIdSet) { + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(user.getUserId()); + userRole.setRoleId(roleId); + sysUserRoleMapper.insert(userRole); + } + } + if (CollectionUtils.isNotEmpty(dataPermIdSet)) { + for (Long dataPermId : dataPermIdSet) { + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + dataPermUser.setUserId(user.getUserId()); + sysDataPermUserMapper.insert(dataPermUser); + } + } + return user; + } + + /** + * 更新用户对象。 + * + * @param user 更新的用户对象。 + * @param originalUser 原有的用户对象。 + * @param roleIdSet 用户角色Id列表。 + * @param deptPostIdSet 部门岗位Id集合。 + * @param dataPermIdSet 数据权限Id集合。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysUser user, SysUser originalUser, Set roleIdSet, Set deptPostIdSet, Set dataPermIdSet) { + user.setLoginName(originalUser.getLoginName()); + user.setPassword(originalUser.getPassword()); + MyModelUtil.fillCommonsForUpdate(user, originalUser); + UpdateWrapper uw = this.createUpdateQueryForNullValue(user, user.getUserId()); + if (sysUserMapper.update(user, uw) != 1) { + return false; + } + // 先删除原有的User-Post关联关系,再重新插入新的关联关系 + SysUserPost deletedUserPost = new SysUserPost(); + deletedUserPost.setUserId(user.getUserId()); + sysUserPostMapper.delete(new QueryWrapper<>(deletedUserPost)); + if (CollectionUtils.isNotEmpty(deptPostIdSet)) { + for (Long deptPostId : deptPostIdSet) { + SysDeptPost deptPost = sysDeptService.getSysDeptPost(deptPostId); + SysUserPost userPost = new SysUserPost(); + userPost.setUserId(user.getUserId()); + userPost.setDeptPostId(deptPostId); + userPost.setPostId(deptPost.getPostId()); + sysUserPostMapper.insert(userPost); + } + } + // 先删除原有的User-Role关联关系,再重新插入新的关联关系 + SysUserRole deletedUserRole = new SysUserRole(); + deletedUserRole.setUserId(user.getUserId()); + sysUserRoleMapper.delete(new QueryWrapper<>(deletedUserRole)); + if (CollectionUtils.isNotEmpty(roleIdSet)) { + for (Long roleId : roleIdSet) { + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(user.getUserId()); + userRole.setRoleId(roleId); + sysUserRoleMapper.insert(userRole); + } + } + // 先删除原有的DataPerm-User关联关系,在重新插入新的关联关系 + SysDataPermUser deletedDataPermUser = new SysDataPermUser(); + deletedDataPermUser.setUserId(user.getUserId()); + sysDataPermUserMapper.delete(new QueryWrapper<>(deletedDataPermUser)); + if (CollectionUtils.isNotEmpty(dataPermIdSet)) { + for (Long dataPermId : dataPermIdSet) { + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + dataPermUser.setUserId(user.getUserId()); + sysDataPermUserMapper.insert(dataPermUser); + } + } + return true; + } + + /** + * 修改用户密码。 + * @param userId 用户主键Id。 + * @param newPass 新密码。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean changePassword(Long userId, String newPass) { + SysUser updatedUser = new SysUser(); + updatedUser.setUserId(userId); + updatedUser.setPassword(passwordEncoder.encode(newPass)); + return sysUserMapper.updateById(updatedUser) == 1; + } + + /** + * 删除指定数据。 + * + * @param userId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long userId) { + if (sysUserMapper.deleteById(userId) == 0) { + return false; + } + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(userId); + sysUserRoleMapper.delete(new QueryWrapper<>(userRole)); + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setUserId(userId); + sysDataPermUserMapper.delete(new QueryWrapper<>(dataPermUser)); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysUserList(SysUser filter, String orderBy) { + return sysUserMapper.getSysUserList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getSysUserList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysUserListWithRelation(SysUser filter, String orderBy) { + List resultList = sysUserMapper.getSysUserList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + @Override + public List getSysUserListByRoleId(Long roleId, SysUser filter, String orderBy) { + return sysUserMapper.getSysUserListByRoleId(roleId, filter, orderBy); + } + + /** + * 获取不属于指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + @Override + public List getNotInSysUserListByRoleId(Long roleId, SysUser filter, String orderBy) { + return sysUserMapper.getNotInSysUserListByRoleId(roleId, filter, orderBy); + } + + /** + * 获取指定数据权限的用户列表。 + * + * @param dataPermId 数据权限主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + @Override + public List getSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) { + return sysUserMapper.getSysUserListByDataPermId(dataPermId, filter, orderBy); + } + + /** + * 获取不属于指定数据权限的用户列表。 + * + * @param dataPermId 数据权限主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + @Override + public List getNotInSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) { + return sysUserMapper.getNotInSysUserListByDataPermId(dataPermId, filter, orderBy); + } + + /** + * 查询用户的权限资源地址列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param url url过滤条件。 + * @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermListWithDetail(Long userId, String url) { + return sysUserMapper.getSysPermListWithDetail(userId, url); + } + + /** + * 查询用户的权限字列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从用户到权限字的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermCodeListWithDetail(Long userId, String permCode) { + return sysUserMapper.getSysPermCodeListWithDetail(userId, permCode); + } + + /** + * 查询用户的菜单列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param menuName 菜单名称过滤条件。 + * @return 包含从用户到菜单的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysMenuListWithDetail(Long userId, String menuName) { + return sysUserMapper.getSysMenuListWithDetail(userId, menuName); + } + + /** + * 验证用户对象关联的数据是否都合法。 + * + * @param sysUser 当前操作的对象。 + * @param originalSysUser 原有对象。 + * @param roleIds 逗号分隔的角色Id列表字符串。 + * @param deptPostIds 逗号分隔的部门岗位Id列表字符串。 + * @param dataPermIds 逗号分隔的数据权限Id列表字符串。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData( + SysUser sysUser, SysUser originalSysUser, String roleIds, String deptPostIds, String dataPermIds) { + JSONObject jsonObject = new JSONObject(); + if (StringUtils.isBlank(deptPostIds)) { + return CallResult.error("数据验证失败,用户的部门岗位数据不能为空!"); + } + Set deptPostIdSet = + Arrays.stream(deptPostIds.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysPostService.existAllPrimaryKeys(deptPostIdSet, sysUser.getDeptId())) { + return CallResult.error("数据验证失败,存在不合法的用户岗位,请刷新后重试!"); + } + jsonObject.put("deptPostIdSet", deptPostIdSet); + if (StringUtils.isBlank(roleIds)) { + return CallResult.error("数据验证失败,用户的角色数据不能为空!"); + } + Set roleIdSet = Arrays.stream( + roleIds.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysRoleService.existAllPrimaryKeys(roleIdSet)) { + return CallResult.error("数据验证失败,存在不合法的用户角色,请刷新后重试!"); + } + jsonObject.put("roleIdSet", roleIdSet); + if (StringUtils.isBlank(dataPermIds)) { + return CallResult.error("数据验证失败,用户的数据权限不能为空!"); + } + Set dataPermIdSet = Arrays.stream( + dataPermIds.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysDataPermService.existAllPrimaryKeys(dataPermIdSet)) { + return CallResult.error("数据验证失败,存在不合法的数据权限,请刷新后重试!"); + } + jsonObject.put("dataPermIdSet", dataPermIdSet); + //这里是基于字典的验证。 + if (this.needToVerify(sysUser, originalSysUser, SysUser::getDeptId) + && !sysDeptService.existId(sysUser.getDeptId())) { + return CallResult.error("数据验证失败,关联的用户部门Id并不存在,请刷新后重试!"); + } + return CallResult.ok(jsonObject); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDataPermDeptVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDataPermDeptVo.java new file mode 100644 index 00000000..92a85f63 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDataPermDeptVo.java @@ -0,0 +1,23 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +/** + * 数据权限与部门关联VO。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysDataPermDeptVo { + + /** + * 数据权限Id。 + */ + private Long dataPermId; + + /** + * 关联部门Id。 + */ + private Long deptId; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDataPermVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDataPermVo.java new file mode 100644 index 00000000..9c353b33 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDataPermVo.java @@ -0,0 +1,60 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +import java.util.*; + +/** + * 数据权限VO。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysDataPermVo { + + /** + * 数据权限Id。 + */ + private Long dataPermId; + + /** + * 显示名称。 + */ + private String dataPermName; + + /** + * 数据权限规则类型(0: 全部可见 1: 只看自己 2: 只看本部门 3: 本部门及子部门 4: 多部门及子部门 5: 自定义部门列表)。 + */ + private Integer ruleType; + + /** + * 部门Id列表(逗号分隔)。 + */ + private String deptIdListString; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 数据权限与部门关联对象列表。 + */ + private List> dataPermDeptList; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDeptPostVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDeptPostVo.java new file mode 100644 index 00000000..8bc7cb90 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDeptPostVo.java @@ -0,0 +1,33 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +/** + * 部门岗位VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysDeptPostVo { + + /** + * 部门岗位Id。 + */ + private Long deptPostId; + + /** + * 部门Id。 + */ + private Long deptId; + + /** + * 岗位Id。 + */ + private Long postId; + + /** + * 部门岗位显示名称。 + */ + private String postShowName; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDeptVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDeptVo.java new file mode 100644 index 00000000..aaef4ed9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysDeptVo.java @@ -0,0 +1,55 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * SysDeptVO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysDeptVo { + + /** + * 部门Id。 + */ + private Long deptId; + + /** + * 部门名称。 + */ + private String deptName; + + /** + * 显示顺序。 + */ + private Integer showOrder; + + /** + * 父部门Id。 + */ + private Long parentId; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 更新时间。 + */ + private Date updateTime; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysMenuVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysMenuVo.java new file mode 100644 index 00000000..2d6afe24 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysMenuVo.java @@ -0,0 +1,90 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +import java.util.*; + +/** + * 菜单VO。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysMenuVo { + + /** + * 菜单Id。 + */ + private Long menuId; + + /** + * 父菜单Id,目录菜单的父菜单为null + */ + private Long parentId; + + /** + * 菜单显示名称。 + */ + private String menuName; + + /** + * 菜单类型 (0: 目录 1: 菜单 2: 按钮 3: UI片段)。 + */ + private Integer menuType; + + /** + * 前端表单路由名称,仅用于menu_type为1的菜单类型。 + */ + private String formRouterName; + + /** + * 在线表单主键Id,仅用于在线表单绑定的菜单。 + */ + private Long onlineFormId; + + /** + * 在线表单菜单的权限控制类型,具体值可参考SysOnlineMenuPermType常量对象。 + */ + private Integer onlineMenuPermType; + + /** + * 仅用于在线表单的流程Id。 + */ + private Long onlineFlowEntryId; + + /** + * 菜单显示顺序 (值越小,排序越靠前)。 + */ + private Integer showOrder; + + /** + * 菜单图标。 + */ + private String icon; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 菜单与权限字关联对象列表。 + */ + private List> sysMenuPermCodeList; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPermCodeVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPermCodeVo.java new file mode 100644 index 00000000..fe409c2a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPermCodeVo.java @@ -0,0 +1,70 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +import java.util.*; + +/** + * 权限字VO。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysPermCodeVo { + + /** + * 权限字Id。 + */ + private Long permCodeId; + + /** + * 权限字标识(一般为有含义的英文字符串)。 + */ + private String permCode; + + /** + * 上级权限字Id。 + */ + private Long parentId; + + /** + * 权限字类型(0: 表单 1: UI片段 2: 操作)。 + */ + private Integer permCodeType; + + /** + * 显示名称。 + */ + private String showName; + + /** + * 显示顺序(数值越小,越靠前)。 + */ + private Integer showOrder; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 权限字与权限资源关联对象列表。 + */ + private List> sysPermCodePermList; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPermModuleVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPermModuleVo.java new file mode 100644 index 00000000..7b025bda --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPermModuleVo.java @@ -0,0 +1,65 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +import java.util.*; + +/** + * 权限资源模块VO。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysPermModuleVo { + + /** + * 权限模块Id。 + */ + private Long moduleId; + + /** + * 权限模块名称。 + */ + private String moduleName; + + /** + * 上级权限模块Id。 + */ + private Long parentId; + + /** + * 权限模块类型(0: 普通模块 1: Controller模块)。 + */ + private Integer moduleType; + + /** + * 权限模块在当前层级下的顺序,由小到大。 + */ + private Integer showOrder; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 权限资源对象列表。 + */ + private List sysPermList; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPermVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPermVo.java new file mode 100644 index 00000000..b2177f22 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPermVo.java @@ -0,0 +1,70 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +import java.util.*; + +/** + * 权限资源VO。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysPermVo { + + /** + * 权限资源Id。 + */ + private Long permId; + + /** + * 权限资源名称。 + */ + private String permName; + + /** + * shiro格式的权限字,如(upms:sysUser:add)。 + */ + private String permCode; + + /** + * 权限所在的权限模块Id。 + */ + private Long moduleId; + + /** + * 关联的URL。 + */ + private String url; + + /** + * 权限在当前模块下的顺序,由小到大。 + */ + private Integer showOrder; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 模块Id的字典关联数据。 + */ + private Map moduleIdDictMap; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPostVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPostVo.java new file mode 100644 index 00000000..5bd47260 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysPostVo.java @@ -0,0 +1,61 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * 岗位VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysPostVo { + + /** + * 岗位Id。 + */ + private Long postId; + + /** + * 岗位名称。 + */ + private String postName; + + /** + * 岗位层级,数值越小级别越高。 + */ + private Integer level; + + /** + * 是否领导岗位。 + */ + private Boolean leaderPost; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * postId 的多对多关联表数据对象,数据对应类型为SysDeptPostVo。 + */ + private Map sysDeptPost; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysRoleVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysRoleVo.java new file mode 100644 index 00000000..15ead111 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysRoleVo.java @@ -0,0 +1,50 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +import java.util.*; + +/** + * 角色VO。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysRoleVo { + + /** + * 角色Id。 + */ + private Long roleId; + + /** + * 角色名称。 + */ + private String roleName; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 角色与菜单关联对象列表。 + */ + private List> sysRoleMenuList; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysUserVo.java b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysUserVo.java new file mode 100644 index 00000000..34e7df51 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/java/com/flow/demo/webadmin/upms/vo/SysUserVo.java @@ -0,0 +1,102 @@ +package com.flow.demo.webadmin.upms.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.Map; +import java.util.List; + +/** + * SysUserVO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SysUserVo { + + /** + * 用户Id。 + */ + private Long userId; + + /** + * 登录用户名。 + */ + private String loginName; + + /** + * 用户显示名称。 + */ + private String showName; + + /** + * 用户部门Id。 + */ + private Long deptId; + + /** + * 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。 + */ + private Integer userType; + + /** + * 用户头像的Url。 + */ + private String headImageUrl; + + /** + * 用户状态(0: 正常 1: 锁定)。 + */ + private Integer userStatus; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 多对多用户岗位数据集合。 + */ + private List> sysUserPostList; + + /** + * 多对多用户角色数据集合。 + */ + private List> sysUserRoleList; + + /** + * 多对多用户数据权限数据集合。 + */ + private List> sysDataPermUserList; + + /** + * deptId 字典关联数据。 + */ + private Map deptIdDictMap; + + /** + * userType 常量字典关联数据。 + */ + private Map userTypeDictMap; + + /** + * userStatus 常量字典关联数据。 + */ + private Map userStatusDictMap; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/resources/application.yml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/resources/application.yml new file mode 100644 index 00000000..8dc8213c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/resources/application.yml @@ -0,0 +1,279 @@ +logging: + level: + # 这里设置的日志级别优先于log4j2.xml文件Loggers中的日志级别。 + com.flow.demo: info + +server: + port: 8082 + tomcat: + uri-encoding: UTF-8 + threads: + max: 100 + min-spare: 10 + servlet: + encoding: + force: true + charset: UTF-8 + enabled: true + +# spring相关配置 +spring: + application: + name: application-webadmin + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 50MB + mvc: + converters: + preferred-json-mapper: fastjson + freemarker: + template-loader-path: classpath:/template/ + cache: false + charset: UTF-8 + check-template-location: true + content-type: text/html + expose-request-attributes: false + expose-session-attributes: false + request-context-attribute: request + suffix: .ftl + +flowable: + async-executor-activate: false + database-schema-update: false + +mybatis-plus: + mapper-locations: classpath:com/flow/demo/webadmin/*/dao/mapper/*Mapper.xml,com/flow/demo/common/log/dao/mapper/*Mapper.xml,com/flow/demo/common/online/dao/mapper/*Mapper.xml,com/flow/demo/common/flow/dao/mapper/*Mapper.xml + type-aliases-package: com.flow.demo.webadmin.*.model,com.flow.demo.common.log.model,com.flow.demo.common.online.model,com.flow.demo.common.flow.model + global-config: + db-config: + logic-delete-value: -1 + logic-not-delete-value: 1 + +# 自动分页的配置 +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: false + params: count=countSql + +# 存储session数据的Redis,所有服务均需要,因此放到公共配置中。 +# 根据实际情况,该Redis也可以用于存储其他数据。 +redis: + # redisson的配置。每个服务可以自己的配置文件中覆盖此选项。 + redisson: + # 如果该值为false,系统将不会创建RedissionClient的bean。 + enabled: true + # mode的可用值为,single/cluster/sentinel/master-slave + mode: single + # single: 单机模式 + # address: redis://localhost:6379 + # cluster: 集群模式 + # 每个节点逗号分隔,同时每个节点前必须以redis://开头。 + # address: redis://localhost:6379,redis://localhost:6378,... + # sentinel: + # 每个节点逗号分隔,同时每个节点前必须以redis://开头。 + # address: redis://localhost:6379,redis://localhost:6378,... + # master-slave: + # 每个节点逗号分隔,第一个为主节点,其余为从节点。同时每个节点前必须以redis://开头。 + # address: redis://localhost:6379,redis://localhost:6378,... + address: redis://localhost:6379 + # 链接超时,单位毫秒。 + timeout: 6000 + # 单位毫秒。分布式锁的超时检测时长。 + # 如果一次锁内操作超该毫秒数,或在释放锁之前异常退出,Redis会在该时长之后主动删除该锁使用的key。 + lockWatchdogTimeout: 60000 + # redis 密码,空可以不填。 + password: + pool: + # 连接池数量。 + poolSize: 20 + # 连接池中最小空闲数量。 + minIdle: 5 + +common-online: + # 注意不要以反斜杠(/)结尾。 + operationUrlPrefix: /admin/online + # 在线表单业务数据上传资源路径 + uploadFileBaseDir: ./zz-resource/upload-files/online + # 如果为false,OnlineOperationController中的接口将不能使用。 + operationEnabled: true + +common-online-api: + # 注意不要以反斜杠(/)结尾。 + urlPrefix: /admin/online + # 下面的url列表,请保持反斜杠(/)结尾。 + viewUrlList: + - ${common-online.operationUrlPrefix}/onlineOperation/viewByDatasourceId/ + - ${common-online.operationUrlPrefix}/onlineOperation/viewByOneToManyRelationId/ + - ${common-online.operationUrlPrefix}/onlineOperation/listByDatasourceId/ + - ${common-online.operationUrlPrefix}/onlineOperation/listByOneToManyRelationId/ + - ${common-online.operationUrlPrefix}/onlineOperation/downloadDatasource/ + - ${common-online.operationUrlPrefix}/onlineOperation/downloadOneToManyRelation/ + editUrlList: + - ${common-online.operationUrlPrefix}/onlineOperation/addDatasource/ + - ${common-online.operationUrlPrefix}/onlineOperation/addOneToManyRelation/ + - ${common-online.operationUrlPrefix}/onlineOperation/updateDatasource/ + - ${common-online.operationUrlPrefix}/onlineOperation/updateOneToManyRelation/ + - ${common-online.operationUrlPrefix}/onlineOperation/deleteDatasource/ + - ${common-online.operationUrlPrefix}/onlineOperation/deleteOneToManyRelation/ + - ${common-online.operationUrlPrefix}/onlineOperation/uploadDatasource/ + - ${common-online.operationUrlPrefix}/onlineOperation/uploadOneToManyRelation/ + +common-flow: + # 请慎重修改urlPrefix的缺省配置,注意不要以反斜杠(/)结尾。如必须修改其他路径,请同步修改数据库脚本。 + urlPrefix: /admin/flow + +datafilter: + tenant: + # 对于单体服务,该值始终为false。 + enabled: false + dataperm: + enabled: true + # 在拼接数据权限过滤的SQL时,我们会用到sys_dept_relation表,该表的前缀由此配置项指定。 + # 如果没有前缀,请使用 "" 。 + deptRelationTablePrefix: zz_ + +# 暴露监控端点 +management: + endpoints: + web: + exposure: + include: '*' + jmx: + exposure: + include: '*' + endpoint: + # 与中间件相关的健康详情也会被展示 + health: + show-details: always + configprops: + # 在/actuator/configprops中,所有包含password的配置,将用 * 隐藏。 + # 如果不想隐藏任何配置项的值,可以直接使用如下被注释的空值。 + # keys-to-sanitize: + keys-to-sanitize: password + server: + servlet: + context-path: "/" + +# 开发数据库相关配置 +--- +spring: + profiles: dev + datasource: + type: com.alibaba.druid.pool.DruidDataSource + druid: + main: + url: jdbc:mysql://localhost:3306/zzdemo-online?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + name: application-webadmin + initialSize: 10 + minIdle: 10 + maxActive: 50 + maxWait: 60000 + timeBetweenEvictionRunsMillis: 60000 + minEvictableIdleTimeMillis: 300000 + poolPreparedStatements: true + maxPoolPreparedStatementPerConnectionSize: 20 + maxOpenPreparedStatements: 20 + validationQuery: SELECT 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 + filters: stat,wall + useGlobalDataSourceStat: true + web-stat-filter: + enabled: true + url-pattern: /* + exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/actuator/*" + stat-view-servlet: + enabled: true + urlPattern: /druid/* + resetEnable: true + +application: + # Jwt令牌加密的签名值。该值的长度要超过10个字符(过短会报错)。 + tokenSigningKey: DemoFlow-signing-key + # Jwt令牌在Http Header中的键名称。 + tokenHeaderKey: Authorization + # Jwt令牌刷新后在Http Header中的键名称。 + refreshedTokenHeaderKey: RefreshedToken + # Jwt令牌过期时间(毫秒)。 + expiration: 72000000 + # 初始化密码。 + defaultUserPassword: 123456 + # 缺省的文件上传根目录。 + uploadFileBaseDir: ./zz-resource/upload-files/app + # 跨域的IP(http://192.168.10.10:8086)白名单列表,多个IP之间逗号分隔(* 表示全部信任,空白表示禁用跨域信任)。 + credentialIpList: "*" + # Session的用户和数据权限在Redis中的过期时间(秒)。 + sessionExpiredSeconds: 86400 + +sequence: + # Snowflake 分布式Id生成算法所需的WorkNode参数值。 + snowflakeWorkNode: 1 + +# 发布数据库相关配置 +--- +spring: + profiles: product + datasource: + type: com.alibaba.druid.pool.DruidDataSource + druid: + main: + url: jdbc:mysql://localhost:3306/zzdemo-online?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + name: application-webadmin + initialSize: 10 + minIdle: 10 + maxActive: 50 + maxWait: 60000 + timeBetweenEvictionRunsMillis: 60000 + minEvictableIdleTimeMillis: 300000 + poolPreparedStatements: true + maxPoolPreparedStatementPerConnectionSize: 20 + maxOpenPreparedStatements: 20 + validationQuery: SELECT 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 + filters: stat,wall + useGlobalDataSourceStat: true + web-stat-filter: + enabled: true + url-pattern: /* + exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/actuator/*" + stat-view-servlet: + enabled: true + urlPattern: /druid/* + resetEnable: true + +application: + # Jwt令牌加密的签名值。该值的长度要超过10个字符(过短会报错)。 + tokenSigningKey: DemoFlow-signing-key + # Jwt令牌在Http Header中的键名称。 + tokenHeaderKey: Authorization + # Jwt令牌刷新后在Http Header中的键名称。 + refreshedTokenHeaderKey: RefreshedToken + # Jwt令牌过期时间(毫秒)。 + expiration: 72000000 + # 初始化密码。 + defaultUserPassword: 123456 + # 缺省的文件上传根目录。 + uploadFileBaseDir: ./zz-resource/upload-files/app + # 跨域的IP(http://192.168.10.10:8086)白名单列表,多个IP之间逗号分隔(* 表示全部信任,空白表示禁用跨域信任)。 + credentialIpList: "*" + # Session的用户和数据权限在Redis中的过期时间(秒)。 + sessionExpiredSeconds: 86400 + +sequence: + # Snowflake 分布式Id生成算法所需的WorkNode参数值。 + snowflakeWorkNode: 1 \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/resources/log4j2.xml b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/resources/log4j2.xml new file mode 100644 index 00000000..e62fa5f5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/resources/log4j2.xml @@ -0,0 +1,86 @@ + + + + + + + + + + ./zzlogs/application-webadmin + + ./zzlogs/application-webadmin/backup + + info + + + + + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> %msg%n + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] T:[%X{traceId}] S:[%X{sessionId}] U:[%X{userId}] [%t] ==> %msg%n + + + 31 + + 20M + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/resources/template/views/print_error.ftl b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/resources/template/views/print_error.ftl new file mode 100644 index 00000000..af8b36a7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/application-webadmin/src/main/resources/template/views/print_error.ftl @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
天津公安警官职业学院2017—2018学年度第一学期课程表
班 级星期一星期二星期三星期四星期五
第1节第2节第3节第1节第2节第3节第1节第2节第3节第1节第2节第3节第1节第2节
16 级 刑 事 技 术 班 课程刑法自习刑事图像民 法(选修)派出所工作刑事图像法医学派出所工作法医学国内安全保卫体能自习刑事技术总论刑法
自习自习自习
教师曾岚陈磊邵刚杨丽伟陈磊于辉杨丽伟于辉朱学强张付海王 伟(刑技)曾岚
   
教室206206206206206206206206206操场206206
   
16 级 刑 事 侦 查 课程自习侦查措施经济案件侦查公安信息化公安信息化刑法体能自习痕迹检验刑法国内安全保卫经济案件侦查痕迹检验民 法(选修)
侦查措施
教师徐宏涛张静赵晓松赵晓松王骏强张付海郭海川王骏强朱学强张静郭海川邵刚
徐宏涛
教室2022023号机房3号机房202操场202202202202202202
16 级 治 安 管 理 班 课程刑事技术体能刑事技术治安秩序管理刑事侦查概论刑法群众工作与纠纷调解群众工作与纠纷调解公共关系(选修)刑事侦查概论刑法自习自习自习
q
教师郭海川 韩易浦张付海郭海川 韩易浦翟政亮邵妍薛强刘晓鹏刘晓鹏尚欣邵妍薛强
翟政亮
教室218操场218218218218218218218218218
16 网 络 安 全 监 察 1 班课程应用写作数据库系统应用周二中午:计算机安全管理及实用技术刑事诉讼法周一中午:数据库系统应用民法体育VB语言程序设计选修VB语言程序设计刑事诉讼法选修应用写作犯罪心理
民法犯罪心理
教师关利杨斌赵晓松王伟杨斌李静程军赵伟赵伟王伟关利张学林
李静张学林
教室东阶梯2号机房主楼2011012号机房101操场3号机房3号机房101东阶梯主楼201
主楼201
注:1、课程一栏中有两科次的,上面的课程单周上课,下面的课程双周上课。2、每天上课时间:上午第1节8:30至9:55;第2节10:15至11:40;中午上课时间12:30至13:55;下午第3节14:00至15:25。
+ + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/pom.xml new file mode 100644 index 00000000..eeb54b02 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/pom.xml @@ -0,0 +1,109 @@ + + + + com.flow.demo + common + 1.0.0 + + 4.0.0 + + common-core + 1.0.0 + common-core + jar + + + + + com.google.guava + guava + + + org.apache.commons + commons-lang3 + + + commons-codec + commons-codec + + + commons-io + commons-io + + + commons-fileupload + commons-fileupload + + + org.apache.httpcomponents + httpclient + + + joda-time + joda-time + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + org.apache.commons + commons-csv + ${common-csv.version} + + + cn.hutool + hutool-all + ${hutool.version} + + + io.jsonwebtoken + jjwt + ${jjwt.version} + + + com.alibaba + fastjson + ${fastjson.version} + + + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} + + + cn.jimmyshi + bean-query + ${bean.query.version} + + + + org.apache.poi + poi-ooxml + ${poi-ooxml.version} + + + + mysql + mysql-connector-java + runtime + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + com.baomidou + mybatis-plus-boot-starter + ${mybatisplus.version} + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.version} + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/advice/MyControllerAdvice.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/advice/MyControllerAdvice.java new file mode 100644 index 00000000..5ee612f2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/advice/MyControllerAdvice.java @@ -0,0 +1,30 @@ +package com.flow.demo.common.core.advice; + +import org.springframework.beans.propertyeditors.CustomDateEditor; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.InitBinder; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Controller的环绕拦截类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@ControllerAdvice +public class MyControllerAdvice { + + /** + * 转换前端传入的日期变量参数为指定格式。 + * + * @param binder 数据绑定参数。 + */ + @InitBinder + public void initBinder(WebDataBinder binder) { + binder.registerCustomEditor(Date.class, + new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), false)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/advice/MyExceptionHandler.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/advice/MyExceptionHandler.java new file mode 100644 index 00000000..426b87f4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/advice/MyExceptionHandler.java @@ -0,0 +1,141 @@ +package com.flow.demo.common.core.advice; + +import com.flow.demo.common.core.exception.*; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.ResponseResult; +import com.flow.demo.common.core.util.ContextUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.exceptions.PersistenceException; +import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.dao.PermissionDeniedDataAccessException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.concurrent.TimeoutException; + +/** + * 业务层的异常处理类,这里只是给出最通用的Exception的捕捉,今后可以根据业务需要, + * 用不同的函数,处理不同类型的异常。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestControllerAdvice("com.flow.demo") +public class MyExceptionHandler { + + /** + * 通用异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = Exception.class) + public ResponseResult exceptionHandle(Exception ex, HttpServletRequest request) { + log.error("Unhandled exception from URL [" + request.getRequestURI() + "]", ex); + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + return ResponseResult.error(ErrorCodeEnum.UNHANDLED_EXCEPTION, ex.getMessage()); + } + + /** + * 无效的实体对象异常。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = InvalidDataModelException.class) + public ResponseResult invalidDataModelExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("InvalidDataModelException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.INVALID_DATA_MODEL); + } + + /** + * 无效的实体对象字段异常。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = InvalidDataFieldException.class) + public ResponseResult invalidDataFieldExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("InvalidDataFieldException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.INVALID_DATA_FIELD); + } + + /** + * 无效类字段异常。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = InvalidClassFieldException.class) + public ResponseResult invalidClassFieldExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("InvalidClassFieldException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.INVALID_CLASS_FIELD); + } + + /** + * 重复键异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = DuplicateKeyException.class) + public ResponseResult duplicateKeyExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("DuplicateKeyException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.DUPLICATED_UNIQUE_KEY); + } + + /** + * 数据访问失败异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = DataAccessException.class) + public ResponseResult dataAccessExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("DataAccessException exception from URL [" + request.getRequestURI() + "]", ex); + if (ex.getCause() instanceof PersistenceException + && ex.getCause().getCause() instanceof PermissionDeniedDataAccessException) { + return ResponseResult.error(ErrorCodeEnum.DATA_PERM_ACCESS_FAILED); + } + return ResponseResult.error(ErrorCodeEnum.DATA_ACCESS_FAILED); + } + + /** + * 操作不存在或已逻辑删除数据的异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = NoDataAffectException.class) + public ResponseResult noDataEffectExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("NoDataAffectException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + + /** + * Redis缓存访问异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = RedisCacheAccessException.class) + public ResponseResult redisCacheAccessExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("RedisCacheAccessException exception from URL [" + request.getRequestURI() + "]", ex); + if (ex.getCause() instanceof TimeoutException) { + return ResponseResult.error(ErrorCodeEnum.REDIS_CACHE_ACCESS_TIMEOUT); + } + return ResponseResult.error(ErrorCodeEnum.REDIS_CACHE_ACCESS_STATE_ERROR); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/DeptFilterColumn.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/DeptFilterColumn.java new file mode 100644 index 00000000..a9293921 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/DeptFilterColumn.java @@ -0,0 +1,16 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记数据权限中基于DeptId进行过滤的字段。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DeptFilterColumn { + +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/DisableDataFilter.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/DisableDataFilter.java new file mode 100644 index 00000000..fd8916ec --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/DisableDataFilter.java @@ -0,0 +1,17 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 作为DisableDataFilterAspect的切点。 + * 该注解仅能标记在方法上,方法内所有的查询语句,均不会被Mybatis拦截器过滤数据。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DisableDataFilter { + +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/DisableTenantFilter.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/DisableTenantFilter.java new file mode 100644 index 00000000..6b5e6058 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/DisableTenantFilter.java @@ -0,0 +1,28 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 仅用于微服务的多租户项目。 + * 用于注解DAO层Mapper对象的租户过滤规则。被包含的方法将不会进行租户Id的过滤。 + * 对于tk mapper和mybatis plus中的内置方法,可以直接指定方法名即可,如:selectOne。 + * 需要说明的是,在大多数场景下,只要在实体对象中指定了租户Id字段,基于该主表的绝大部分增删改操作, + * 都需要经过租户Id过滤,仅当查询非常复杂,或者主表不在SQL语句之中的时候,可以通过该注解禁用该SQL, + * 并根据需求通过手动的方式实现租户过滤。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DisableTenantFilter { + + /** + * 包含的方法名称数组。该值不能为空,因为如想取消所有方法的租户过滤, + * 可以通过在实体对象中不指定租户Id字段注解的方式实现。 + * + * @return 被包括的方法名称数组。 + */ + String[] includeMethodName(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/EnableDataPerm.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/EnableDataPerm.java new file mode 100644 index 00000000..7de7a959 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/EnableDataPerm.java @@ -0,0 +1,27 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 用于注解DAO层Mapper对象的数据权限规则。 + * 由于框架使用了tk.mapper,所以并非所有的Mapper接口均在当前Mapper对象中定义,有一部分被tk.mapper封装,如selectAll等。 + * 如果需要排除tk.mapper中的方法,可以直接使用tk.mapper基类所声明的方法名称即可。 + * 另外,比较特殊的场景是,因为tk.mapper是通用框架,所以同样的selectAll方法,可以获取不同的数据集合,因此在service中如果 + * 出现两个不同的方法调用Mapper的selectAll方法,但是一个需要参与过滤,另外一个不需要参与,那么就需要修改当前类的Mapper方法, + * 将其中一个方法重新定义一个具体的接口方法,并重新设定其是否参与数据过滤。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EnableDataPerm { + + /** + * 排除的方法名称数组。如果为空,所有的方法均会被Mybaits拦截注入权限过滤条件。 + * + * @return 被排序的方法名称数据。 + */ + String[] excluseMethodName() default {}; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/JobUpdateTimeColumn.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/JobUpdateTimeColumn.java new file mode 100644 index 00000000..c9a77cde --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/JobUpdateTimeColumn.java @@ -0,0 +1,16 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记更新字段。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface JobUpdateTimeColumn { + +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/MyDataSource.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/MyDataSource.java new file mode 100644 index 00000000..9ba15833 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/MyDataSource.java @@ -0,0 +1,21 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记Service所依赖的数据源类型。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface MyDataSource { + + /** + * 标注的数据源类型 + * @return 当前标注的数据源类型。 + */ + int value(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/MyDataSourceResolver.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/MyDataSourceResolver.java new file mode 100644 index 00000000..1bbdc853 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/MyDataSourceResolver.java @@ -0,0 +1,29 @@ +package com.flow.demo.common.core.annotation; + +import com.flow.demo.common.core.util.DataSourceResolver; + +import java.lang.annotation.*; + +/** + * 基于自定义解析规则的多数据源注解。主要用于标注Service的实现类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface MyDataSourceResolver { + + /** + * 多数据源路由键解析接口的Class。 + * @return 多数据源路由键解析接口的Class。 + */ + Class resolver(); + + /** + * DataSourceResolver.resovle方法的入参。 + * @return DataSourceResolver.resovle方法的入参。 + */ + String arg() default ""; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/MyRequestBody.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/MyRequestBody.java new file mode 100644 index 00000000..ec4e7186 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/MyRequestBody.java @@ -0,0 +1,31 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 标记Controller中的方法参数,参数解析器会根据该注解将请求中的JSON数据,映射到参数中的绑定字段。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface MyRequestBody { + + /** + * 是否必须出现的参数。 + */ + boolean required() default false; + /** + * 解析时用到的JSON的key。 + */ + String value() default ""; + /** + * 集合元素的ClassType。只有在接口参数为List的时候,需要把E的class传入。 + * 缺省值Class.class表示没有设置。 + */ + Class elementType() default Class.class; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/NoAuthInterface.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/NoAuthInterface.java new file mode 100644 index 00000000..9ae83b4f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/NoAuthInterface.java @@ -0,0 +1,15 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记无需Token验证的接口 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface NoAuthInterface { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationConstDict.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationConstDict.java new file mode 100644 index 00000000..c15ffd50 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationConstDict.java @@ -0,0 +1,29 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 标识Model和常量字典之间的关联关系。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationConstDict { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联的常量字典的Class对象。 + * + * @return 关联的常量字典的Class对象。 + */ + Class constantDictClass(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationDict.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationDict.java new file mode 100644 index 00000000..f479a48f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationDict.java @@ -0,0 +1,70 @@ +package com.flow.demo.common.core.annotation; + +import com.flow.demo.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 标识Model之间的字典关联关系。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationDict { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 被关联Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 被关联Model对象的关联Name字段名称。 + * + * @return 被关联Model对象的关联Name字段名称。 + */ + String slaveNameField(); + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; + + /** + * 在同一个实体对象中,如果有一对一关联和字典关联,都是基于相同的主表字段,并关联到 + * 相同关联表的同一关联字段时,可以在字典关联的注解中引用被一对一注解标准的对象属性。 + * 从而在数据整合时,当前字典的数据可以直接取自"equalOneToOneRelationField"指定 + * 的字段,从而避免一次没必要的数据库查询操作,提升了加载显示的效率。 + * + * @return 与该字典字段引用关系完全相同的一对一关联属性名称。 + */ + String equalOneToOneRelationField() default ""; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationManyToMany.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationManyToMany.java new file mode 100644 index 00000000..c799f736 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationManyToMany.java @@ -0,0 +1,38 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 标注多对多的Model关系。 + * 重要提示:由于多对多关联表数据,很多时候都不需要跟随主表数据返回,所以该注解不会在 + * 生成的时候自动添加到实体类字段上,需要的时候,用户可自行手动添加。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationManyToMany { + + /** + * 多对多中间表的Mapper对象名称。 + * + * @return 被关联的本地Service对象名称。 + */ + String relationMapperName(); + + /** + * 多对多关联表Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class relationModelClass(); + + /** + * 多对多关联表Model对象中与主表关联的Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String relationMasterIdField(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationManyToManyAggregation.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationManyToManyAggregation.java new file mode 100644 index 00000000..2aadeb16 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationManyToManyAggregation.java @@ -0,0 +1,95 @@ +package com.flow.demo.common.core.annotation; + +import com.flow.demo.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 主要用于多对多的Model关系。标注通过从表关联字段或者关联表关联字段计算主表聚合计算字段的规则。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationManyToManyAggregation { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; + + /** + * 多对多从表Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 多对多从表Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 多对多关联表Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class relationModelClass(); + + /** + * 多对多关联表Model对象中与主表关联的Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String relationMasterIdField(); + + /** + * 多对多关联表Model对象中与从表关联的Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String relationSlaveIdField(); + + /** + * 聚合计算所在的Model。 + * + * @return 聚合计算所在Model的Class。 + */ + Class aggregationModelClass(); + + /** + * 聚合类型。具体数值参考AggregationType对象。 + * + * @return 聚合类型。 + */ + int aggregationType(); + + /** + * 聚合计算所在Model的字段名称。 + * + * @return 聚合计算所在Model的字段名称。 + */ + String aggregationField(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationOneToMany.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationOneToMany.java new file mode 100644 index 00000000..c7056e1e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationOneToMany.java @@ -0,0 +1,53 @@ +package com.flow.demo.common.core.annotation; + +import com.flow.demo.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 标识Model之间的一对多关联关系。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationOneToMany { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 被关联Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationOneToManyAggregation.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationOneToManyAggregation.java new file mode 100644 index 00000000..d896e8c1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationOneToManyAggregation.java @@ -0,0 +1,67 @@ +package com.flow.demo.common.core.annotation; + +import com.flow.demo.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 主要用于一对多的Model关系。标注通过从表关联字段计算主表聚合计算字段的规则。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationOneToManyAggregation { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; + + /** + * 被关联Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 被关联Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 被关联Model对象中参与计算的聚合类型。具体数值参考AggregationType对象。 + * + * @return 被关联Model对象中参与计算的聚合类型。 + */ + int aggregationType(); + + /** + * 被关联Model对象中参与聚合计算的字段名称。 + * + * @return 被关联Model对象中参与计算字段的名称。 + */ + String aggregationField(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationOneToOne.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationOneToOne.java new file mode 100644 index 00000000..79e12472 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/RelationOneToOne.java @@ -0,0 +1,60 @@ +package com.flow.demo.common.core.annotation; + +import com.flow.demo.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 标识Model之间的一对一关联关系。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationOneToOne { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 被关联Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; + + /** + * 在一对一关联时,是否加载从表的字典关联。 + * + * @return 是否加载从表的字典关联。true关联,false则只返回从表自身数据。 + */ + boolean loadSlaveDict() default true; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/TenantFilterColumn.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/TenantFilterColumn.java new file mode 100644 index 00000000..783dde28 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/TenantFilterColumn.java @@ -0,0 +1,16 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记通过租户Id进行过滤的字段。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface TenantFilterColumn { + +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/UploadFlagColumn.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/UploadFlagColumn.java new file mode 100644 index 00000000..efdf3ee3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/UploadFlagColumn.java @@ -0,0 +1,24 @@ +package com.flow.demo.common.core.annotation; + +import com.flow.demo.common.core.upload.UploadStoreTypeEnum; + +import java.lang.annotation.*; + +/** + * 用于标记支持数据上传和下载的字段。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface UploadFlagColumn { + + /** + * 上传数据存储类型。 + * + * @return 上传数据存储类型。 + */ + UploadStoreTypeEnum storeType(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/UserFilterColumn.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/UserFilterColumn.java new file mode 100644 index 00000000..90836fdd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/annotation/UserFilterColumn.java @@ -0,0 +1,16 @@ +package com.flow.demo.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记数据权限中基于UserId进行过滤的字段。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface UserFilterColumn { + +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/aop/DataSourceAspect.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/aop/DataSourceAspect.java new file mode 100644 index 00000000..88b91175 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/aop/DataSourceAspect.java @@ -0,0 +1,48 @@ +package com.flow.demo.common.core.aop; + +import com.flow.demo.common.core.annotation.MyDataSource; +import com.flow.demo.common.core.config.DataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + * 多数据源AOP切面处理类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Aspect +@Component +@Order(1) +@Slf4j +public class DataSourceAspect { + + /** + * 所有配置MyDataSource注解的Service实现类。 + */ + @Pointcut("execution(public * com.flow.demo..service..*(..)) " + + "&& @target(com.flow.demo.common.core.annotation.MyDataSource)") + public void datasourcePointCut() { + // 空注释,避免sonar警告 + } + + @Around("datasourcePointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + Class clazz = point.getTarget().getClass(); + MyDataSource ds = clazz.getAnnotation(MyDataSource.class); + // 通过判断 DataSource 中的值来判断当前方法应用哪个数据源 + Integer originalType = DataSourceContextHolder.setDataSourceType(ds.value()); + log.debug("set datasource is " + ds.value()); + try { + return point.proceed(); + } finally { + DataSourceContextHolder.unset(originalType); + log.debug("unset datasource is " + originalType); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/aop/DataSourceResolveAspect.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/aop/DataSourceResolveAspect.java new file mode 100644 index 00000000..9589f156 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/aop/DataSourceResolveAspect.java @@ -0,0 +1,62 @@ +package com.flow.demo.common.core.aop; + +import com.flow.demo.common.core.annotation.MyDataSourceResolver; +import com.flow.demo.common.core.util.DataSourceResolver; +import com.flow.demo.common.core.config.DataSourceContextHolder; +import com.flow.demo.common.core.util.ApplicationContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * 基于自定义解析规则的多数据源AOP切面处理类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Aspect +@Component +@Order(1) +@Slf4j +public class DataSourceResolveAspect { + + private final Map, DataSourceResolver> resolverMap = new HashMap<>(); + + /** + * 所有配置 MyDataSource 注解的Service。 + */ + @Pointcut("execution(public * com.flow.demo..service..*(..)) " + + "&& @target(com.flow.demo.common.core.annotation.MyDataSourceResolver)") + public void datasourceResolverPointCut() { + // 空注释,避免sonar警告 + } + + @Around("datasourceResolverPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + Class clazz = point.getTarget().getClass(); + MyDataSourceResolver dsr = clazz.getAnnotation(MyDataSourceResolver.class); + Class resolverClass = dsr.resolver(); + DataSourceResolver resolver = resolverMap.get(resolverClass); + if (resolver == null) { + resolver = ApplicationContextHolder.getBean(resolverClass); + resolverMap.put(resolverClass, resolver); + } + int type = resolver.resolve(dsr.arg(), point.getArgs()); + // 通过判断 DataSource 中的值来判断当前方法应用哪个数据源 + Integer originalType = DataSourceContextHolder.setDataSourceType(type); + log.debug("set datasource is " + type); + try { + return point.proceed(); + } finally { + DataSourceContextHolder.unset(originalType); + log.debug("unset datasource is " + originalType); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/aop/DictCacheSyncAspect.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/aop/DictCacheSyncAspect.java new file mode 100644 index 00000000..ad5ee152 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/aop/DictCacheSyncAspect.java @@ -0,0 +1,64 @@ +package com.flow.demo.common.core.aop; + +import com.flow.demo.common.core.base.service.BaseDictService; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.io.Serializable; + +/** + * 字典缓存同步的AOP。该AOP的优先级必须比事务切面的优先级高,因此会在事务外执行该切面的代码。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Aspect +@Component +@Order(Ordered.LOWEST_PRECEDENCE - 1) +@Slf4j +public class DictCacheSyncAspect { + + /** + * BaseDictService 字典服务父类中的字典数据增删改的方法。 + */ + @Pointcut("execution(public * com.flow.demo..BaseDictService.saveNew (..)) " + + "|| execution(public * com.flow.demo..BaseDictService.update (..)) " + + "|| execution(public * com.flow.demo..BaseDictService.remove (..))" ) + public void baseDictServicePointCut() { + // 空注释,避免sonar警告 + } + + @SuppressWarnings("unchecked") + @Around("baseDictServicePointCut()") + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + String methodName = joinPoint.getSignature().getName(); + Object arg = joinPoint.getArgs()[0]; + if ("saveNew".equals(methodName)) { + Object data = joinPoint.proceed(); + BaseDictService service = + (BaseDictService) joinPoint.getTarget(); + // 这里参数必须使用saveNew方法的返回对象,因为里面包含实际主键值。 + service.putDictionaryCache(data); + return data; + } else if ("update".equals(methodName)) { + Object data = joinPoint.proceed(); + BaseDictService service = + (BaseDictService) joinPoint.getTarget(); + // update的方法返回的是boolean,因此这里的参数需要使用第一个参数即可。 + service.putDictionaryCache(arg); + return data; + } else { + // remove + BaseDictService service = + (BaseDictService) joinPoint.getTarget(); + service.removeDictionaryCache((Serializable) arg); + return joinPoint.proceed(); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/dao/BaseDaoMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/dao/BaseDaoMapper.java new file mode 100644 index 00000000..7b7c7ff8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/dao/BaseDaoMapper.java @@ -0,0 +1,87 @@ +package com.flow.demo.common.core.base.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +/** + * 数据访问对象的基类。 + * + * @param 主Model实体对象。 + * @author Jerry + * @date 2021-06-06 + */ +public interface BaseDaoMapper extends BaseMapper { + + /** + * 根据指定的表名、显示字段列表、过滤条件字符串和分组字段,返回聚合计算后的查询结果。 + * + * @param selectTable 表名称。 + * @param selectFields 返回字段列表,逗号分隔。 + * @param whereClause SQL常量形式的条件从句。 + * @param groupBy 分组字段列表,逗号分隔。 + * @return 对象可选字段Map列表。 + */ + @Select("") + List> getGroupedListByCondition( + @Param("selectTable") String selectTable, + @Param("selectFields") String selectFields, + @Param("whereClause") String whereClause, + @Param("groupBy") String groupBy); + + /** + * 根据指定的表名、显示字段列表、过滤条件字符串和排序字符串,返回查询结果。 + * + * @param selectTable 表名称。 + * @param selectFields 选择的字段列表。 + * @param whereClause 过滤字符串。 + * @param orderBy 排序字符串。 + * @return 查询结果。 + */ + @Select("") + List> getListByCondition( + @Param("selectTable") String selectTable, + @Param("selectFields") String selectFields, + @Param("whereClause") String whereClause, + @Param("orderBy") String orderBy); + + /** + * 用指定过滤条件,计算记录数量。 + * + * @param selectTable 表名称。 + * @param whereClause 过滤字符串。 + * @return 返回过滤后的数据数量。 + */ + @Select("") + int getCountByCondition(@Param("selectTable") String selectTable, @Param("whereClause") String whereClause); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/mapper/BaseModelMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/mapper/BaseModelMapper.java new file mode 100644 index 00000000..9e03fdb9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/mapper/BaseModelMapper.java @@ -0,0 +1,124 @@ +package com.flow.demo.common.core.base.mapper; + +import cn.hutool.core.bean.BeanUtil; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Model对象到Domain类型对象的相互转换。实现类通常声明在Model实体类中。 + * + * @param Domain域对象类型。 + * @param Model实体对象类型。 + * @author Jerry + * @date 2021-06-06 + */ +public interface BaseModelMapper { + + /** + * 转换Model实体对象到Domain域对象。 + * + * @param model Model实体对象。 + * @return Domain域对象。 + */ + D fromModel(M model); + + /** + * 转换Model实体对象列表到Domain域对象列表。 + * + * @param modelList Model实体对象列表。 + * @return Domain域对象列表。 + */ + List fromModelList(List modelList); + + /** + * 转换Domain域对象到Model实体对象。 + * + * @param domain Domain域对象。 + * @return Model实体对象。 + */ + M toModel(D domain); + + /** + * 转换Domain域对象列表到Model实体对象列表。 + * + * @param domainList Domain域对象列表。 + * @return Model实体对象列表。 + */ + List toModelList(List domainList); + + /** + * 转换bean到map + * + * @param bean bean对象。 + * @param ignoreNullValue 值为null的字段是否转换到Map。 + * @param bean类型。 + * @return 转换后的map对象。 + */ + default Map beanToMap(T bean, boolean ignoreNullValue) { + return BeanUtil.beanToMap(bean, false, ignoreNullValue); + } + + /** + * 转换bean集合到map集合 + * + * @param dataList bean对象集合。 + * @param ignoreNullValue 值为null的字段是否转换到Map。 + * @param bean类型。 + * @return 转换后的map对象集合。 + */ + default List> beanToMap(List dataList, boolean ignoreNullValue) { + if (CollectionUtils.isEmpty(dataList)) { + return new LinkedList<>(); + } + return dataList.stream() + .map(o -> BeanUtil.beanToMap(o, false, ignoreNullValue)) + .collect(Collectors.toList()); + } + + /** + * 转换map到bean。 + * + * @param map map对象。 + * @param beanClazz bean的Class对象。 + * @param bean类型。 + * @return 转换后的bean对象。 + */ + default T mapToBean(Map map, Class beanClazz) { + return BeanUtil.toBeanIgnoreError(map, beanClazz); + } + + /** + * 转换map集合到bean集合。 + * + * @param mapList map对象集合。 + * @param beanClazz bean的Class对象。 + * @param bean类型。 + * @return 转换后的bean对象集合。 + */ + default List mapToBean(List> mapList, Class beanClazz) { + if (CollectionUtils.isEmpty(mapList)) { + return new LinkedList<>(); + } + return mapList.stream() + .map(m -> BeanUtil.toBeanIgnoreError(m, beanClazz)) + .collect(Collectors.toList()); + } + + /** + * 对于Map字段到Map字段的映射场景,MapStruct会根据方法签名自动选择该函数 + * 作为对象copy的函数。由于该函数是直接返回的,因此没有对象copy,效率更高。 + * 如果没有该函数,MapStruct会生成如下代码: + * Map map = courseDto.getTeacherIdDictMap(); + * if ( map != null ) { + * course.setTeacherIdDictMap( new HashMap( map ) ); + * } + * + * @param map map对象。 + * @return 直接返回的map。 + */ + default Map mapToMap(Map map) { + return map; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/mapper/DummyModelMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/mapper/DummyModelMapper.java new file mode 100644 index 00000000..be1d66ba --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/mapper/DummyModelMapper.java @@ -0,0 +1,58 @@ +package com.flow.demo.common.core.base.mapper; + +import java.util.List; + +/** + * 哑元占位对象。Model实体对象和Domain域对象相同的场景下使用。 + * 由于没有实际的数据转换,因此同时保证了代码统一和执行效率。 + * + * @param 数据类型。 + * @author Jerry + * @date 2021-06-06 + */ +public class DummyModelMapper implements BaseModelMapper { + + /** + * 不转换直接返回。 + * + * @param model Model实体对象。 + * @return Domain域对象。 + */ + @Override + public M fromModel(M model) { + return model; + } + + /** + * 不转换直接返回。 + * + * @param modelList Model实体对象列表。 + * @return Domain域对象列表。 + */ + @Override + public List fromModelList(List modelList) { + return modelList; + } + + /** + * 不转换直接返回。 + * + * @param domain Domain域对象。 + * @return Model实体对象。 + */ + @Override + public M toModel(M domain) { + return domain; + } + + /** + * 不转换直接返回。 + * + * @param domainList Domain域对象列表。 + * @return Model实体对象列表。 + */ + @Override + public List toModelList(List domainList) { + return domainList; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/BaseDictService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/BaseDictService.java new file mode 100644 index 00000000..e5ee066b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/BaseDictService.java @@ -0,0 +1,266 @@ +package com.flow.demo.common.core.base.service; + +import cn.hutool.core.util.ReflectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.exception.MyRuntimeException; +import com.flow.demo.common.core.cache.DictionaryCache; +import com.flow.demo.common.core.object.TokenData; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.transaction.annotation.Transactional; + +import java.io.Serializable; +import java.util.*; + +/** + * 带有缓存功能的字典Service基类,需要留意的是,由于缓存基于Key/Value方式存储, + * 目前仅支持基于主键字段的缓存查找,其他条件的查找仍然从数据源获取。 + * + * @param Model实体对象的类型。 + * @param Model对象主键的类型。 + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public abstract class BaseDictService extends BaseService implements IBaseDictService { + + /** + * 缓存池对象。 + */ + protected DictionaryCache dictionaryCache; + + /** + * 构造函数使用缺省缓存池对象。 + */ + public BaseDictService() { + super(); + } + + /** + * 重新加载数据库中所有当前表数据到系统内存。 + * + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reloadCachedData(boolean force) { + // 在非强制刷新情况下。 + // 先行判断缓存中是否存在数据,如果有就不加载了。 + if (!force && dictionaryCache.getCount() > 0) { + return; + } + List allList = super.getAllList(); + dictionaryCache.reload(allList, force); + } + + /** + * 保存新增对象。 + * + * @param data 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public M saveNew(M data) { + if (deletedFlagFieldName != null) { + try { + setDeletedFlagMethod.invoke(data, GlobalDeletedFlag.NORMAL); + } catch (Exception e) { + log.error("Failed to call reflection [setDeletedFlagMethod] in BaseDictService.saveNew.", e); + throw new MyRuntimeException(e); + } + } + if (tenantIdField != null) { + ReflectUtil.setFieldValue(data, tenantIdField, TokenData.takeFromRequest().getTenantId()); + } + mapper().insert(data); + return data; + } + + /** + * 更新数据对象。 + * + * @param data 更新的对象。 + * @param originalData 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(M data, M originalData) { + if (tenantIdField != null) { + ReflectUtil.setFieldValue(data, tenantIdField, TokenData.takeFromRequest().getTenantId()); + } + return mapper().updateById(data) == 1; + } + + /** + * 删除指定数据。 + * + * @param id 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(K id) { + return mapper().deleteById(id) == 1; + } + + /** + * 直接从缓存池中获取主键Id关联的数据。如果缓存中不存在,再从数据库中取出并回写到缓存。 + * + * @param id 主键Id。 + * @return 主键关联的数据,不存在返回null。 + */ + @SuppressWarnings("unchecked") + @Override + public M getById(Serializable id) { + M data = dictionaryCache.get((K) id); + if (data != null) { + return data; + } + data = super.getById(id); + if (data != null) { + this.dictionaryCache.put((K) id, data); + } + return data; + } + + /** + * 直接从缓存池中获取所有数据。 + * + * @return 返回所有数据。 + */ + @Override + public List getAllListFromCache() { + return dictionaryCache.getAll(); + } + + /** + * 直接从缓存池中返回符合主键 in (idValues) 条件的所有数据。 + * 对于缓存中不存在的数据,从数据库中获取并回写入缓存。 + * + * @param idValues 主键值列表。 + * @return 检索后的数据列表。 + */ + @SuppressWarnings("unchecked") + @Override + public List getInList(Set idValues) { + List resultList = dictionaryCache.getInList(idValues); + if (resultList.size() == idValues.size()) { + return resultList; + } + Set cachedIdList = new HashSet<>(); + for (M data : resultList) { + try { + cachedIdList.add((K) getIdFieldMethod.invoke(data)); + } catch (Exception e) { + log.error("Failed to call reflection method in BaseDictService.getInList.", e); + throw new MyRuntimeException(e); + } + } + // 找到未缓存的数据,然后从数据库读取后缓存。 + Set uncachedIdList = new HashSet<>(); + for (K id : idValues) { + if (!cachedIdList.contains(id)) { + uncachedIdList.add(id); + } + } + List uncachedResultList = super.getInList(uncachedIdList); + if (CollectionUtils.isNotEmpty(uncachedResultList)) { + for (M data : uncachedResultList) { + try { + K id = (K) getIdFieldMethod.invoke(data); + this.dictionaryCache.put(id, data); + } catch (Exception e) { + log.error("Failed to call reflection method in BaseDictService.getInList.", e); + throw new MyRuntimeException(e); + } + } + resultList.addAll(uncachedResultList); + } + return resultList; + } + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据。属性property是主键,则从缓存中读取。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @return 检索后的数据列表。 + */ + @SuppressWarnings("unchecked") + @Override + public List getInList(String inFilterField, Set inFilterValues) { + if (inFilterField.equals(this.idFieldName)) { + return this.getInList((Set) inFilterValues); + } + return super.getInList(inFilterField, inFilterValues); + } + + /** + * 判断参数值列表中的所有数据,是否全部存在。另外,keyName字段在数据表中必须是唯一键值,否则返回结果会出现误判。 + * + * @param inFilterField 待校验的数据字段,这里使用Java对象中的属性,如courseId,而不是数据字段名course_id。 + * @param inFilterValues 数据值集合。 + * @return 全部存在返回true,否则false。 + */ + @SuppressWarnings("unchecked") + @Override + public boolean existUniqueKeyList(String inFilterField, Set inFilterValues) { + if (CollectionUtils.isEmpty(inFilterValues)) { + return true; + } + if (inFilterField.equals(this.idFieldName)) { + List dataList = this.getInList((Set) inFilterValues); + return dataList.size() == inFilterValues.size(); + } + String columnName = this.safeMapToColumnName(inFilterField); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in(columnName, inFilterValues); + return mapper().selectCount(queryWrapper) == inFilterValues.size(); + } + + /** + * 存入缓存。 + * + * @param data 新增或更新数据。 + */ + @SuppressWarnings("unchecked") + @Override + public void putDictionaryCache(M data) { + K key = (K) ReflectUtil.getFieldValue(data, idFieldName); + this.dictionaryCache.put(key, data); + } + + /** + * 根据字典主键将数据从缓存中删除。 + * + * @param id 字典主键。 + */ + @Override + public void removeDictionaryCache(K id) { + this.dictionaryCache.invalidate(id); + } + + /** + * 根据字典对象将数据从缓存中删除。 + * + * @param data 字典数据。 + */ + @SuppressWarnings("unchecked") + @Override + public void removeDictionaryCacheByModel(M data) { + K key = (K) ReflectUtil.getFieldValue(data, idFieldName); + this.dictionaryCache.invalidate(key); + } + + /** + * 获取缓存中的数据数量。 + * + * @return 缓存中的数据总量。 + */ + @Override + public int getCachedCount() { + return dictionaryCache.getCount(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/BaseService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/BaseService.java new file mode 100644 index 00000000..17e7b15f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/BaseService.java @@ -0,0 +1,1626 @@ +package com.flow.demo.common.core.base.service; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.flow.demo.common.core.annotation.*; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.constant.AggregationType; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.exception.InvalidDataFieldException; +import com.flow.demo.common.core.exception.MyRuntimeException; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.AopTargetUtil; +import com.flow.demo.common.core.util.ApplicationContextHolder; +import com.flow.demo.common.core.util.MyModelUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import cn.hutool.core.util.ReflectUtil; + +import java.io.Serializable; +import java.lang.reflect.Modifier; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.util.*; +import java.util.function.Function; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import static java.util.stream.Collectors.*; + +/** + * 所有Service的基类。 + * + * @param Model对象的类型。 + * @param Model对象主键的类型。 + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public abstract class BaseService extends ServiceImpl, M> implements IBaseService { + /** + * 当前Service关联的主Model实体对象的Class。 + */ + protected final Class modelClass; + /** + * 当前Service关联的主Model实体对象主键字段的Class。 + */ + protected final Class idFieldClass; + /** + * 当前Service关联的主Model实体对象的实际表名称。 + */ + protected final String tableName; + /** + * 当前Service关联的主Model对象主键字段名称。 + */ + protected String idFieldName; + /** + * 当前Service关联的主数据表中主键列名称。 + */ + protected String idColumnName; + /** + * 当前Service关联的主Model对象逻辑删除字段名称。 + */ + protected String deletedFlagFieldName; + /** + * 当前Service关联的主数据表中逻辑删除字段名称。 + */ + protected String deletedFlagColumnName; + /** + * 当前Service关联的主Model对象租户Id字段。 + */ + protected Field tenantIdField; + /** + * 当前Service关联的主Model对象租户Id字段名称。 + */ + protected String tenantIdFieldName; + /** + * 当前Service关联的主数据表中租户Id列名称。 + */ + protected String tenantIdColumnName; + /** + * 当前Job服务源主表Model对象最后更新时间字段名称。 + */ + protected String updateTimeFieldName; + /** + * 当前Job服务源主表Model对象最后更新时间列名称。 + */ + protected String updateTimeColumnName; + /** + * 当前Service关联的主Model对象主键字段赋值方法的反射对象。 + */ + protected Method setIdFieldMethod; + /** + * 当前Service关联的主Model对象主键字段访问方法的反射对象。 + */ + protected Method getIdFieldMethod; + /** + * 当前Service关联的主Model对象逻辑删除字段赋值方法的反射对象。 + */ + protected Method setDeletedFlagMethod; + /** + * 当前Service关联的主Model对象的所有字典关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List relationDictStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有常量字典关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List relationConstDictStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有一对一关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List relationOneToOneStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有一对多关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List relationOneToManyStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有多对多关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List relationManyToManyStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有一对多聚合关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List relationOneToManyAggrStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有多对多聚合关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List relationManyToManyAggrStructList = new LinkedList<>(); + + private static final String GROUPED_KEY = "groupedKey"; + private static final String AGGREGATED_VALUE = "aggregatedValue"; + private static final String AND_OP = " AND "; + + @Override + public BaseDaoMapper getBaseMapper() { + return mapper(); + } + + /** + * 构造函数,在实例化的时候,一次性完成所有有关主Model对象信息的加载。 + */ + @SuppressWarnings("unchecked") + public BaseService() { + modelClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + idFieldClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]; + this.tableName = modelClass.getAnnotation(TableName.class).value(); + Field[] fields = ReflectUtil.getFields(modelClass); + for (Field field : fields) { + initializeField(field); + } + } + + private void initializeField(Field field) { + if (idFieldName == null && null != field.getAnnotation(TableId.class)) { + idFieldName = field.getName(); + TableId c = field.getAnnotation(TableId.class); + idColumnName = c == null ? idFieldName : c.value(); + setIdFieldMethod = ReflectUtil.getMethod( + modelClass, "set" + StringUtils.capitalize(idFieldName), idFieldClass); + getIdFieldMethod = ReflectUtil.getMethod( + modelClass, "get" + StringUtils.capitalize(idFieldName)); + } + if (updateTimeFieldName == null && null != field.getAnnotation(JobUpdateTimeColumn.class)) { + updateTimeFieldName = field.getName(); + updateTimeColumnName = this.safeMapToColumnName(updateTimeFieldName); + } + if (deletedFlagFieldName == null && null != field.getAnnotation(TableLogic.class)) { + deletedFlagFieldName = field.getName(); + deletedFlagColumnName = this.safeMapToColumnName(deletedFlagFieldName); + setDeletedFlagMethod = ReflectUtil.getMethod( + modelClass, "set" + StringUtils.capitalize(deletedFlagFieldName), Integer.class); + } + if (tenantIdFieldName == null && null != field.getAnnotation(TenantFilterColumn.class)) { + tenantIdField = field; + tenantIdFieldName = field.getName(); + tenantIdColumnName = this.safeMapToColumnName(tenantIdFieldName); + } + } + + /** + * 获取子类中注入的Mapper类。 + * + * @return 子类中注入的Mapper类。 + */ + protected abstract BaseDaoMapper mapper(); + + /** + * 根据过滤条件删除数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Integer removeBy(M filter) { + return mapper().delete(new QueryWrapper<>(filter)); + } + + /** + * 判断指定字段的数据是否存在,且仅仅存在一条记录。 + * 如果是基于主键的过滤,会直接调用existId过滤函数,提升性能。在有缓存的场景下,也可以利用缓存。 + * + * @param fieldName 待过滤的字段名(Java 字段)。 + * @param fieldValue 字段值。 + * @return 存在且仅存在一条返回true,否则false。 + */ + @SuppressWarnings("unchecked") + @Override + public boolean existOne(String fieldName, Object fieldValue) { + if (fieldName.equals(this.idFieldName)) { + return this.existId((K) fieldValue); + } + String columnName = MyModelUtil.mapToColumnName(fieldName, modelClass); + return mapper().selectCount(new QueryWrapper().eq(columnName, fieldValue)) == 1; + } + + /** + * 判断主键Id关联的数据是否存在。 + * + * @param id 主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean existId(K id) { + return getById(id) != null; + } + + /** + * 返回符合 filterField = filterValue 条件的一条数据。 + * + * @param filterField 过滤的Java字段。 + * @param filterValue 过滤的Java字段值。 + * @return 查询后的数据对象。 + */ + @SuppressWarnings("unchecked") + @Override + public M getOne(String filterField, Object filterValue) { + if (filterField.equals(idFieldName)) { + return this.getById((K) filterValue); + } + String columnName = this.safeMapToColumnName(filterField); + QueryWrapper queryWrapper = new QueryWrapper().eq(columnName, filterValue); + return mapper().selectOne(queryWrapper); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * + * @param id 主表主键Id。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 查询结果对象。 + */ + @Override + public M getByIdWithRelation(K id, MyRelationParam relationParam) { + M dataObject = this.getById(id); + this.buildRelationForData(dataObject, relationParam); + return dataObject; + } + + /** + * 获取所有数据。 + * + * @return 返回所有数据。 + */ + @Override + public List getAllList() { + return mapper().selectList(Wrappers.emptyWrapper()); + } + + /** + * 获取排序后所有数据。 + * + * @param orderByProperties 需要排序的字段属性,这里使用Java对象中的属性名,而不是数据库字段名。 + * @return 返回排序后所有数据。 + */ + @Override + public List getAllListByOrder(String... orderByProperties) { + String[] columns = new String[orderByProperties.length]; + for (int i = 0; i < orderByProperties.length; i++) { + columns[i] = this.safeMapToColumnName(orderByProperties[i]); + } + return mapper().selectList(new QueryWrapper().orderByAsc(columns)); + } + + /** + * 判断参数值主键集合中的所有数据,是否全部存在 + * + * @param idSet 待校验的主键集合。 + * @return 全部存在返回true,否则false。 + */ + @Override + public boolean existAllPrimaryKeys(Set idSet) { + if (CollectionUtils.isEmpty(idSet)) { + return true; + } + return this.existUniqueKeyList(idFieldName, idSet); + } + + /** + * 判断参数值列表中的所有数据,是否全部存在。另外,keyName字段在数据表中必须是唯一键值,否则返回结果会出现误判。 + * + * @param inFilterField 待校验的数据字段,这里使用Java对象中的属性,如courseId,而不是数据字段名course_id + * @param inFilterValues 数据值列表。 + * @return 全部存在返回true,否则false。 + */ + @Override + public boolean existUniqueKeyList(String inFilterField, Set inFilterValues) { + if (CollectionUtils.isEmpty(inFilterValues)) { + return true; + } + String column = this.safeMapToColumnName(inFilterField); + return mapper().selectCount(new QueryWrapper().in(column, inFilterValues)) == inFilterValues.size(); + } + + /** + * 返回符合主键 in (idValues) 条件的所有数据。 + * + * @param idValues 主键值集合。 + * @return 检索后的数据列表。 + */ + @Override + public List getInList(Set idValues) { + return this.getInList(idFieldName, idValues, null); + } + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @return 检索后的数据列表。 + */ + @Override + public List getInList(String inFilterField, Set inFilterValues) { + return this.getInList(inFilterField, inFilterValues, null); + } + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据,并根据orderBy字段排序。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @param orderBy 排序字段。 + * @return 检索后的数据列表。 + */ + @Override + public List getInList(String inFilterField, Set inFilterValues, String orderBy) { + if (CollectionUtils.isEmpty(inFilterValues)) { + return new LinkedList<>(); + } + String column = this.safeMapToColumnName(inFilterField); + QueryWrapper queryWrapper = new QueryWrapper().in(column, inFilterValues); + if (StringUtils.isNotBlank(orderBy)) { + queryWrapper.last(orderBy); + } + return mapper().selectList(queryWrapper); + } + + /** + * 用参数对象作为过滤条件,获取数据数量。 + * + * @param filter 该方法基于mybatis 通用mapper,过滤对象中,只有被赋值的字段,才会成为where中的条件。 + * @return 返回过滤后的数据数量。 + */ + @Override + public int getCountByFilter(M filter) { + return mapper().selectCount(new QueryWrapper<>(filter)); + } + + /** + * 用参数对象作为过滤条件,判断是否存在过滤数据。 + * + * @param filter 该方法基于mybatis 通用mapper,过滤对象中,只有被赋值的字段,才会成为where中的条件。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean existByFilter(M filter) { + return this.getCountByFilter(filter) > 0; + } + + /** + * 用参数对象作为过滤条件,获取查询结果。 + * + * @param filter 该方法基于mybatis的通用mapper。如果参数为null,则返回全部数据。 + * @return 返回过滤后的数据。 + */ + @Override + public List getListByFilter(M filter) { + return mapper().selectList(new QueryWrapper<>(filter)); + } + + /** + * 获取父主键Id下的所有子数据列表。 + * + * @param parentIdFieldName 父主键字段名字,如"courseId"。 + * @param parentId 父主键的值。 + * @return 父主键Id下的所有子数据列表。 + */ + @Override + public List getListByParentId(String parentIdFieldName, K parentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + String parentIdColumn = this.safeMapToColumnName(parentIdFieldName); + if (parentId != null) { + queryWrapper.eq(parentIdColumn, parentId); + } else { + queryWrapper.isNull(parentIdColumn); + } + return mapper().selectList(queryWrapper); + } + + /** + * 根据指定的显示字段列表、过滤条件字符串和分组字符串,返回聚合计算后的查询结果。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param selectFields 选择的字段列表,多个字段逗号分隔。 + * NOTE: 如果数据表字段和Java对象字段名字不同,Java对象字段应该以别名的形式出现。 + * 如: table_column_name modelFieldName。否则无法被反射回Bean对象。 + * @param whereClause SQL常量形式的条件从句。 + * @param groupBy SQL常量形式分组字段列表,逗号分隔。 + * @return 聚合计算后的数据结果集。 + */ + @Override + public List> getGroupedListByCondition( + String selectFields, String whereClause, String groupBy) { + return mapper().getGroupedListByCondition(tableName, selectFields, whereClause, groupBy); + } + + /** + * 根据指定的显示字段列表、过滤条件字符串和排序字符串,返回查询结果。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param selectList 选择的Java字段列表。如果为空表示返回全部字段。 + * @param filter 过滤对象。 + * @param whereClause SQL常量形式的条件从句。 + * @param orderBy SQL常量形式排序字段列表,逗号分隔。 + * @return 查询结果。 + */ + @Override + public List getListByCondition(List selectList, M filter, String whereClause, String orderBy) { + QueryWrapper queryWrapper = new QueryWrapper<>(filter); + if (CollectionUtils.isNotEmpty(selectList)) { + String[] columns = new String[selectList.size()]; + for (int i = 0; i < selectList.size(); i++) { + columns[i] = this.safeMapToColumnName(selectList.get(i)); + } + queryWrapper.select(columns); + } + if (StringUtils.isNotBlank(whereClause)) { + queryWrapper.apply(whereClause); + } + if (StringUtils.isNotBlank(orderBy)) { + queryWrapper.last(" ORDER BY " + orderBy); + } + return mapper().selectList(queryWrapper); + } + + /** + * 用指定过滤条件,计算记录数量。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param whereClause SQL常量形式的条件从句。 + * @return 返回过滤后的数据数量。 + */ + @Override + public Integer getCountByCondition(String whereClause) { + return mapper().getCountByCondition(this.tableName, whereClause); + } + + /** + * 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + */ + @Override + public void buildRelationForDataList(List resultList, MyRelationParam relationParam) { + this.buildRelationForDataList(resultList, relationParam, null); + } + + /** + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + @Override + public void buildRelationForDataList( + List resultList, MyRelationParam relationParam, Set ignoreFields) { + if (relationParam == null || CollectionUtils.isEmpty(resultList)) { + return; + } + boolean dataFilterValue = GlobalThreadLocal.setDataFilter(false); + try { + // 集成本地一对一和字段级别的数据关联。 + boolean buildOneToOne = relationParam.isBuildOneToOne() || relationParam.isBuildOneToOneWithDict(); + // 这里集成一对一关联。 + if (buildOneToOne) { + this.buildOneToOneForDataList(resultList, relationParam.isBuildOneToOneWithDict(), ignoreFields); + } + // 集成一对多关联 + if (relationParam.isBuildOneToMany()) { + this.buildOneToManyForDataList(resultList, ignoreFields); + } + // 这里集成字典关联 + if (relationParam.isBuildDict()) { + // 构建常量字典关联关系 + this.buildConstDictForDataList(resultList, ignoreFields); + this.buildDictForDataList(resultList, buildOneToOne, ignoreFields); + } + // 组装本地聚合计算关联数据 + if (relationParam.isBuildRelationAggregation()) { + // 处理多对多场景下,根据主表的结果,进行从表聚合数据的计算。 + this.buildManyToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria(), ignoreFields); + // 处理多一多场景下,根据主表的结果,进行从表聚合数据的计算。 + this.buildOneToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria(), ignoreFields); + } + } finally { + GlobalThreadLocal.setDataFilter(dataFilterValue); + } + } + + /** + * 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制, + * 因此在导出数据量较大的情况下,很容易给数据库的内存、CPU和IO带来较大的压力。而通过 + * 我们的分批处理,可以极大的规避该问题的出现几率。调整batchSize的大小,也可以有效的 + * 改善运行效率。 + * 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时, + * 后面几批数据,因为skip过多而带来的效率问题。因为是单表过滤,不会给数据库带来过大的压力。 + * 之后再在主表结果集数据上进行分批级联处理。 + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。 + */ + @Override + public void buildRelationForDataList(List resultList, MyRelationParam relationParam, int batchSize) { + this.buildRelationForDataList(resultList, relationParam, batchSize, null); + } + + /** + * 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制, + * 因此在导出数据量较大的情况下,很容易给数据库的内存、CPU和IO带来较大的压力。而通过 + * 我们的分批处理,可以极大的规避该问题的出现几率。调整batchSize的大小,也可以有效的 + * 改善运行效率。 + * 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时, + * 后面几批数据,因为skip过多而带来的效率问题。因为是单表过滤,不会给数据库带来过大的压力。 + * 之后再在主表结果集数据上进行分批级联处理。 + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + @Override + public void buildRelationForDataList( + List resultList, MyRelationParam relationParam, int batchSize, Set ignoreFields) { + if (CollectionUtils.isEmpty(resultList)) { + return; + } + if (batchSize <= 0) { + this.buildRelationForDataList(resultList, relationParam); + return; + } + int totalCount = resultList.size(); + int fromIndex = 0; + int toIndex = Math.min(batchSize, totalCount); + while (toIndex > fromIndex) { + List subResultList = resultList.subList(fromIndex, toIndex); + this.buildRelationForDataList(subResultList, relationParam, ignoreFields); + fromIndex = toIndex; + toIndex = Math.min(batchSize + fromIndex, totalCount); + } + } + + /** + * 集成所有与主表实体对象相关的关联数据对象。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param dataObject 主表实体对象。数据集成将直接作用于该对象。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param 实体对象类型。 + */ + @Override + public void buildRelationForData(T dataObject, MyRelationParam relationParam) { + this.buildRelationForData(dataObject, relationParam, null); + } + + /** + * 集成所有与主表实体对象相关的关联数据对象。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param dataObject 主表实体对象。数据集成将直接作用于该对象。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @param 实体对象类型。 + */ + @Override + public void buildRelationForData(T dataObject, MyRelationParam relationParam, Set ignoreFields) { + if (dataObject == null || relationParam == null) { + return; + } + boolean dataFilterValue = GlobalThreadLocal.setDataFilter(false); + try { + // 集成本地一对一和字段级别的数据关联。 + boolean buildOneToOne = relationParam.isBuildOneToOne() || relationParam.isBuildOneToOneWithDict(); + if (buildOneToOne) { + this.buildOneToOneForData(dataObject, relationParam.isBuildOneToOneWithDict(), ignoreFields); + } + // 集成一对多关联 + if (relationParam.isBuildOneToMany()) { + this.buildOneToManyForData(dataObject, ignoreFields); + } + if (relationParam.isBuildDict()) { + // 构建常量字典关联关系 + this.buildConstDictForData(dataObject, ignoreFields); + // 构建本地数据字典关联关系。 + this.buildDictForData(dataObject, buildOneToOne, ignoreFields); + } + // 组装本地聚合计算关联数据 + if (relationParam.isBuildRelationAggregation()) { + // 开始处理多对多场景。 + buildManyToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria(), ignoreFields); + // 构建一对多场景 + buildOneToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria(), ignoreFields); + } + if (relationParam.isBuildRelationManyToMany()) { + this.buildRelationManyToMany(dataObject, ignoreFields); + } + } finally { + GlobalThreadLocal.setDataFilter(dataFilterValue); + } + } + + /** + * 集成主表和多对多中间表之间的关联关系。 + * + * @param dataObject 关联后的主表数据对象。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildRelationManyToMany(T dataObject, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationManyToManyStructList)) { + return; + } + for (RelationStruct relationStruct : this.relationManyToManyStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + String masterIdColumn = this.safeMapToColumnName(relationStruct.masterIdField.getName()); + Map filterMap = new HashMap<>(1); + filterMap.put(masterIdColumn, masterIdValue); + List manyToManyList = relationStruct.manyToManyMapper.selectByMap(filterMap); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, manyToManyList); + } + } + + /** + * 为实体对象参数列表数据集成本地静态字典关联数据。 + * + * @param resultList 主表数据列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildConstDictForDataList(List resultList, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.relationConstDictStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (RelationStruct relationStruct : this.relationConstDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + for (M dataObject : resultList) { + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + String name = relationStruct.dictMap.get(id); + if (name != null) { + Map dictMap = new HashMap<>(2); + dictMap.put("id", id); + dictMap.put("name", name); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, dictMap); + } + } + } + } + } + + /** + * 为参数实体对象数据集成本地静态字典关联数据。 + * + * @param dataObject 实体对象。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildConstDictForData(T dataObject, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationConstDictStructList)) { + return; + } + for (RelationStruct relationStruct : this.relationConstDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + String name = relationStruct.dictMap.get(id); + if (name != null) { + Map dictMap = new HashMap<>(2); + dictMap.put("id", id); + dictMap.put("name", name); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, dictMap); + } + } + } + } + + /** + * 为实体对象参数列表数据集成本地字典关联数据。 + * + * @param resultList 实体对象数据列表。 + * @param hasBuiltOneToOne 性能优化参数。如果该值为true,同时注解参数RelationDict.equalOneToOneRelationField + * 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildDictForDataList(List resultList, boolean hasBuiltOneToOne, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.relationDictStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (RelationStruct relationStruct : this.relationDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + List relationList = null; + if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) { + relationList = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.equalOneToOneRelationField)) + .filter(Objects::nonNull) + .collect(toList()); + } else { + String slaveId = relationStruct.relationDict.slaveIdField(); + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isNotEmpty(masterIdSet)) { + relationList = relationStruct.service.getInList(slaveId, masterIdSet); + } + } + MyModelUtil.makeDictRelation( + modelClass, resultList, relationList, relationStruct.relationField.getName()); + } + } + + /** + * 为实体对象数据集成本地数据字典关联数据。 + * + * @param dataObject 实体对象。 + * @param hasBuiltOneToOne 性能优化参数。如果该值为true,同时注解参数RelationDict.equalOneToOneRelationField + * 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildDictForData(T dataObject, boolean hasBuiltOneToOne, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationDictStructList)) { + return; + } + for (RelationStruct relationStruct : this.relationDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object relationObject = null; + if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) { + relationObject = ReflectUtil.getFieldValue(dataObject, relationStruct.equalOneToOneRelationField); + } else { + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + relationObject = relationStruct.service.getOne(relationStruct.relationDict.slaveIdField(), id); + } + } + MyModelUtil.makeDictRelation( + modelClass, dataObject, relationObject, relationStruct.relationField.getName()); + } + } + + /** + * 为实体对象参数列表数据集成本地一对一关联数据。 + * + * @param resultList 实体对象数据列表。 + * @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToOneForDataList(List resultList, boolean withDict, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.relationOneToOneStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (RelationStruct relationStruct : this.relationOneToOneStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + // 从主表集合中,抽取主表关联字段的集合,再以in list形式去从表中查询。 + if (CollectionUtils.isNotEmpty(masterIdSet)) { + BaseService relationService = relationStruct.service; + List relationList = + relationService.getInList(relationStruct.relationOneToOne.slaveIdField(), masterIdSet); + MyModelUtil.makeOneToOneRelation( + modelClass, resultList, relationList, relationStruct.relationField.getName()); + // 仅仅当需要加载从表字典关联时,才去加载。 + if (withDict && relationStruct.relationOneToOne.loadSlaveDict() + && CollectionUtils.isNotEmpty(relationList)) { + @SuppressWarnings("unchecked") + BaseService proxyTarget = + (BaseService) AopTargetUtil.getTarget(relationService); + // 关联本地字典。 + proxyTarget.buildDictForDataList(relationList, false, ignoreFields); + // 关联常量字典 + proxyTarget.buildConstDictForDataList(relationList, ignoreFields); + } + } + } + } + + /** + * 为实体对象数据集成本地一对一关联数据。 + * + * @param dataObject 实体对象。 + * @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToOneForData(M dataObject, boolean withDict, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationOneToOneStructList)) { + return; + } + for (RelationStruct relationStruct : this.relationOneToOneStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + BaseService relationService = relationStruct.service; + Object relationObject = relationService.getOne(relationStruct.relationOneToOne.slaveIdField(), id); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, relationObject); + // 仅仅当需要加载从表字典关联时,才去加载。 + if (withDict && relationStruct.relationOneToOne.loadSlaveDict() && relationObject != null) { + @SuppressWarnings("unchecked") + BaseService proxyTarget = + (BaseService) AopTargetUtil.getTarget(relationService); + // 关联本地字典 + proxyTarget.buildDictForData(relationObject, false, ignoreFields); + // 关联常量字典 + proxyTarget.buildConstDictForData(relationObject, ignoreFields); + } + } + } + } + + /** + * 为实体对象参数列表数据集成本地一对多关联数据。 + * + * @param resultList 实体对象数据列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToManyForDataList(List resultList, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.relationOneToManyStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (RelationStruct relationStruct : this.relationOneToManyStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + // 从主表集合中,抽取主表关联字段的集合,再以in list形式去从表中查询。 + if (CollectionUtils.isNotEmpty(masterIdSet)) { + BaseService relationService = relationStruct.service; + List relationList = + relationService.getInList(relationStruct.relationOneToMany.slaveIdField(), masterIdSet); + MyModelUtil.makeOneToManyRelation( + modelClass, resultList, relationList, relationStruct.relationField.getName()); + } + } + } + + /** + * 为实体对象数据集成本地一对多关联数据。 + * + * @param dataObject 实体对象。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToManyForData(M dataObject, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationOneToManyStructList)) { + return; + } + for (RelationStruct relationStruct : this.relationOneToManyStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + BaseService relationService = relationStruct.service; + Set masterIdSet = new HashSet<>(1); + masterIdSet.add(id); + List relationObject = relationService.getInList( + relationStruct.relationOneToMany.slaveIdField(), masterIdSet); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, relationObject); + } + } + } + + /** + * 根据实体对象参数列表和过滤条件,集成本地多对多关联聚合计算数据。 + * + * @param resultList 实体对象数据列表。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildManyToManyAggregationForDataList( + List resultList, Map> criteriaListMap, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.relationManyToManyAggrStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(this.relationManyToManyAggrStructList.size()); + } + for (RelationStruct relationStruct : this.relationManyToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; + } + RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; + // 提取关联中用到的各种字段和表数据。 + BasicAggregationRelationInfo basicRelationInfo = + this.parseBasicAggregationRelationInfo(relationStruct, criteriaListMap); + // 构建多表关联的where语句 + StringBuilder whereClause = new StringBuilder(256); + // 如果需要从表聚合计算或参与过滤,则需要把中间表和从表之间的关联条件加上。 + if (!basicRelationInfo.onlySelectRelationTable) { + whereClause.append(basicRelationInfo.relationTable) + .append(".") + .append(basicRelationInfo.relationSlaveColumn) + .append(" = ") + .append(basicRelationInfo.slaveTable) + .append(".") + .append(basicRelationInfo.slaveColumn); + } else { + whereClause.append("1 = 1"); + } + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + MyWhereCriteria inlistFilter = new MyWhereCriteria(); + inlistFilter.setCriteria(relation.relationModelClass(), + relation.relationMasterIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + criteriaList.add(inlistFilter); + if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relation.slaveModelClass(), + relationStruct.service.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + String criteriaString = MyWhereCriteria.makeCriteriaString(criteriaList); + whereClause.append(AND_OP).append(criteriaString); + StringBuilder tableNames = new StringBuilder(64); + tableNames.append(basicRelationInfo.relationTable); + if (!basicRelationInfo.onlySelectRelationTable) { + tableNames.append(", ").append(basicRelationInfo.slaveTable); + } + List> aggregationMapList = + mapper().getGroupedListByCondition(tableNames.toString(), + basicRelationInfo.selectList, whereClause.toString(), basicRelationInfo.groupBy); + doMakeLocalAggregationData(aggregationMapList, resultList, relationStruct); + } + } + + /** + * 根据实体对象和过滤条件,集成本地多对多关联聚合计算数据。 + * + * @param dataObject 实体对象。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildManyToManyAggregationForData( + T dataObject, Map> criteriaListMap, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationManyToManyAggrStructList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(relationManyToManyAggrStructList.size()); + } + for (RelationStruct relationStruct : this.relationManyToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue != null) { + BasicAggregationRelationInfo basicRelationInfo = + this.parseBasicAggregationRelationInfo(relationStruct, criteriaListMap); + // 组装过滤条件 + String whereClause = this.makeManyToManyWhereClause( + relationStruct, masterIdValue, basicRelationInfo, criteriaListMap); + StringBuilder tableNames = new StringBuilder(64); + tableNames.append(basicRelationInfo.relationTable); + if (!basicRelationInfo.onlySelectRelationTable) { + tableNames.append(", ").append(basicRelationInfo.slaveTable); + } + List> aggregationMapList = + mapper().getGroupedListByCondition(tableNames.toString(), + basicRelationInfo.selectList, whereClause, basicRelationInfo.groupBy); + // 将查询后的结果回填到主表数据中。 + if (CollectionUtils.isNotEmpty(aggregationMapList)) { + Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE); + if (value != null) { + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); + } + } + } + } + } + + /** + * 根据实体对象参数列表和过滤条件,集成本地一对多关联聚合计算数据。 + * + * @param resultList 实体对象数据列表。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToManyAggregationForDataList( + List resultList, Map> criteriaListMap, Set ignoreFields) { + // 处理多一多场景下,根据主表的结果,进行从表聚合数据的计算。 + if (CollectionUtils.isEmpty(this.relationOneToManyAggrStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(relationOneToManyAggrStructList.size()); + } + for (RelationStruct relationStruct : this.relationOneToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; + } + RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; + // 开始获取后面所需的各种关联数据。此部分今后可以移植到缓存中,无需每次计算。 + String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); + String slaveColumnName = MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + slaveTable, slaveColumnName, relation.slaveModelClass(), + slaveTable, relation.aggregationField(), relation.aggregationType()); + String selectList = selectAndGroupByTuple.getFirst(); + String groupBy = selectAndGroupByTuple.getSecond(); + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + MyWhereCriteria inlistFilter = new MyWhereCriteria(); + inlistFilter.setCriteria(relation.slaveModelClass(), + relation.slaveIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + criteriaList.add(inlistFilter); + if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relation.slaveModelClass(), + relationStruct.service.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + String criteriaString = MyWhereCriteria.makeCriteriaString(criteriaList); + List> aggregationMapList = + mapper().getGroupedListByCondition(slaveTable, selectList, criteriaString, groupBy); + doMakeLocalAggregationData(aggregationMapList, resultList, relationStruct); + } + } + + /** + * 根据实体对象和过滤条件,集成本地一对多关联聚合计算数据。 + * + * @param dataObject 实体对象。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToManyAggregationForData( + T dataObject, Map> criteriaListMap, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationOneToManyAggrStructList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(relationOneToManyAggrStructList.size()); + } + for (RelationStruct relationStruct : this.relationOneToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue != null) { + RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; + String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); + String slaveColumnName = + MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + slaveTable, slaveColumnName, relation.slaveModelClass(), + slaveTable, relation.aggregationField(), relation.aggregationType()); + String selectList = selectAndGroupByTuple.getFirst(); + String groupBy = selectAndGroupByTuple.getSecond(); + String whereClause = this.makeOneToManyWhereClause( + relationStruct, masterIdValue, slaveColumnName, criteriaListMap); + // 获取分组聚合计算结果 + List> aggregationMapList = + mapper().getGroupedListByCondition(slaveTable, selectList, whereClause, groupBy); + // 将计算结果回填到主表关联字段 + if (CollectionUtils.isNotEmpty(aggregationMapList)) { + Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE); + if (value != null) { + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); + } + } + } + } + } + + /** + * 仅仅在spring boot 启动后的监听器事件中调用,缓存所有service的关联关系,加速后续的数据绑定效率。 + */ + @Override + public void loadRelationStruct() { + Field[] fields = ReflectUtil.getFields(modelClass); + for (Field f : fields) { + initializeRelationDictStruct(f); + initializeRelationStruct(f); + initializeRelationAggregationStruct(f); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveInternal(List dataList, Supplier idGenerator, Consumer> batchInserter) { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + dataList.stream().filter(c -> ReflectUtil.getFieldValue(c, idFieldName) == null) + .forEach(o -> ReflectUtil.setFieldValue(o, idFieldName, idGenerator.get())); + if (batchInserter != null) { + batchInserter.accept(dataList); + } else { + for (M data : dataList) { + mapper().insert(data); + } + } + } + + /** + * 缺省实现返回null,在进行一对多和多对多聚合计算时,没有额外的自定义过滤条件。如有需要,需子类自行实现。 + * + * @return 自定义过滤条件列表。 + */ + protected Map> buildAggregationAdditionalWhereCriteria() { + return null; + } + + /** + * 判断当前对象的关联字段数据是否需要被验证,如果原有对象为null,表示新对象第一次插入,则必须验证。 + * + * @param object 新对象。 + * @param originalObject 原有对象。 + * @param fieldGetter 获取需要验证字段的函数对象。 + * @param 需要验证字段的类型。 + * @return 需要关联验证返回true,否则false。 + */ + protected boolean needToVerify(M object, M originalObject, Function fieldGetter) { + T data = fieldGetter.apply(object); + if (data == null) { + return false; + } + if (data instanceof String) { + String stringData = (String) data; + if (stringData.length() == 0) { + return false; + } + } + if (originalObject == null) { + return true; + } + T originalData = fieldGetter.apply(originalObject); + return !data.equals(originalData); + } + + /** + * 因为Mybatis Plus中QueryWrapper的条件方法都要求传入数据表字段名,因此提供该函数将 + * Java实体对象的字段名转换为数据表字段名,如果不存在会抛出异常。 + * 另外在MyModelUtil.mapToColumnName有一级缓存,对于查询过的对象字段都会放到缓存中, + * 下次映射转换的时候,会直接从缓存获取。 + * + * @param fieldName Java实体对象的字段名。 + * @return 对应的数据表字段名。 + */ + protected String safeMapToColumnName(String fieldName) { + String columnName = MyModelUtil.mapToColumnName(fieldName, modelClass); + if (columnName == null) { + throw new InvalidDataFieldException(modelClass.getSimpleName(), fieldName); + } + return columnName; + } + + /** + * 因为Mybatis Plus在update的时候,不能将实体对象中值为null的字段,更新为null, + * 而且忽略更新,在全部更新场景下,这个是非常重要的,所以我们写了这个函数绕开这一问题。 + * 该函数会遍历实体对象中,所有不包含@Transient注解,没有transient修饰符的字段,如果 + * 当前对象的该字段值为null,则会调用UpdateWrapper的set方法,将该字段赋值为null。 + * 相比于其他重载方法,该方法会将参数中的主键id,设置到UpdateWrapper的过滤条件中。 + * + * @param o 实体对象。 + * @param id 实体对象的主键值。 + * @return 创建后的UpdateWrapper。 + */ + protected UpdateWrapper createUpdateQueryForNullValue(M o, K id) { + UpdateWrapper uw = createUpdateQueryForNullValue(o, modelClass); + try { + M filter = modelClass.newInstance(); + this.setIdFieldMethod.invoke(filter, id); + uw.setEntity(filter); + } catch (Exception e) { + log.error("Failed to call reflection code of BaseService.createUpdateQueryForNullValue.", e); + throw new MyRuntimeException(e); + } + return uw; + } + + /** + * 因为Mybatis Plus在update的时候,不能将实体对象中值为null的字段,更新为null, + * 而且忽略更新,在全部更新场景下,这个是非常重要的,所以我们写了这个函数绕开这一问题。 + * 该函数会遍历实体对象中,所有不包含@Transient注解,没有transient修饰符的字段,如果 + * 当前对象的该字段值为null,则会调用UpdateWrapper的set方法,将该字段赋值为null。 + * + * @param o 实体对象。 + * @return 创建后的UpdateWrapper。 + */ + protected UpdateWrapper createUpdateQueryForNullValue(M o) { + return createUpdateQueryForNullValue(o, modelClass); + } + + /** + * 因为Mybatis Plus在update的时候,不能将实体对象中值为null的字段,更新为null, + * 而且忽略更新,在全部更新场景下,这个是非常重要的,所以我们写了这个函数绕开这一问题。 + * 该函数会遍历实体对象中,所有不包含@Transient注解,没有transient修饰符的字段,如果 + * 当前对象的该字段值为null,则会调用UpdateWrapper的set方法,将该字段赋值为null。 + * + * @param o 实体对象。 + * @param clazz 实体对象的class。 + * @return 创建后的UpdateWrapper。 + */ + public static UpdateWrapper createUpdateQueryForNullValue(T o, Class clazz) { + UpdateWrapper uw = new UpdateWrapper<>(); + Field[] fields = ReflectUtil.getFields(clazz); + List nullColumnList = new LinkedList<>(); + for (Field field : fields) { + TableField tableField = field.getAnnotation(TableField.class); + if (tableField == null || tableField.exist()) { + int modifiers = field.getModifiers(); + // transient类型的字段不能作为查询条件,静态字段和逻辑删除都不考虑。 + int transientMask = 128; + if ((modifiers & transientMask) == 1 + || Modifier.isStatic(modifiers) + || field.getAnnotation(TableLogic.class) != null) { + continue; + } + // 仅当实体对象参数中,当前字段值为null的时候,才会赋值给UpdateWrapper。 + // 以便在后续的更新中,可以将这些null字段的值设置到数据库表对应的字段中。 + if (ReflectUtil.getFieldValue(o, field) == null) { + nullColumnList.add(MyModelUtil.safeMapToColumnName(field.getName(), clazz)); + } + } + } + if (CollectionUtils.isNotEmpty(nullColumnList)) { + for (String nullColumn : nullColumnList) { + uw.set(nullColumn, null); + } + } + return uw; + } + + @SuppressWarnings("unchecked") + private void initializeRelationStruct(Field f) { + RelationOneToOne relationOneToOne = f.getAnnotation(RelationOneToOne.class); + if (relationOneToOne != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToOne.masterIdField()); + relationStruct.relationOneToOne = relationOneToOne; + if (StringUtils.isNotBlank(relationOneToOne.slaveServiceName())) { + relationStruct.service = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationOneToOne.slaveServiceName())); + } else { + relationStruct.service = (BaseService) + ApplicationContextHolder.getBean(relationOneToOne.slaveServiceClass()); + } + relationOneToOneStructList.add(relationStruct); + return; + } + RelationOneToMany relationOneToMany = f.getAnnotation(RelationOneToMany.class); + if (relationOneToMany != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToMany.masterIdField()); + relationStruct.relationOneToMany = relationOneToMany; + if (StringUtils.isNotBlank(relationOneToMany.slaveServiceName())) { + relationStruct.service = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationOneToMany.slaveServiceName())); + } else { + relationStruct.service = (BaseService) + ApplicationContextHolder.getBean(relationOneToMany.slaveServiceClass()); + } + relationOneToManyStructList.add(relationStruct); + return; + } + RelationManyToMany relationManyToMany = f.getAnnotation(RelationManyToMany.class); + if (relationManyToMany != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationManyToMany.relationMasterIdField()); + relationStruct.relationManyToMany = relationManyToMany; + relationStruct.manyToManyMapper = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationManyToMany.relationMapperName())); + relationManyToManyStructList.add(relationStruct); + } + } + + @SuppressWarnings("unchecked") + private void initializeRelationAggregationStruct(Field f) { + RelationOneToManyAggregation relationOneToManyAggregation = f.getAnnotation(RelationOneToManyAggregation.class); + if (relationOneToManyAggregation != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToManyAggregation.masterIdField()); + relationStruct.relationOneToManyAggregation = relationOneToManyAggregation; + if (StringUtils.isNotBlank(relationOneToManyAggregation.slaveServiceName())) { + relationStruct.service = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationOneToManyAggregation.slaveServiceName())); + } else { + relationStruct.service = (BaseService) + ApplicationContextHolder.getBean(relationOneToManyAggregation.slaveServiceClass()); + } + relationOneToManyAggrStructList.add(relationStruct); + return; + } + RelationManyToManyAggregation relationManyToManyAggregation = f.getAnnotation(RelationManyToManyAggregation.class); + if (relationManyToManyAggregation != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationManyToManyAggregation.masterIdField()); + relationStruct.relationManyToManyAggregation = relationManyToManyAggregation; + if (StringUtils.isNotBlank(relationManyToManyAggregation.slaveServiceName())) { + relationStruct.service = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationManyToManyAggregation.slaveServiceName())); + } else { + relationStruct.service = (BaseService) + ApplicationContextHolder.getBean(relationManyToManyAggregation.slaveServiceClass()); + } + relationManyToManyAggrStructList.add(relationStruct); + } + } + + @SuppressWarnings("unchecked") + private void initializeRelationDictStruct(Field f) { + RelationConstDict relationConstDict = f.getAnnotation(RelationConstDict.class); + if (relationConstDict != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationConstDict.masterIdField()); + Field dictMapField = ReflectUtil.getField(relationConstDict.constantDictClass(), "DICT_MAP"); + relationStruct.dictMap = (Map) ReflectUtil.getFieldValue(modelClass, dictMapField); + relationConstDictStructList.add(relationStruct); + return; + } + RelationDict relationDict = f.getAnnotation(RelationDict.class); + if (relationDict != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationDict.masterIdField()); + relationStruct.relationDict = relationDict; + if (StringUtils.isNotBlank(relationDict.equalOneToOneRelationField())) { + relationStruct.equalOneToOneRelationField = + ReflectUtil.getField(modelClass, relationDict.equalOneToOneRelationField()); + } + if (StringUtils.isNotBlank(relationDict.slaveServiceName())) { + relationStruct.service = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationDict.slaveServiceName())); + } else { + relationStruct.service = (BaseService) + ApplicationContextHolder.getBean(relationDict.slaveServiceClass()); + } + relationDictStructList.add(relationStruct); + } + } + + private BasicAggregationRelationInfo parseBasicAggregationRelationInfo( + RelationStruct relationStruct, Map> criteriaListMap) { + RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; + BasicAggregationRelationInfo relationInfo = new BasicAggregationRelationInfo(); + // 提取关联中用到的各种字段和表数据。 + relationInfo.slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); + relationInfo.relationTable = MyModelUtil.mapToTableName(relation.relationModelClass()); + relationInfo.relationMasterColumn = + MyModelUtil.mapToColumnName(relation.relationMasterIdField(), relation.relationModelClass()); + relationInfo.relationSlaveColumn = + MyModelUtil.mapToColumnName(relation.relationSlaveIdField(), relation.relationModelClass()); + relationInfo.slaveColumn = MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); + // 判断是否只需要关联中间表即可,从而提升查询统计的效率。 + // 1. 统计字段为中间表字段。2. 自定义过滤条件中没有基于从表字段的过滤条件。 + relationInfo.onlySelectRelationTable = + relation.aggregationModelClass().equals(relation.relationModelClass()); + if (relationInfo.onlySelectRelationTable && MapUtils.isNotEmpty(criteriaListMap)) { + List criteriaList = + criteriaListMap.get(relationStruct.relationField.getName()); + if (CollectionUtils.isNotEmpty(criteriaList)) { + for (MyWhereCriteria whereCriteria : criteriaList) { + if (whereCriteria.getModelClazz().equals(relation.slaveModelClass())) { + relationInfo.onlySelectRelationTable = false; + break; + } + } + } + } + String aggregationTable = relation.aggregationModelClass().equals(relation.relationModelClass()) + ? relationInfo.relationTable : relationInfo.slaveTable; + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + relationInfo.relationTable, relationInfo.relationMasterColumn, relation.aggregationModelClass(), + aggregationTable, relation.aggregationField(), relation.aggregationType()); + relationInfo.selectList = selectAndGroupByTuple.getFirst(); + relationInfo.groupBy = selectAndGroupByTuple.getSecond(); + return relationInfo; + } + + private String makeManyToManyWhereClause( + RelationStruct relationStruct, + Object masterIdValue, + BasicAggregationRelationInfo basicRelationInfo, + Map> criteriaListMap) { + StringBuilder whereClause = new StringBuilder(256); + whereClause.append(basicRelationInfo.relationTable) + .append(".").append(basicRelationInfo.relationMasterColumn); + if (masterIdValue instanceof Number) { + whereClause.append(" = ").append(masterIdValue); + } else { + whereClause.append(" = '").append(masterIdValue).append("'"); + } + // 如果需要从表聚合计算或参与过滤,则需要把中间表和从表之间的关联条件加上。 + if (!basicRelationInfo.onlySelectRelationTable) { + whereClause.append(AND_OP) + .append(basicRelationInfo.relationTable) + .append(".") + .append(basicRelationInfo.relationSlaveColumn) + .append(" = ") + .append(basicRelationInfo.slaveTable) + .append(".") + .append(basicRelationInfo.slaveColumn); + } + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relationStruct.relationManyToManyAggregation.slaveModelClass(), + relationStruct.service.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + if (CollectionUtils.isNotEmpty(criteriaList)) { + String criteriaString = MyWhereCriteria.makeCriteriaString(criteriaList); + whereClause.append(AND_OP).append(criteriaString); + } + return whereClause.toString(); + } + + private String makeOneToManyWhereClause( + RelationStruct relationStruct, + Object masterIdValue, + String slaveColumnName, + Map> criteriaListMap) { + StringBuilder whereClause = new StringBuilder(64); + if (masterIdValue instanceof Number) { + whereClause.append(slaveColumnName).append(" = ").append(masterIdValue); + } else { + whereClause.append(slaveColumnName).append(" = '").append(masterIdValue).append("'"); + } + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relationStruct.relationOneToManyAggregation.slaveModelClass(), + relationStruct.service.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + if (CollectionUtils.isNotEmpty(criteriaList)) { + String criteriaString = MyWhereCriteria.makeCriteriaString(criteriaList); + whereClause.append(AND_OP).append(criteriaString); + } + return whereClause.toString(); + } + + private static class BasicAggregationRelationInfo { + private String slaveTable; + private String slaveColumn; + private String relationTable; + private String relationMasterColumn; + private String relationSlaveColumn; + private String selectList; + private String groupBy; + private boolean onlySelectRelationTable; + } + + private void doMakeLocalAggregationData( + List> aggregationMapList, List resultList, RelationStruct relationStruct) { + if (CollectionUtils.isEmpty(resultList)) { + return; + } + // 根据获取的分组聚合结果集,绑定到主表总的关联字段。 + if (CollectionUtils.isNotEmpty(aggregationMapList)) { + Map relatedMap = new HashMap<>(aggregationMapList.size()); + for (Map map : aggregationMapList) { + relatedMap.put(map.get(GROUPED_KEY), map.get(AGGREGATED_VALUE)); + } + for (M dataObject : resultList) { + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue != null) { + Object value = relatedMap.get(masterIdValue); + if (value != null) { + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); + } + } + } + } + } + + private Tuple2 makeSelectListAndGroupByClause( + String groupTableName, + String groupColumnName, + Class aggregationModel, + String aggregationTableName, + String aggregationField, + Integer aggregationType) { + if (!AggregationType.isValid(aggregationType)) { + throw new IllegalArgumentException("Invalid AggregationType Value [" + + aggregationType + "] in Model [" + aggregationModel.getName() + "]."); + } + String aggregationFunc = AggregationType.getAggregationFunction(aggregationType); + String aggregationColumn = MyModelUtil.mapToColumnName(aggregationField, aggregationModel); + if (StringUtils.isBlank(aggregationColumn)) { + throw new IllegalArgumentException("Invalid AggregationField [" + + aggregationField + "] in Model [" + aggregationModel.getName() + "]."); + } + // 构建Select List + // 如:r_table.master_id groupedKey, SUM(r_table.aggr_column) aggregated_value + StringBuilder groupedSelectList = new StringBuilder(128); + groupedSelectList.append(groupTableName) + .append(".") + .append(groupColumnName) + .append(" ") + .append(GROUPED_KEY) + .append(", ") + .append(aggregationFunc) + .append("(") + .append(aggregationTableName) + .append(".") + .append(aggregationColumn) + .append(") ") + .append(AGGREGATED_VALUE) + .append(" "); + StringBuilder groupBy = new StringBuilder(64); + groupBy.append(groupTableName).append(".").append(groupColumnName); + return new Tuple2<>(groupedSelectList.toString(), groupBy.toString()); + } + + static class RelationStruct { + private Field relationField; + private Field masterIdField; + private Field equalOneToOneRelationField; + private BaseService service; + private BaseDaoMapper manyToManyMapper; + private Map dictMap; + private RelationDict relationDict; + private RelationOneToOne relationOneToOne; + private RelationOneToMany relationOneToMany; + private RelationManyToMany relationManyToMany; + private RelationOneToManyAggregation relationOneToManyAggregation; + private RelationManyToManyAggregation relationManyToManyAggregation; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/IBaseDictService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/IBaseDictService.java new file mode 100644 index 00000000..f2c9e049 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/IBaseDictService.java @@ -0,0 +1,82 @@ +package com.flow.demo.common.core.base.service; + +import java.io.Serializable; +import java.util.List; + +/** + * 带有缓存功能的字典Service接口。 + * + * @param Model实体对象的类型。 + * @param Model对象主键的类型。 + * @author Jerry + * @date 2021-06-06 + */ +public interface IBaseDictService extends IBaseService { + + /** + * 重新加载数据库中所有当前表数据到系统内存。 + * + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + void reloadCachedData(boolean force); + + /** + * 保存新增对象。 + * + * @param data 新增对象。 + * @return 返回新增对象。 + */ + M saveNew(M data); + + /** + * 更新数据对象。 + * + * @param data 更新的对象。 + * @param originalData 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(M data, M originalData); + + /** + * 删除指定数据。 + * + * @param id 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(K id); + + /** + * 直接从缓存池中获取所有数据。 + * + * @return 返回所有数据。 + */ + List getAllListFromCache(); + + /** + * 存入缓存。 + * + * @param data 新增或更新数据。 + */ + void putDictionaryCache(M data); + + /** + * 根据字典主键将数据从缓存中删除。 + * + * @param id 字典主键。 + */ + void removeDictionaryCache(K id); + + /** + * 根据字典对象将数据从缓存中删除。 + * + * @param data 字典数据。 + */ + void removeDictionaryCacheByModel(M data); + + /** + * 获取缓存中的数据数量。 + * + * @return 缓存中的数据总量。 + */ + int getCachedCount(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/IBaseService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/IBaseService.java new file mode 100644 index 00000000..d909614c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/base/service/IBaseService.java @@ -0,0 +1,286 @@ +package com.flow.demo.common.core.base.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.flow.demo.common.core.object.MyRelationParam; + +import java.io.Serializable; +import java.util.*; +import java.util.function.Consumer; +import java.util.function.Supplier; + +/** + * 所有Service的接口。 + * + * @param Model对象的类型。 + * @param Model对象主键的类型。 + * @author Jerry + * @date 2021-06-06 + */ +public interface IBaseService extends IService{ + + /** + * 根据过滤条件删除数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + Integer removeBy(M filter); + + /** + * 判断指定字段的数据是否存在,且仅仅存在一条记录。 + * 如果是基于主键的过滤,会直接调用existId过滤函数,提升性能。在有缓存的场景下,也可以利用缓存。 + * + * @param fieldName 待过滤的字段名(Java 字段)。 + * @param fieldValue 字段值。 + * @return 存在且仅存在一条返回true,否则false。 + */ + boolean existOne(String fieldName, Object fieldValue); + + /** + * 判断主键Id关联的数据是否存在。 + * + * @param id 主键Id。 + * @return 存在返回true,否则false。 + */ + boolean existId(K id); + + /** + * 返回符合 filterField = filterValue 条件的一条数据。 + * + * @param filterField 过滤的Java字段。 + * @param filterValue 过滤的Java字段值。 + * @return 查询后的数据对象。 + */ + M getOne(String filterField, Object filterValue); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * + * @param id 主表主键Id。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 查询结果对象。 + */ + M getByIdWithRelation(K id, MyRelationParam relationParam); + + /** + * 获取所有数据。 + * + * @return 返回所有数据。 + */ + List getAllList(); + + /** + * 获取排序后所有数据。 + * + * @param orderByProperties 需要排序的字段属性,这里使用Java对象中的属性名,而不是数据库字段名。 + * @return 返回排序后所有数据。 + */ + List getAllListByOrder(String... orderByProperties); + + /** + * 判断参数值主键集合中的所有数据,是否全部存在 + * + * @param idSet 待校验的主键集合。 + * @return 全部存在返回true,否则false。 + */ + boolean existAllPrimaryKeys(Set idSet); + + /** + * 判断参数值列表中的所有数据,是否全部存在。另外,keyName字段在数据表中必须是唯一键值,否则返回结果会出现误判。 + * + * @param inFilterField 待校验的数据字段,这里使用Java对象中的属性,如courseId,而不是数据字段名course_id + * @param inFilterValues 数据值列表。 + * @return 全部存在返回true,否则false。 + */ + boolean existUniqueKeyList(String inFilterField, Set inFilterValues); + + /** + * 返回符合主键 in (idValues) 条件的所有数据。 + * + * @param idValues 主键值集合。 + * @return 检索后的数据列表。 + */ + List getInList(Set idValues); + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @return 检索后的数据列表。 + */ + List getInList(String inFilterField, Set inFilterValues); + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据,并根据orderBy字段排序。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @param orderBy 排序字段。 + * @return 检索后的数据列表。 + */ + List getInList(String inFilterField, Set inFilterValues, String orderBy); + + /** + * 用参数对象作为过滤条件,获取数据数量。 + * + * @param filter 该方法基于mybatis 通用mapper,过滤对象中,只有被赋值的字段,才会成为where中的条件。 + * @return 返回过滤后的数据数量。 + */ + int getCountByFilter(M filter); + + /** + * 用参数对象作为过滤条件,判断是否存在过滤数据。 + * + * @param filter 该方法基于mybatis 通用mapper,过滤对象中,只有被赋值的字段,才会成为where中的条件。 + * @return 存在返回true,否则false。 + */ + boolean existByFilter(M filter); + + /** + * 用参数对象作为过滤条件,获取查询结果。 + * + * @param filter 该方法基于mybatis的通用mapper。如果参数为null,则返回全部数据。 + * @return 返回过滤后的数据。 + */ + List getListByFilter(M filter); + + /** + * 获取父主键Id下的所有子数据列表。 + * + * @param parentIdFieldName 父主键字段名字,如"courseId"。 + * @param parentId 父主键的值。 + * @return 父主键Id下的所有子数据列表。 + */ + List getListByParentId(String parentIdFieldName, K parentId); + + /** + * 根据指定的显示字段列表、过滤条件字符串和分组字符串,返回聚合计算后的查询结果。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param selectFields 选择的字段列表,多个字段逗号分隔。 + * NOTE: 如果数据表字段和Java对象字段名字不同,Java对象字段应该以别名的形式出现。 + * 如: table_column_name modelFieldName。否则无法被反射回Bean对象。 + * @param whereClause SQL常量形式的条件从句。 + * @param groupBy SQL常量形式分组字段列表,逗号分隔。 + * @return 聚合计算后的数据结果集。 + */ + List> getGroupedListByCondition(String selectFields, String whereClause, String groupBy); + + /** + * 根据指定的显示字段列表、过滤条件字符串和排序字符串,返回查询结果。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param selectList 选择的Java字段列表。如果为空表示返回全部字段。 + * @param filter 过滤对象。 + * @param whereClause SQL常量形式的条件从句。 + * @param orderBy SQL常量形式排序字段列表,逗号分隔。 + * @return 查询结果。 + */ + List getListByCondition(List selectList, M filter, String whereClause, String orderBy); + + /** + * 用指定过滤条件,计算记录数量。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param whereClause SQL常量形式的条件从句。 + * @return 返回过滤后的数据数量。 + */ + Integer getCountByCondition(String whereClause); + + /** + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + */ + void buildRelationForDataList(List resultList, MyRelationParam relationParam); + + /** + * 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + void buildRelationForDataList(List resultList, MyRelationParam relationParam, Set ignoreFields); + + /** + * 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制, + * 因此在导出数据量较大的情况下,很容易给数据库的内存、CPU和IO带来较大的压力。而通过 + * 我们的分批处理,可以极大的规避该问题的出现几率。调整batchSize的大小,也可以有效的 + * 改善运行效率。 + * 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时, + * 后面几批数据,因为skip过多而带来的效率问题。因为是单表过滤,不会给数据库带来过大的压力。 + * 之后再在主表结果集数据上进行分批级联处理。 + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。 + */ + void buildRelationForDataList(List resultList, MyRelationParam relationParam, int batchSize); + + /** + * 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制, + * 因此在导出数据量较大的情况下,很容易给数据库的内存、CPU和IO带来较大的压力。而通过 + * 我们的分批处理,可以极大的规避该问题的出现几率。调整batchSize的大小,也可以有效的 + * 改善运行效率。 + * 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时, + * 后面几批数据,因为skip过多而带来的效率问题。因为是单表过滤,不会给数据库带来过大的压力。 + * 之后再在主表结果集数据上进行分批级联处理。 + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + void buildRelationForDataList( + List resultList, MyRelationParam relationParam, int batchSize, Set ignoreFields); + + /** + * 集成所有与主表实体对象相关的关联数据对象。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param dataObject 主表实体对象。数据集成将直接作用于该对象。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param 实体对象类型。 + */ + void buildRelationForData(T dataObject, MyRelationParam relationParam); + + /** + * 集成所有与主表实体对象相关的关联数据对象。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param dataObject 主表实体对象。数据集成将直接作用于该对象。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @param 实体对象类型。 + */ + void buildRelationForData(T dataObject, MyRelationParam relationParam, Set ignoreFields); + + /** + * 仅仅在spring boot 启动后的监听器事件中调用,缓存所有service的关联关系,加速后续的数据绑定效率。 + */ + void loadRelationStruct(); + + /** + * 内部使用的批量保存方法。在使用前要确保清楚该方法的实现功能。 + * 该方法通常用于从表数据的批量更新,为了保证已有数据的主键不变,我们通常会在执行该方法前,根据主表的关联数据, + * 删除从表中的数据。之后在迭代参数dataList,并将没有主键值的对象视为新对象,该方法将为这些新对象生成主键值。 + * 其他包含主键值的对象,为已有对象,不做任何修改。填充主键后,将dataList集合中的数据批量插入到数据表。 + * + * @param dataList 待操作的数据列表。 + * @param idGenerator 主键值生成器方法。 + * @param batchInserter 批量插入方法。 + */ + void saveInternal(List dataList, Supplier idGenerator, Consumer> batchInserter); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/cache/DictionaryCache.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/cache/DictionaryCache.java new file mode 100644 index 00000000..bfbd1ce5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/cache/DictionaryCache.java @@ -0,0 +1,88 @@ +package com.flow.demo.common.core.cache; + +import java.util.List; +import java.util.Set; + +/** + * 主要用于完整缓存字典表数据的接口对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2021-06-06 + */ +public interface DictionaryCache { + + /** + * 按照数据插入的顺序返回全部字典对象的列表。 + * + * @return 全部字段数据列表。 + */ + List getAll(); + + /** + * 获取缓存中与键列表对应的对象列表。 + * + * @param keys 主键集合。 + * @return 对象列表。 + */ + List getInList(Set keys); + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + void putAll(List dataList); + + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + void reload(List dataList, boolean force); + + /** + * 从缓存中获取指定的数据。 + * + * @param key 数据的key。 + * @return 获取到的数据,如果没有返回null。 + */ + V get(K key); + + /** + * 将数据存入缓存。 + * + * @param key 通常为字典数据的主键。 + * @param object 字典数据对象。 + */ + void put(K key, V object); + + /** + * 获取缓存中数据条目的数量。 + * + * @return 返回缓存的数据数量。 + */ + int getCount(); + + /** + * 删除缓存中指定的键。 + * + * @param key 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + V invalidate(K key); + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + void invalidateSet(Set keys); + + /** + * 清空缓存。 + */ + void invalidateAll(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/cache/MapDictionaryCache.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/cache/MapDictionaryCache.java new file mode 100644 index 00000000..21b5969e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/cache/MapDictionaryCache.java @@ -0,0 +1,358 @@ +package com.flow.demo.common.core.cache; + +import com.flow.demo.common.core.exception.MapCacheAccessException; +import lombok.extern.slf4j.Slf4j; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.function.Function; + +/** + * 字典数据内存缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class MapDictionaryCache implements DictionaryCache { + + /** + * 存储字典数据的Map。 + */ + protected final LinkedHashMap dataMap = new LinkedHashMap<>(); + /** + * 获取字典主键数据的函数对象。 + */ + protected final Function idGetter; + /** + * 由于大部分场景是读取操作,所以使用读写锁提高并发的伸缩性。 + */ + protected final ReadWriteLock lock = new ReentrantReadWriteLock(); + /** + * 超时时长。单位毫秒。 + */ + protected static final long TIMEOUT = 2000L; + + /** + * 当前对象的构造器函数。 + * + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的字典内存缓存对象。 + */ + public static MapDictionaryCache create(Function idGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + return new MapDictionaryCache<>(idGetter); + } + + /** + * 构造函数。 + * + * @param idGetter 主键Id的获取函数对象。 + */ + public MapDictionaryCache(Function idGetter) { + this.idGetter = idGetter; + } + + /** + * 按照数据插入的顺序返回全部字典对象的列表。 + * + * @return 全部字段数据列表。 + */ + @Override + public List getAll() { + List resultList = new LinkedList<>(); + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + for (Map.Entry entry : dataMap.entrySet()) { + resultList.add(entry.getValue()); + } + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return resultList; + } + + /** + * 获取缓存中与键列表对应的对象列表。 + * + * @param keys 主键集合。 + * @return 对象列表。 + */ + @Override + public List getInList(Set keys) { + List resultList = new LinkedList<>(); + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + keys.forEach(key -> { + V object = dataMap.get(key); + if (object != null) { + resultList.add(object); + } + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return resultList; + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (dataList == null) { + return; + } + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList.forEach(dataObj -> { + K id = idGetter.apply(dataObj); + dataMap.put(id, dataObj); + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + if (!force && this.getCount() > 0) { + return; + } + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + dataList.forEach(dataObj -> { + K id = idGetter.apply(dataObj); + dataMap.put(id, dataObj); + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 从缓存中获取指定的数据。 + * + * @param id 数据的key。 + * @return 获取到的数据,如果没有返回null。 + */ + @Override + public V get(K id) { + if (id == null) { + return null; + } + V data; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + data = dataMap.get(id); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return data; + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param object 字典数据对象。 + */ + @Override + public void put(K id, V object) { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.put(id, object); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 获取缓存中数据条目的数量。 + * + * @return 返回缓存的数据数量。 + */ + @Override + public int getCount() { + return dataMap.size(); + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + if (id == null) { + return null; + } + String exceptionMessage; + V data; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + data = dataMap.remove(id); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return data; + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @Override + public void invalidateSet(Set keys) { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + keys.forEach(id -> { + if (id != null) { + dataMap.remove(id); + } + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/cache/MapTreeDictionaryCache.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/cache/MapTreeDictionaryCache.java new file mode 100644 index 00000000..f06d37f6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/cache/MapTreeDictionaryCache.java @@ -0,0 +1,292 @@ +package com.flow.demo.common.core.cache; + +import com.flow.demo.common.core.exception.MapCacheAccessException; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; +import lombok.extern.slf4j.Slf4j; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.function.Function; + +/** + * 树形字典数据内存缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class MapTreeDictionaryCache extends MapDictionaryCache { + + /** + * 树形数据存储对象。 + */ + private final Multimap allTreeMap = LinkedHashMultimap.create(); + /** + * 获取字典父主键数据的函数对象。 + */ + protected final Function parentIdGetter; + + /** + * 当前对象的构造器函数。 + * + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的树形字典内存缓存对象。 + */ + public static MapTreeDictionaryCache create(Function idGetter, Function parentIdGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + if (parentIdGetter == null) { + throw new IllegalArgumentException("ParentIdGetter can't be NULL."); + } + return new MapTreeDictionaryCache<>(idGetter, parentIdGetter); + } + + /** + * 构造函数。 + * + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + */ + public MapTreeDictionaryCache(Function idGetter, Function parentIdGetter) { + super(idGetter); + this.parentIdGetter = parentIdGetter; + } + + + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + if (!force && this.getCount() > 0) { + return; + } + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + allTreeMap.clear(); + dataList.forEach(data -> { + K id = idGetter.apply(data); + dataMap.put(id, data); + K parentId = parentIdGetter.apply(data); + allTreeMap.put(parentId, data); + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 获取该父主键的子数据列表。 + * + * @param parentId 父主键Id。 + * @return 子数据列表。 + */ + public List getListByParentId(K parentId) { + List resultList = new LinkedList<>(); + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + resultList.addAll(allTreeMap.get(parentId)); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return resultList; + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (dataList == null) { + return; + } + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList.forEach(data -> { + K id = idGetter.apply(data); + dataMap.put(id, data); + K parentId = parentIdGetter.apply(data); + allTreeMap.remove(parentId, data); + allTreeMap.put(parentId, data); + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param data 字典数据对象。 + */ + @Override + public void put(K id, V data) { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.put(id, data); + K parentId = parentIdGetter.apply(data); + allTreeMap.remove(parentId, data); + allTreeMap.put(parentId, data); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + V v; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + v = dataMap.remove(id); + if (v != null) { + K parentId = parentIdGetter.apply(v); + allTreeMap.remove(parentId, v); + } + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return v; + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @Override + public void invalidateSet(Set keys) { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + keys.forEach(id -> { + if (id != null) { + V data = dataMap.remove(id); + if (data != null) { + K parentId = parentIdGetter.apply(data); + allTreeMap.remove(parentId, data); + } + } + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + allTreeMap.clear(); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/CommonWebMvcConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/CommonWebMvcConfig.java new file mode 100644 index 00000000..02c1bbf3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/CommonWebMvcConfig.java @@ -0,0 +1,67 @@ +package com.flow.demo.common.core.config; + +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.support.config.FastJsonConfig; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import com.flow.demo.common.core.interceptor.MyRequestArgumentResolver; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +/** + * 所有的项目拦截器、参数解析器、消息对象转换器都在这里集中配置。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +public class CommonWebMvcConfig implements WebMvcConfigurer { + + @Bean + public MethodValidationPostProcessor methodValidationPostProcessor() { + return new MethodValidationPostProcessor(); + } + + @Override + public void addArgumentResolvers(List argumentResolvers) { + // 添加MyRequestBody参数解析器 + argumentResolvers.add(new MyRequestArgumentResolver()); + } + + @Bean + public HttpMessageConverter responseBodyConverter() { + return new StringHttpMessageConverter(StandardCharsets.UTF_8); + } + + @Bean + public FastJsonHttpMessageConverter fastJsonHttpMessageConverters() { + FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); + List supportedMediaTypes = new ArrayList<>(); + supportedMediaTypes.add(MediaType.APPLICATION_JSON); + supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); + fastConverter.setSupportedMediaTypes(supportedMediaTypes); + FastJsonConfig fastJsonConfig = new FastJsonConfig(); + fastJsonConfig.setSerializerFeatures( + SerializerFeature.PrettyFormat, + SerializerFeature.DisableCircularReferenceDetect, + SerializerFeature.IgnoreNonFieldGetter); + fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); + fastConverter.setFastJsonConfig(fastJsonConfig); + return fastConverter; + } + + @Override + public void configureMessageConverters(List> converters) { + converters.add(responseBodyConverter()); + converters.add(fastJsonHttpMessageConverters()); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/DataSourceContextHolder.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/DataSourceContextHolder.java new file mode 100644 index 00000000..ccc5700c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/DataSourceContextHolder.java @@ -0,0 +1,52 @@ +package com.flow.demo.common.core.config; + +/** + * 通过线程本地存储的方式,保存当前数据库操作所需的数据源类型,动态数据源会根据该值,进行动态切换。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class DataSourceContextHolder { + + private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + + /** + * 设置数据源类型。 + * + * @param type 数据源类型 + * @return 原有数据源类型,如果第一次设置则返回null。 + */ + public static Integer setDataSourceType(Integer type) { + Integer datasourceType = CONTEXT_HOLDER.get(); + CONTEXT_HOLDER.set(type); + return datasourceType; + } + + /** + * 获取当前数据库操作执行线程的数据源类型,同时由动态数据源的路由函数调用。 + * + * @return 数据源类型。 + */ + public static Integer getDataSourceType() { + return CONTEXT_HOLDER.get(); + } + + /** + * 清除线程本地变量,以免内存泄漏。 + + * @param originalType 原有的数据源类型,如果该值为null,则情况本地化变量。 + */ + public static void unset(Integer originalType) { + if (originalType == null) { + CONTEXT_HOLDER.remove(); + } else { + CONTEXT_HOLDER.set(originalType); + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private DataSourceContextHolder() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/DynamicDataSource.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/DynamicDataSource.java new file mode 100644 index 00000000..88d93205 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/DynamicDataSource.java @@ -0,0 +1,17 @@ +package com.flow.demo.common.core.config; + +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +/** + * 动态数据源对象。当存在多个数据连接时使用。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class DynamicDataSource extends AbstractRoutingDataSource { + + @Override + protected Object determineCurrentLookupKey() { + return DataSourceContextHolder.getDataSourceType(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/EncryptConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/EncryptConfig.java new file mode 100644 index 00000000..4d91b5cf --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/EncryptConfig.java @@ -0,0 +1,20 @@ +package com.flow.demo.common.core.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +/** + * 目前用于用户密码加密,UAA接入应用客户端的client_secret加密。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +public class EncryptConfig { + + @Bean + public BCryptPasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/RestTemplateConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/RestTemplateConfig.java new file mode 100644 index 00000000..526e6127 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/RestTemplateConfig.java @@ -0,0 +1,64 @@ +package com.flow.demo.common.core.config; + +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.client.DefaultResponseErrorHandler; +import org.springframework.web.client.RestOperations; +import org.springframework.web.client.RestTemplate; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * RestTemplate连接池配置对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +public class RestTemplateConfig { + private static final int MAX_TOTAL_CONNECTION = 50; + private static final int MAX_CONNECTION_PER_ROUTE = 20; + private static final int CONNECTION_TIMEOUT = 20000; + private static final int READ_TIMEOUT = 30000; + + @Bean + @ConditionalOnMissingBean({RestOperations.class, RestTemplate.class}) + public RestTemplate restTemplate() { + RestTemplate restTemplate = new RestTemplate(createFactory()); + List> messageConverters = restTemplate.getMessageConverters(); + messageConverters.removeIf( + c -> c instanceof StringHttpMessageConverter || c instanceof MappingJackson2HttpMessageConverter); + messageConverters.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); + messageConverters.add(new FastJsonHttpMessageConverter()); + restTemplate.setErrorHandler(new DefaultResponseErrorHandler() { + @Override + public void handleError(ClientHttpResponse response) throws IOException { + // 防止400+和500等错误被直接抛出异常,这里避开了缺省处理方式,所有的错误均交给业务代码处理。 + } + }); + return restTemplate; + } + + private ClientHttpRequestFactory createFactory() { + HttpClient httpClient = HttpClientBuilder.create() + .setMaxConnTotal(MAX_TOTAL_CONNECTION) + .setMaxConnPerRoute(MAX_CONNECTION_PER_ROUTE) + .build(); + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient); + factory.setReadTimeout(READ_TIMEOUT); + factory.setConnectTimeout(CONNECTION_TIMEOUT); + return factory; + } +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/TomcatConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/TomcatConfig.java new file mode 100644 index 00000000..a143b8bd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/config/TomcatConfig.java @@ -0,0 +1,39 @@ +package com.flow.demo.common.core.config; + +import org.apache.tomcat.util.descriptor.web.SecurityCollection; +import org.apache.tomcat.util.descriptor.web.SecurityConstraint; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * tomcat配置对象。当前配置禁用了PUT和DELETE方法,防止渗透攻击。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +public class TomcatConfig { + + @Bean + public TomcatServletWebServerFactory servletContainer() { + TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); + factory.addContextCustomizers(context -> { + SecurityConstraint securityConstraint = new SecurityConstraint(); + securityConstraint.setUserConstraint("CONFIDENTIAL"); + SecurityCollection collection = new SecurityCollection(); + collection.addPattern("/*"); + collection.addMethod("HEAD"); + collection.addMethod("PUT"); + collection.addMethod("PATCH"); + collection.addMethod("DELETE"); + collection.addMethod("TRACE"); + collection.addMethod("COPY"); + collection.addMethod("SEARCH"); + collection.addMethod("PROPFIND"); + securityConstraint.addCollection(collection); + context.addConstraint(securityConstraint); + }); + return factory; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/AggregationType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/AggregationType.java new file mode 100644 index 00000000..75f4b647 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/AggregationType.java @@ -0,0 +1,81 @@ +package com.flow.demo.common.core.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 聚合计算的常量类型对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class AggregationType { + + /** + * sum 计数 + */ + public static final int SUM = 0; + /** + * count 汇总 + */ + public static final int COUNT = 1; + /** + * average 平均值 + */ + public static final int AVG = 2; + /** + * min 最小值 + */ + public static final int MIN = 3; + /** + * max 最大值 + */ + public static final int MAX = 4; + + private static final Map DICT_MAP = new HashMap<>(5); + static { + DICT_MAP.put(SUM, "累计总和"); + DICT_MAP.put(COUNT, "数量总和"); + DICT_MAP.put(AVG, "平均值"); + DICT_MAP.put(MIN, "最小值"); + DICT_MAP.put(MAX, "最大值"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 获取与SQL对应的聚合函数字符串名称。 + * + * @return 聚合函数名称。 + */ + public static String getAggregationFunction(Integer aggregationType) { + switch (aggregationType) { + case COUNT: + return "COUNT"; + case AVG: + return "AVG"; + case SUM: + return "SUM"; + case MAX: + return "MAX"; + case MIN: + return "MIN"; + default: + throw new IllegalArgumentException("无效的聚合类型!"); + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private AggregationType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/AppDeviceType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/AppDeviceType.java new file mode 100644 index 00000000..6e56974b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/AppDeviceType.java @@ -0,0 +1,59 @@ +package com.flow.demo.common.core.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * App 登录的设备类型。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class AppDeviceType { + + /** + * 移动端 (如果不考虑区分android或ios的,可以使用该值) + */ + public static final int MOBILE = 0; + /** + * android + */ + public static final int ANDROID = 1; + /** + * iOS + */ + public static final int IOS = 2; + /** + * 微信公众号和小程序 + */ + public static final int WEIXIN = 3; + /** + * PC WEB + */ + public static final int WEB = 4; + + private static final Map DICT_MAP = new HashMap<>(5); + static { + DICT_MAP.put(MOBILE, "移动端"); + DICT_MAP.put(ANDROID, "Android"); + DICT_MAP.put(IOS, "iOS"); + DICT_MAP.put(WEIXIN, "微信"); + DICT_MAP.put(WEB, "PC WEB"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private AppDeviceType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/ApplicationConstant.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/ApplicationConstant.java new file mode 100644 index 00000000..8bbc1238 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/ApplicationConstant.java @@ -0,0 +1,85 @@ +package com.flow.demo.common.core.constant; + +/** + * 应用程序的常量声明对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class ApplicationConstant { + + /** + * 数据同步使用的缺省消息队列主题名称。 + */ + public static final String DEFAULT_DATA_SYNC_TOPIC = "DemoFlow"; + /** + * 全量数据同步中,新增数据对象的键名称。 + */ + public static final String DEFAULT_FULL_SYNC_DATA_KEY = "data"; + /** + * 全量数据同步中,原有数据对象的键名称。 + */ + public static final String DEFAULT_FULL_SYNC_OLD_DATA_KEY = "oldData"; + /** + * 全量数据同步中,数据对象主键的键名称。 + */ + public static final String DEFAULT_FULL_SYNC_ID_KEY = "id"; + /** + * 为字典表数据缓存时,缓存名称的固定后缀。 + */ + public static final String DICT_CACHE_NAME_SUFFIX = "-DICT"; + /** + * 为树形字典表数据缓存时,缓存名称的固定后缀。 + */ + public static final String TREE_DICT_CACHE_NAME_SUFFIX = "-TREE-DICT"; + /** + * 图片文件上传的父目录。 + */ + public static final String UPLOAD_IMAGE_PARENT_PATH = "image"; + /** + * 附件文件上传的父目录。 + */ + public static final String UPLOAD_ATTACHMENT_PARENT_PATH = "attachment"; + /** + * CSV文件扩展名。 + */ + public static final String CSV_EXT = "csv"; + /** + * XLSX文件扩展名。 + */ + public static final String XLSX_EXT = "xlsx"; + /** + * 统计分类计算时,按天聚合计算的常量值。(前端在MyOrderParam和MyGroupParam中传给后台) + */ + public static final String DAY_AGGREGATION = "day"; + /** + * 统计分类计算时,按月聚合计算的常量值。(前端在MyOrderParam和MyGroupParam中传给后台) + */ + public static final String MONTH_AGGREGATION = "month"; + /** + * 统计分类计算时,按年聚合计算的常量值。(前端在MyOrderParam和MyGroupParam中传给后台) + */ + public static final String YEAR_AGGREGATION = "year"; + /** + * 请求头跟踪id名。 + */ + public static final String HTTP_HEADER_TRACE_ID = "traceId"; + /** + * 操作日志的数据源类型。仅当前服务为多数据源时使用。 + * 在common-log模块中,SysOperationLogServiceImpl的MyDataSource注解一定要使用该参数。 + * 在多数据源的业务服务中,DataSourceType的常量一定要包含该值,多数据源的配置中,也一定要有与该值匹配的数据源Bean。 + */ + public static final int OPERATION_LOG_DATASOURCE_TYPE = 1000; + /** + * 重要说明:该值为项目生成后的缺省密钥,仅为使用户可以快速上手并跑通流程。 + * 在实际的应用中,一定要为不同的项目或服务,自行生成公钥和私钥,并将 PRIVATE_KEY 的引用改为服务的配置项。 + * 密钥的生成方式,可通过执行common.core.util.RsaUtil类的main函数动态生成。 + */ + public static final String PRIVATE_KEY = + "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKkLhAydtOtA4WuIkkIIUVaGWu4ElOEAQF9GTulHHWOwCHI1UvcKolvS1G+mdsKcmGtEAQ92AUde/kDRGu8Wn7kLDtCgUfo72soHz7Qfv5pVB4ohMxQd/9cxeKjKbDoirhB9Z3xGF20zUozp4ZPLxpTtI7azr0xzUtd5+D/HfLDrAgMBAAECgYEApESZhDz4YyeAJiPnpJ06lS8oS2VOWzsIUs0av5uoloeoHXtt7Lx7u2kroHeNrl3Hy2yg7ypH4dgQkGHin3VHrVAgjG3TxhgBXIqqntzzk2AGJKBeIIkRX86uTvtKZyp3flUgcwcGmpepAHS1V1DPY3aVYvbcqAmoL6DX6VYN0NECQQDQUitMdC76lEtAr5/ywS0nrZJDo6U7eQ7ywx/eiJ+YmrSye8oorlAj1VBWG+Cl6jdHOHtTQyYv/tu71fjzQiJTAkEAz7wb47/vcSUpNWQxItFpXz0o6rbJh71xmShn1AKP7XptOVZGlW9QRYEzHabV9m/DHqI00cMGhHrWZAhCiTkUCQJAFsJjaJ7o4weAkTieyO7B+CvGZw1h5/V55Jvcx3s1tH5yb22G0Jr6tm9/r2isSnQkReutzZLwgR3e886UvD7lcQJAAUcD2OOuQkDbPwPNtYwaHMbQgJj9JkOI9kskUE5vuiMdltOr/XFAyhygRtdmy2wmhAK1VnDfkmL6/IR8fEGImQJABOB0KCalb0M8CPnqqHzozrD8gPObnIIr4aVvLIPATN2g7MM2N6F7JbI4RZFiKa92LV6bhQCY8OvHi5K2cgFpbw=="; + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ApplicationConstant() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/ErrorCodeEnum.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/ErrorCodeEnum.java new file mode 100644 index 00000000..7c676cb9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/ErrorCodeEnum.java @@ -0,0 +1,84 @@ +package com.flow.demo.common.core.constant; + +/** + * 返回应答中的错误代码和错误信息。 + * + * @author Jerry + * @date 2021-06-06 + */ +public enum ErrorCodeEnum { + + /** + * 没有错误 + */ + NO_ERROR("没有错误"), + /** + * 未处理的异常! + */ + UNHANDLED_EXCEPTION("未处理的异常!"), + + ARGUMENT_NULL_EXIST("数据验证失败,接口调用参数存在空值,请核对!"), + ARGUMENT_PK_ID_NULL("数据验证失败,接口调用主键Id参数为空,请核对!"), + INVALID_ARGUMENT_FORMAT("数据验证失败,不合法的参数格式,请核对!"), + INVALID_STATUS_ARGUMENT("数据验证失败,无效的状态参数值,请核对!"), + UPLOAD_FAILED("数据验证失败,数据上传失败!"), + INVALID_UPLOAD_FIELD("数据验证失败,该字段不支持数据上传!"), + INVALID_UPLOAD_STORE_TYPE("数据验证失败,并不支持上传存储类型!"), + INVALID_UPLOAD_FILE_ARGUMENT("数据验证失败,上传文件参数错误,请核对!"), + INVALID_UPLOAD_FILE_IOERROR("上传文件写入失败,请联系管理员!"), + UNAUTHORIZED_LOGIN("当前用户尚未登录或登录已超时,请重新登录!"), + UNAUTHORIZED_USER_PERMISSION("权限验证失败,当前用户不能访问该接口,请核对!"), + NO_ACCESS_PERMISSION("当前用户没有访问权限,请核对!"), + NO_OPERATION_PERMISSION("当前用户没有操作权限,请核对!"), + + PASSWORD_ERR("密码错误,请重试!"), + INVALID_USERNAME_PASSWORD("用户名或密码错误,请重试!"), + INVALID_ACCESS_TOKEN("无效的用户访问令牌!"), + INVALID_USER_STATUS("用户状态错误,请刷新后重试!"), + INVALID_TENANT_CODE("指定的租户编码并不存在,请刷新后重试!"), + INVALID_TENANT_STATUS("当前租户为不可用状态,请刷新后重试!"), + INVALID_USER_TENANT("当前用户并不属于当前租户,请刷新后重试!"), + + HAS_CHILDREN_DATA("数据验证失败,子数据存在,请刷新后重试!"), + DATA_VALIDATED_FAILED("数据验证失败,请核对!"), + UPLOAD_FILE_FAILED("文件上传失败,请联系管理员!"), + DATA_SAVE_FAILED("数据保存失败,请联系管理员!"), + DATA_ACCESS_FAILED("数据访问失败,请联系管理员!"), + DATA_PERM_ACCESS_FAILED("数据访问失败,您没有该页面的数据访问权限!"), + DUPLICATED_UNIQUE_KEY("数据保存失败,存在重复数据,请核对!"), + DATA_NOT_EXIST("数据不存在,请刷新后重试!"), + DATA_PARENT_LEVEL_ID_NOT_EXIST("数据验证失败,父级别关联Id不存在,请刷新后重试!"), + DATA_PARENT_ID_NOT_EXIST("数据验证失败,ParentId不存在,请核对!"), + INVALID_RELATED_RECORD_ID("数据验证失败,关联数据并不存在,请刷新后重试!"), + INVALID_DATA_MODEL("数据验证失败,无效的数据实体对象!"), + INVALID_DATA_FIELD("数据验证失败,无效的数据实体对象字段!"), + INVALID_CLASS_FIELD("数据验证失败,无效的类对象字段!"), + SERVER_INTERNAL_ERROR("服务器内部错误,请联系管理员!"), + REDIS_CACHE_ACCESS_TIMEOUT("Redis缓存数据访问超时,请刷新后重试!"), + REDIS_CACHE_ACCESS_STATE_ERROR("Redis缓存数据访问状态错误,请刷新后重试!"); + + // 下面的枚举值为特定枚举值,即开发者可以根据自己的项目需求定义更多的非通用枚举值 + + /** + * 构造函数。 + * + * @param errorMessage 错误消息。 + */ + ErrorCodeEnum(String errorMessage) { + this.errorMessage = errorMessage; + } + + /** + * 错误信息。 + */ + private final String errorMessage; + + /** + * 获取错误信息。 + * + * @return 错误信息。 + */ + public String getErrorMessage() { + return errorMessage; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/GlobalDeletedFlag.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/GlobalDeletedFlag.java new file mode 100644 index 00000000..052e3385 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/constant/GlobalDeletedFlag.java @@ -0,0 +1,25 @@ +package com.flow.demo.common.core.constant; + +/** + * 数据记录逻辑删除标记常量。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class GlobalDeletedFlag { + + /** + * 表示数据表记录已经删除 + */ + public static final int DELETED = -1; + /** + * 数据记录正常 + */ + public static final int NORMAL = 1; + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private GlobalDeletedFlag() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/DataValidationException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/DataValidationException.java new file mode 100644 index 00000000..97905b08 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/DataValidationException.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.core.exception; + +/** + * 数据验证失败的自定义异常。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class DataValidationException extends RuntimeException { + + /** + * 构造函数。 + */ + public DataValidationException() { + + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public DataValidationException(String msg) { + super(msg); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidClassFieldException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidClassFieldException.java new file mode 100644 index 00000000..d58f347d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidClassFieldException.java @@ -0,0 +1,30 @@ +package com.flow.demo.common.core.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无效的类对象字段的自定义异常。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class InvalidClassFieldException extends RuntimeException { + + private final String className; + private final String fieldName; + + /** + * 构造函数。 + * + * @param className 对象名。 + * @param fieldName 字段名。 + */ + public InvalidClassFieldException(String className, String fieldName) { + super("Invalid FieldName [" + fieldName + "] in Class [" + className + "]."); + this.className = className; + this.fieldName = fieldName; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidDataFieldException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidDataFieldException.java new file mode 100644 index 00000000..20b24849 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidDataFieldException.java @@ -0,0 +1,30 @@ +package com.flow.demo.common.core.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无效的实体对象字段的自定义异常。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class InvalidDataFieldException extends RuntimeException { + + private final String modelName; + private final String fieldName; + + /** + * 构造函数。 + * + * @param modelName 实体对象名。 + * @param fieldName 字段名。 + */ + public InvalidDataFieldException(String modelName, String fieldName) { + super("Invalid FieldName [" + fieldName + "] in Model Class [" + modelName + "]."); + this.modelName = modelName; + this.fieldName = fieldName; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidDataModelException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidDataModelException.java new file mode 100644 index 00000000..aa4d481c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidDataModelException.java @@ -0,0 +1,27 @@ +package com.flow.demo.common.core.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无效的实体对象的自定义异常。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class InvalidDataModelException extends RuntimeException { + + private final String modelName; + + /** + * 构造函数。 + * + * @param modelName 实体对象名。 + */ + public InvalidDataModelException(String modelName) { + super("Invalid Model Class [" + modelName + "]."); + this.modelName = modelName; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidRedisModeException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidRedisModeException.java new file mode 100644 index 00000000..40230035 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/InvalidRedisModeException.java @@ -0,0 +1,27 @@ +package com.flow.demo.common.core.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无效的Redis模式的自定义异常。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class InvalidRedisModeException extends RuntimeException { + + private final String mode; + + /** + * 构造函数。 + * + * @param mode 错误的模式。 + */ + public InvalidRedisModeException(String mode) { + super("Invalid Redis Mode [" + mode + "], only supports [single/cluster/sentinel/master_slave]"); + this.mode = mode; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/MapCacheAccessException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/MapCacheAccessException.java new file mode 100644 index 00000000..8cfe48f9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/MapCacheAccessException.java @@ -0,0 +1,20 @@ +package com.flow.demo.common.core.exception; + +/** + * 内存缓存访问失败。比如:获取分布式数据锁超时、等待线程中断等。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class MapCacheAccessException extends RuntimeException { + + /** + * 构造函数。 + * + * @param msg 错误信息。 + * @param cause 原始异常。 + */ + public MapCacheAccessException(String msg, Throwable cause) { + super(msg, cause); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/MyRuntimeException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/MyRuntimeException.java new file mode 100644 index 00000000..c1399cbc --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/MyRuntimeException.java @@ -0,0 +1,36 @@ +package com.flow.demo.common.core.exception; + +/** + * 自定义的运行时异常,在需要抛出运行时异常时,可使用该异常。 + * NOTE:主要是为了避免SonarQube进行代码质量扫描时,给出警告。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class MyRuntimeException extends RuntimeException { + + /** + * 构造函数。 + */ + public MyRuntimeException() { + + } + + /** + * 构造函数。 + * + * @param throwable 引发异常对象。 + */ + public MyRuntimeException(Throwable throwable) { + super(throwable); + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public MyRuntimeException(String msg) { + super(msg); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/NoDataAffectException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/NoDataAffectException.java new file mode 100644 index 00000000..e755dc25 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/NoDataAffectException.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.core.exception; + +/** + * 没有数据被修改的自定义异常。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class NoDataAffectException extends RuntimeException { + + /** + * 构造函数。 + */ + public NoDataAffectException() { + + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public NoDataAffectException(String msg) { + super(msg); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/NoDataPermException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/NoDataPermException.java new file mode 100644 index 00000000..e156ee0a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/NoDataPermException.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.core.exception; + +/** + * 没有数据访问权限的自定义异常。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class NoDataPermException extends RuntimeException { + + /** + * 构造函数。 + */ + public NoDataPermException() { + + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public NoDataPermException(String msg) { + super(msg); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/RedisCacheAccessException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/RedisCacheAccessException.java new file mode 100644 index 00000000..c0682b42 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/exception/RedisCacheAccessException.java @@ -0,0 +1,20 @@ +package com.flow.demo.common.core.exception; + +/** + * Redis缓存访问失败。比如:获取分布式数据锁超时、等待线程中断等。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class RedisCacheAccessException extends RuntimeException { + + /** + * 构造函数。 + * + * @param msg 错误信息。 + * @param cause 原始异常。 + */ + public RedisCacheAccessException(String msg, Throwable cause) { + super(msg, cause); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/interceptor/MyRequestArgumentResolver.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/interceptor/MyRequestArgumentResolver.java new file mode 100644 index 00000000..329edd08 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/interceptor/MyRequestArgumentResolver.java @@ -0,0 +1,234 @@ +package com.flow.demo.common.core.interceptor; + +import cn.hutool.core.convert.Convert; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.annotation.MyRequestBody; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.core.MethodParameter; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.lang.NonNull; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; +import java.util.*; + +/** + * MyRequestBody解析器 + * 解决的问题: + * 1、单个字符串等包装类型都要写一个对象才可以用@RequestBody接收; + * 2、多个对象需要封装到一个对象里才可以用@RequestBody接收。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver { + + private static final String JSONBODY_ATTRIBUTE = "MY_REQUEST_BODY_ATTRIBUTE_XX"; + + private static final Set> CLASS_SET = new HashSet<>(); + + static { + CLASS_SET.add(Integer.class); + CLASS_SET.add(Long.class); + CLASS_SET.add(Short.class); + CLASS_SET.add(Float.class); + CLASS_SET.add(Double.class); + CLASS_SET.add(Boolean.class); + CLASS_SET.add(Byte.class); + CLASS_SET.add(BigDecimal.class); + CLASS_SET.add(Character.class); + } + + /** + * 设置支持的方法参数类型。 + * + * @param parameter 方法参数。 + * @return 支持的类型。 + */ + @Override + public boolean supportsParameter(@NonNull MethodParameter parameter) { + return parameter.hasParameterAnnotation(MyRequestBody.class); + } + + /** + * 参数解析,利用fastjson。 + * 注意:非基本类型返回null会报空指针异常,要通过反射或者JSON工具类创建一个空对象。 + */ + @Override + public Object resolveArgument( + @NonNull MethodParameter parameter, + ModelAndViewContainer mavContainer, + @NonNull NativeWebRequest webRequest, + WebDataBinderFactory binderFactory) throws Exception { + HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class); + String contentType = servletRequest.getContentType(); + if (!HttpMethod.POST.name().equals(servletRequest.getMethod())) { + throw new IllegalArgumentException("Only POST method can be applied @MyRequestBody annotation!"); + } + if (!StringUtils.containsIgnoreCase(contentType, MediaType.APPLICATION_JSON_VALUE)) { + throw new IllegalArgumentException( + "Only application/json Content-Type can be applied @MyRequestBody annotation!"); + } + // 根据@MyRequestBody注解value作为json解析的key + MyRequestBody parameterAnnotation = parameter.getParameterAnnotation(MyRequestBody.class); + JSONObject jsonObject = getRequestBody(webRequest); + if (jsonObject == null) { + if (parameterAnnotation.required()) { + throw new IllegalArgumentException("Request Body is EMPTY!"); + } + return null; + } + String key = parameterAnnotation.value(); + if (StringUtils.isBlank(key)) { + key = parameter.getParameterName(); + } + Object value = jsonObject.get(key); + if (value == null) { + if (parameterAnnotation.required()) { + throw new IllegalArgumentException(String.format("Required parameter %s is not present!", key)); + } + return null; + } + // 获取参数类型。 + Class parameterType = parameter.getParameterType(); + // 基本类型 + if (parameterType.isPrimitive()) { + return parsePrimitive(parameterType.getName(), value); + } + // 基本类型包装类 + if (isBasicDataTypes(parameterType)) { + return parseBasicTypeWrapper(parameterType, value); + } else if (parameterType == String.class) { + // 字符串类型 + return value.toString(); + } + // 数组类型 + if (value instanceof JSONArray) { + return parseArray(parameterType, parameterAnnotation.elementType(), key, value); + } + // 其他复杂对象 + return JSON.toJavaObject((JSONObject) value, parameterType); + } + + @SuppressWarnings("unchecked") + private Object parseArray(Class parameterType, Class elementType, String key, Object value) + throws IllegalAccessException, InstantiationException { + Object o; + if (!parameterType.equals(List.class)) { + o = parameterType.newInstance(); + parameterType = (Class) ((ParameterizedType) + parameterType.getGenericSuperclass()).getActualTypeArguments()[0]; + } else { + parameterType = elementType; + if (parameterType.equals(Class.class)) { + throw new IllegalArgumentException( + String.format("List Type parameter %s MUST have elementType!", key)); + } + o = new LinkedList<>(); + } + if (!(o instanceof List)) { + throw new IllegalArgumentException(String.format("Required parameter %s is List!", key)); + } + ((List) o).addAll(((JSONArray) value).toJavaList(parameterType)); + return o; + } + + private Object parsePrimitive(String parameterTypeName, Object value) { + final String booleanTypeName = "boolean"; + if (booleanTypeName.equals(parameterTypeName)) { + return Boolean.valueOf(value.toString()); + } + final String intTypeName = "int"; + if (intTypeName.equals(parameterTypeName)) { + return Integer.valueOf(value.toString()); + } + final String charTypeName = "char"; + if (charTypeName.equals(parameterTypeName)) { + return value.toString().charAt(0); + } + final String shortTypeName = "short"; + if (shortTypeName.equals(parameterTypeName)) { + return Short.valueOf(value.toString()); + } + final String longTypeName = "long"; + if (longTypeName.equals(parameterTypeName)) { + return Long.valueOf(value.toString()); + } + final String floatTypeName = "float"; + if (floatTypeName.equals(parameterTypeName)) { + return Float.valueOf(value.toString()); + } + final String doubleTypeName = "double"; + if (doubleTypeName.equals(parameterTypeName)) { + return Double.valueOf(value.toString()); + } + final String byteTypeName = "byte"; + if (byteTypeName.equals(parameterTypeName)) { + return Byte.valueOf(value.toString()); + } + return null; + } + + private Object parseBasicTypeWrapper(Class parameterType, Object value) { + if (Number.class.isAssignableFrom(parameterType)) { + if (value instanceof String) { + return Convert.convert(parameterType, value); + } + Number number = (Number) value; + if (parameterType == Integer.class) { + return number.intValue(); + } else if (parameterType == Short.class) { + return number.shortValue(); + } else if (parameterType == Long.class) { + return number.longValue(); + } else if (parameterType == Float.class) { + return number.floatValue(); + } else if (parameterType == Double.class) { + return number.doubleValue(); + } else if (parameterType == Byte.class) { + return number.byteValue(); + } else if (parameterType == BigDecimal.class) { + if (value instanceof Double || value instanceof Float) { + return BigDecimal.valueOf(number.doubleValue()); + } else { + return BigDecimal.valueOf(number.longValue()); + } + } + } else if (parameterType == Boolean.class) { + return value; + } else if (parameterType == Character.class) { + return value.toString().charAt(0); + } + return null; + } + + private boolean isBasicDataTypes(Class clazz) { + return CLASS_SET.contains(clazz); + } + + private JSONObject getRequestBody(NativeWebRequest webRequest) throws IOException { + HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class); + // 有就直接获取 + JSONObject jsonObject = (JSONObject) webRequest.getAttribute(JSONBODY_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST); + // 没有就从请求中读取 + if (jsonObject == null) { + String jsonBody = IOUtils.toString(servletRequest.getReader()); + jsonObject = JSON.parseObject(jsonBody); + if (jsonObject != null) { + webRequest.setAttribute(JSONBODY_ATTRIBUTE, jsonObject, RequestAttributes.SCOPE_REQUEST); + } + } + return jsonObject; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/listener/LoadServiceRelationListener.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/listener/LoadServiceRelationListener.java new file mode 100644 index 00000000..abb8f85b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/listener/LoadServiceRelationListener.java @@ -0,0 +1,28 @@ +package com.flow.demo.common.core.listener; + +import com.flow.demo.common.core.base.service.BaseService; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Component +public class LoadServiceRelationListener implements ApplicationListener { + + @SuppressWarnings("all") + @Override + public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { + Map serviceMap = + applicationReadyEvent.getApplicationContext().getBeansOfType(BaseService.class); + for (Map.Entry e : serviceMap.entrySet()) { + e.getValue().loadRelationStruct(); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/CallResult.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/CallResult.java new file mode 100644 index 00000000..18599d51 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/CallResult.java @@ -0,0 +1,87 @@ +package com.flow.demo.common.core.object; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +/** + * 接口数据验证结果对象。主要是Service类使用。 + * 同时为了提升效率,减少查询次数,可以根据具体的需求,将部分验证关联对象存入data字段,以供Controller使用。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class CallResult { + + /** + * 为了优化性能,所有没有携带数据的正确结果,均可用该对象表示。 + */ + private static final CallResult OK = new CallResult(); + /** + * 是否成功标记。 + */ + private boolean success = true; + /** + * 错误信息描述。 + */ + private String errorMessage = null; + /** + * 在验证同时,仍然需要附加的关联数据对象。 + */ + private JSONObject data; + + /** + * 创建验证结果对象。 + * + * @param errorMessage 错误描述信息。 + * @return 如果参数为空,表示成功,否则返回代码错误信息的错误对象实例。 + */ + public static CallResult create(String errorMessage) { + return errorMessage == null ? ok() : error(errorMessage); + } + + /** + * 创建验证结果对象。 + * + * @param errorMessage 错误描述信息。 + * @param data 附带的数据对象。 + * @return 如果参数为空,表示成功,否则返回代码错误信息的错误对象实例。 + */ + public static CallResult create(String errorMessage, JSONObject data) { + return errorMessage == null ? ok(data) : error(errorMessage); + } + + /** + * 创建表示验证成功的对象实例。 + * + * @return 验证成功对象实例。 + */ + public static CallResult ok() { + return OK; + } + + /** + * 创建表示验证成功的对象实例。 + * + * @param data 附带的数据对象。 + * @return 验证成功对象实例。 + */ + public static CallResult ok(JSONObject data) { + CallResult result = new CallResult(); + result.data = data; + return result; + } + + /** + * 创建表示验证失败的对象实例。 + * + * @param errorMessage 错误描述。 + * @return 验证失败对象实例。 + */ + public static CallResult error(String errorMessage) { + CallResult result = new CallResult(); + result.success = false; + result.errorMessage = errorMessage; + return result; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/DummyClass.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/DummyClass.java new file mode 100644 index 00000000..44b04319 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/DummyClass.java @@ -0,0 +1,27 @@ +package com.flow.demo.common.core.object; + +/** + * 哑元对象,主要用于注解中的缺省对象占位符。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class DummyClass { + + private static final Object EMPTY_OBJECT = new Object(); + + /** + * 可以忽略的空对象。避免sonarqube的各种警告。 + * + * @return 空对象。 + */ + public static Object emptyObject() { + return EMPTY_OBJECT; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private DummyClass() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/GlobalThreadLocal.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/GlobalThreadLocal.java new file mode 100644 index 00000000..3afd7722 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/GlobalThreadLocal.java @@ -0,0 +1,52 @@ +package com.flow.demo.common.core.object; + +import cn.hutool.core.util.BooleanUtil; + +/** + * 线程本地化数据管理的工具类。可根据需求自行添加更多的线程本地化变量及其操作方法。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class GlobalThreadLocal { + + /** + * 存储数据权限过滤是否启用的线程本地化对象。 + * 目前的过滤条件,包括数据权限和租户过滤。 + */ + private static final ThreadLocal DATA_FILTER_ENABLE = ThreadLocal.withInitial(() -> Boolean.TRUE); + + /** + * 设置数据过滤是否打开。如果打开,当前Servlet线程所执行的SQL操作,均会进行数据过滤。 + * + * @param enable 打开为true,否则false。 + * @return 返回之前的状态,便于恢复。 + */ + public static boolean setDataFilter(boolean enable) { + boolean oldValue = DATA_FILTER_ENABLE.get(); + DATA_FILTER_ENABLE.set(enable); + return oldValue; + } + + /** + * 判断当前Servlet线程所执行的SQL操作,是否进行数据过滤。 + * + * @return true 进行数据权限过滤,否则false。 + */ + public static boolean enabledDataFilter() { + return BooleanUtil.isTrue(DATA_FILTER_ENABLE.get()); + } + + /** + * 清空该存储数据,主动释放线程本地化存储资源。 + */ + public static void clearDataFilter() { + DATA_FILTER_ENABLE.remove(); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private GlobalThreadLocal() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/LoginUserInfo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/LoginUserInfo.java new file mode 100644 index 00000000..da0fc1e7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/LoginUserInfo.java @@ -0,0 +1,62 @@ +package com.flow.demo.common.core.object; + +import lombok.Data; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; + +/** + * 在线登录用户信息。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ToString +@Slf4j +public class LoginUserInfo { + + /** + * 用户Id。 + */ + private Long userId; + /** + * 用户所在部门Id。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private Long deptId; + /** + * 租户Id。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private Long tenantId; + /** + * 是否为超级管理员。 + */ + private Boolean isAdmin; + /** + * 用户登录名。 + */ + private String loginName; + /** + * 用户显示名称。 + */ + private String showName; + /** + * 标识不同登录的会话Id。 + */ + private String sessionId; + /** + * 登录IP。 + */ + private String loginIp; + /** + * 登录时间。 + */ + private Date loginTime; + /** + * 登录设备类型。 + */ + private Integer deviceType; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyGroupCriteria.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyGroupCriteria.java new file mode 100644 index 00000000..5ecc7da3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyGroupCriteria.java @@ -0,0 +1,24 @@ +package com.flow.demo.common.core.object; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * Mybatis Mapper.xml中所需的分组条件对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@AllArgsConstructor +public class MyGroupCriteria { + + /** + * GROUP BY 从句后面的参数。 + */ + private String groupBy; + /** + * SELECT 从句后面的分组显示字段。 + */ + private String groupSelect; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyGroupParam.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyGroupParam.java new file mode 100644 index 00000000..b46c57e4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyGroupParam.java @@ -0,0 +1,170 @@ +package com.flow.demo.common.core.object; + +import cn.hutool.core.util.ReflectUtil; +import com.flow.demo.common.core.constant.ApplicationConstant; +import com.flow.demo.common.core.exception.InvalidClassFieldException; +import com.flow.demo.common.core.exception.InvalidDataFieldException; +import com.flow.demo.common.core.exception.InvalidDataModelException; +import com.flow.demo.common.core.util.MyModelUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +/** + * 查询分组参数请求对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EqualsAndHashCode(callSuper = true) +@Slf4j +@Data +public class MyGroupParam extends ArrayList { + + /** + * SQL语句的SELECT LIST中,分组字段的返回字段名称列表。 + */ + private List selectGroupFieldList; + /** + * 分组参数解析后构建的SQL语句中所需的分组数据,如GROUP BY的字段列表和SELECT LIST中的分组字段显示列表。 + */ + private MyGroupCriteria groupCriteria; + /** + * 基于分组参数对象中的数据,构建SQL中select list和group by从句可以直接使用的分组对象。 + * + * @param groupParam 分组参数对象。 + * @param modelClazz 查询表对应的主对象的Class。 + * @return SQL中所需的GROUP对象。详见MyGroupCriteria类定义。 + */ + public static MyGroupParam buildGroupBy(MyGroupParam groupParam, Class modelClazz) { + if (groupParam == null) { + return null; + } + if (modelClazz == null) { + throw new IllegalArgumentException("modelClazz Argument can't be NULL"); + } + groupParam.selectGroupFieldList = new LinkedList<>(); + StringBuilder groupByBuilder = new StringBuilder(128); + StringBuilder groupSelectBuilder = new StringBuilder(128); + int i = 0; + for (GroupInfo groupInfo : groupParam) { + GroupBaseData groupBaseData = parseGroupBaseData(groupInfo, modelClazz); + if (StringUtils.isBlank(groupBaseData.tableName)) { + throw new InvalidDataModelException(groupBaseData.modelName); + } + if (StringUtils.isBlank(groupBaseData.columnName)) { + throw new InvalidDataFieldException(groupBaseData.modelName, groupBaseData.fieldName); + } + processGroupInfo(groupInfo, groupBaseData, groupByBuilder, groupSelectBuilder); + String aliasName = StringUtils.isBlank(groupInfo.aliasName) ? groupInfo.fieldName : groupInfo.aliasName; + // selectGroupFieldList中的元素,目前只是被export操作使用。会根据集合中的元素名称匹配导出表头。 + groupParam.selectGroupFieldList.add(aliasName); + if (++i < groupParam.size()) { + groupByBuilder.append(", "); + groupSelectBuilder.append(", "); + } + } + groupParam.groupCriteria = new MyGroupCriteria(groupByBuilder.toString(), groupSelectBuilder.toString()); + return groupParam; + } + + private static GroupBaseData parseGroupBaseData(GroupInfo groupInfo, Class modelClazz) { + GroupBaseData baseData = new GroupBaseData(); + if (StringUtils.isBlank(groupInfo.fieldName)) { + throw new IllegalArgumentException("GroupInfo.fieldName can't be EMPTY"); + } + String[] stringArray = StringUtils.split(groupInfo.fieldName,'.'); + if (stringArray.length == 1) { + baseData.modelName = modelClazz.getSimpleName(); + baseData.fieldName = groupInfo.fieldName; + baseData.tableName = MyModelUtil.mapToTableName(modelClazz); + baseData.columnName = MyModelUtil.mapToColumnName(groupInfo.fieldName, modelClazz); + } else { + Field field = ReflectUtil.getField(modelClazz, stringArray[0]); + if (field == null) { + throw new InvalidClassFieldException(modelClazz.getSimpleName(), stringArray[0]); + } + Class fieldClazz = field.getType(); + baseData.modelName = fieldClazz.getSimpleName(); + baseData.fieldName = stringArray[1]; + baseData.tableName = MyModelUtil.mapToTableName(fieldClazz); + baseData.columnName = MyModelUtil.mapToColumnName(baseData.fieldName, fieldClazz); + } + return baseData; + } + + private static void processGroupInfo( + GroupInfo groupInfo, + GroupBaseData baseData, + StringBuilder groupByBuilder, + StringBuilder groupSelectBuilder) { + String tableName = baseData.tableName; + String columnName = baseData.columnName; + if (StringUtils.isNotBlank(groupInfo.dateAggregateBy)) { + groupByBuilder.append("DATE_FORMAT(").append(tableName).append(".").append(columnName); + groupSelectBuilder.append("DATE_FORMAT(").append(tableName).append(".").append(columnName); + if (ApplicationConstant.DAY_AGGREGATION.equals(groupInfo.dateAggregateBy)) { + groupByBuilder.append(", '%Y-%m-%d')"); + groupSelectBuilder.append(", '%Y-%m-%d')"); + } else if (ApplicationConstant.MONTH_AGGREGATION.equals(groupInfo.dateAggregateBy)) { + groupByBuilder.append(", '%Y-%m-01')"); + groupSelectBuilder.append(", '%Y-%m-01')"); + } else if (ApplicationConstant.YEAR_AGGREGATION.equals(groupInfo.dateAggregateBy)) { + groupByBuilder.append(", '%Y-01-01')"); + groupSelectBuilder.append(", '%Y-01-01')"); + } else { + throw new IllegalArgumentException("Illegal DATE_FORMAT for GROUP ID list."); + } + if (StringUtils.isNotBlank(groupInfo.aliasName)) { + groupSelectBuilder.append(" ").append(groupInfo.aliasName); + } else { + groupSelectBuilder.append(" ").append(columnName); + } + } else { + groupByBuilder.append(tableName).append(".").append(columnName); + groupSelectBuilder.append(tableName).append(".").append(columnName); + if (StringUtils.isNotBlank(groupInfo.aliasName)) { + groupSelectBuilder.append(" ").append(groupInfo.aliasName); + } + } + } + + /** + * 分组信息对象。 + */ + @Data + public static class GroupInfo { + /** + * Java对象的字段名。目前主要包含三种格式: + * 1. 简单的属性名称,如userId,将会直接映射到与其关联的数据库字段。表名为当前ModelClazz所对应的表名。 + * 映射结果或为 my_main_table.user_id + * 2. 一对一关联表属性,如user.userId,这里将先获取user属性的对象类型并映射到对应的表名,后面的userId为 + * user所在实体的属性。映射结果或为:my_sys_user.user_id + */ + private String fieldName; + /** + * SQL语句的Select List中,分组字段的别名。如果别名为NULL,直接取fieldName。 + */ + private String aliasName; + /** + * 如果该值不为NULL,则会对分组字段进行DATE_FORMAT函数的计算,并根据具体的值,将日期数据截取到指定的位。 + * day: 表示按照天聚合,将会截取到天。DATE_FORMAT(columnName, '%Y-%m-%d') + * month: 表示按照月聚合,将会截取到月。DATE_FORMAT(columnName, '%Y-%m-01') + * year: 表示按照年聚合,将会截取到年。DATE_FORMAT(columnName, '%Y-01-01') + */ + private String dateAggregateBy; + } + + private static class GroupBaseData { + private String modelName; + private String fieldName; + private String tableName; + private String columnName; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyOrderParam.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyOrderParam.java new file mode 100644 index 00000000..c3095e5d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyOrderParam.java @@ -0,0 +1,265 @@ +package com.flow.demo.common.core.object; + +import cn.hutool.core.util.ReflectUtil; +import com.flow.demo.common.core.constant.ApplicationConstant; +import com.flow.demo.common.core.exception.InvalidClassFieldException; +import com.flow.demo.common.core.exception.InvalidDataFieldException; +import com.flow.demo.common.core.exception.InvalidDataModelException; +import com.flow.demo.common.core.util.MyModelUtil; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Field; +import java.util.*; + +/** + * Controller参数中的排序请求对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EqualsAndHashCode(callSuper = true) +@Slf4j +@Data +public class MyOrderParam extends ArrayList { + + private static final String DICT_MAP = "DictMap."; + /** + * 基于排序对象中的JSON数据,构建SQL中order by从句可以直接使用的排序字符串。 + * + * @param orderParam 排序参数对象。 + * @param modelClazz 查询主表对应的主对象的Class。 + * @return SQL中order by从句可以直接使用的排序字符串。 + */ + public static String buildOrderBy(MyOrderParam orderParam, Class modelClazz) { + if (orderParam == null) { + return null; + } + if (modelClazz == null) { + throw new IllegalArgumentException( + "modelClazz Argument in MyOrderParam.buildOrderBy can't be NULL"); + } + int i = 0; + StringBuilder orderBy = new StringBuilder(128); + for (OrderInfo orderInfo : orderParam) { + if (StringUtils.isBlank(orderInfo.getFieldName())) { + continue; + } + OrderBaseData orderBaseData = parseOrderBaseData(orderInfo, modelClazz); + if (StringUtils.isBlank(orderBaseData.tableName)) { + throw new InvalidDataModelException(orderBaseData.modelName); + } + if (StringUtils.isBlank(orderBaseData.columnName)) { + throw new InvalidDataFieldException(orderBaseData.modelName, orderBaseData.fieldName); + } + processOrderInfo(orderInfo, orderBaseData, orderBy); + if (++i < orderParam.size()) { + orderBy.append(", "); + } + } + return orderBy.toString(); + } + + private static void processOrderInfo( + OrderInfo orderInfo, OrderBaseData orderBaseData, StringBuilder orderByBuilder) { + if (StringUtils.isNotBlank(orderInfo.dateAggregateBy)) { + orderByBuilder.append("DATE_FORMAT(") + .append(orderBaseData.tableName).append(".").append(orderBaseData.columnName); + if (ApplicationConstant.DAY_AGGREGATION.equals(orderInfo.dateAggregateBy)) { + orderByBuilder.append(", '%Y-%m-%d')"); + } else if (ApplicationConstant.MONTH_AGGREGATION.equals(orderInfo.dateAggregateBy)) { + orderByBuilder.append(", '%Y-%m-01')"); + } else if (ApplicationConstant.YEAR_AGGREGATION.equals(orderInfo.dateAggregateBy)) { + orderByBuilder.append(", '%Y-01-01')"); + } else { + throw new IllegalArgumentException("Illegal DATE_FORMAT for GROUP ID list."); + } + } else { + orderByBuilder.append(orderBaseData.tableName).append(".").append(orderBaseData.columnName); + } + if (orderInfo.asc != null && !orderInfo.asc) { + orderByBuilder.append(" DESC"); + } + } + + private static OrderBaseData parseOrderBaseData(OrderInfo orderInfo, Class modelClazz) { + OrderBaseData orderBaseData = new OrderBaseData(); + orderBaseData.fieldName = StringUtils.substringBefore(orderInfo.fieldName, DICT_MAP); + String[] stringArray = StringUtils.split(orderBaseData.fieldName, '.'); + if (stringArray.length == 1) { + orderBaseData.modelName = modelClazz.getSimpleName(); + orderBaseData.tableName = MyModelUtil.mapToTableName(modelClazz); + orderBaseData.columnName = MyModelUtil.mapToColumnName(orderBaseData.fieldName, modelClazz); + } else { + Field field = ReflectUtil.getField(modelClazz, stringArray[0]); + if (field == null) { + throw new InvalidClassFieldException(modelClazz.getSimpleName(), stringArray[0]); + } + Class fieldClazz = field.getType(); + orderBaseData.modelName = fieldClazz.getSimpleName(); + orderBaseData.fieldName = stringArray[1]; + orderBaseData.tableName = MyModelUtil.mapToTableName(fieldClazz); + orderBaseData.columnName = MyModelUtil.mapToColumnName(orderBaseData.fieldName, fieldClazz); + } + return orderBaseData; + } + + /** + * 在排序列表中,可能存在基于指定表字段的排序,该函数将获取指定表的所有排序字段。 + * 返回的字符串,可直接用于SQL中的ORDER BY从句。 + * + * @param orderParam 排序参数对象。 + * @param modelClazz 查询主表对应的主对象的Class。 + * @param relationModelName 与关联表对应的Model的名称,如my_course_paper表应对的Java对象CoursePaper。 + * 如果该值为null或空字符串,则获取所有主表的排序字段。 + * @return 返回的是表字段,而非Java对象的属性,多个字段之间逗号分隔。 + */ + public static String getOrderClauseByModelName( + MyOrderParam orderParam, Class modelClazz, String relationModelName) { + if (orderParam == null) { + return null; + } + if (modelClazz == null) { + throw new IllegalArgumentException( + "modelClazz Argument in MyOrderParam.getOrderClauseByModelName can't be NULL"); + } + List fieldNameList = new LinkedList<>(); + String prefix = null; + if (StringUtils.isNotBlank(relationModelName)) { + prefix = relationModelName + "."; + } + for (OrderInfo orderInfo : orderParam) { + OrderBaseData baseData = parseOrderBaseData(orderInfo, modelClazz, prefix, relationModelName); + if (baseData != null) { + fieldNameList.add(makeOrderBy(baseData, orderInfo.asc)); + } + } + return StringUtils.join(fieldNameList, ", "); + } + + private static OrderBaseData parseOrderBaseData( + OrderInfo orderInfo, Class modelClazz, String prefix, String relationModelName) { + OrderBaseData baseData = null; + String fieldName = StringUtils.substringBefore(orderInfo.fieldName, DICT_MAP); + if (prefix != null) { + if (fieldName.startsWith(prefix)) { + baseData = new OrderBaseData(); + Field field = ReflectUtil.getField(modelClazz, relationModelName); + if (field == null) { + throw new InvalidClassFieldException(modelClazz.getSimpleName(), relationModelName); + } + Class fieldClazz = field.getType(); + baseData.modelName = fieldClazz.getSimpleName(); + baseData.fieldName = StringUtils.removeStart(fieldName, prefix); + baseData.tableName = MyModelUtil.mapToTableName(fieldClazz); + baseData.columnName = MyModelUtil.mapToColumnName(fieldName, fieldClazz); + } + } else { + String dotLimitor = "."; + if (!fieldName.contains(dotLimitor)) { + baseData = new OrderBaseData(); + baseData.modelName = modelClazz.getSimpleName(); + baseData.tableName = MyModelUtil.mapToTableName(modelClazz); + baseData.columnName = MyModelUtil.mapToColumnName(fieldName, modelClazz); + } + } + return baseData; + } + + private static String makeOrderBy(OrderBaseData baseData, Boolean asc) { + if (StringUtils.isBlank(baseData.tableName)) { + throw new InvalidDataModelException(baseData.modelName); + } + if (StringUtils.isBlank(baseData.columnName)) { + throw new InvalidDataFieldException(baseData.modelName, baseData.fieldName); + } + StringBuilder orderBy = new StringBuilder(128); + orderBy.append(baseData.tableName).append(".").append(baseData.columnName); + if (asc != null && !asc) { + orderBy.append(" DESC"); + } + return orderBy.toString(); + } + + /** + * 在排序列表中,可能存在基于指定表字段的排序,该函数将删除指定表的所有排序字段。 + * + * @param orderParam 排序参数对象。 + * @param modelClazz 查询主表对应的主对象的Class。 + * @param relationModelName 与关联表对应的Model的名称,如my_course_paper表应对的Java对象CoursePaper。 + * 如果该值为null或空字符串,则获取所有主表的排序字段。 + */ + public static void removeOrderClauseByModelName( + MyOrderParam orderParam, Class modelClazz, String relationModelName) { + if (orderParam == null) { + return; + } + if (modelClazz == null) { + throw new IllegalArgumentException( + "modelClazz Argument in MyOrderParam.removeOrderClauseByModelName can't be NULL"); + } + List fieldIndexList = new LinkedList<>(); + String prefix = null; + if (StringUtils.isNotBlank(relationModelName)) { + prefix = relationModelName + "."; + } + int i = 0; + for (OrderInfo orderInfo : orderParam) { + String fieldName = StringUtils.substringBefore(orderInfo.fieldName, DICT_MAP); + if (prefix != null) { + if (fieldName.startsWith(prefix)) { + fieldIndexList.add(i); + } + } else { + if (!fieldName.contains(".")) { + fieldIndexList.add(i); + } + } + ++i; + } + for (int index : fieldIndexList) { + orderParam.remove(index); + } + } + + /** + * 排序信息对象。 + */ + @AllArgsConstructor + @NoArgsConstructor + @Data + public static class OrderInfo { + /** + * Java对象的字段名。如果fieldName为空,则忽略跳过。目前主要包含三种格式: + * 1. 简单的属性名称,如userId,将会直接映射到与其关联的数据库字段。表名为当前ModelClazz所对应的表名。 + * 映射结果或为 my_main_table.user_id + * 2. 字典属性名称,如userIdDictMap.id,由于仅仅支持字典中Id数据的排序,所以直接截取DictMap之前的字符串userId作为排序属性。 + * 表名为当前ModelClazz所对应的表名。映射结果或为 my_main_table.user_id + * 3. 一对一关联表属性,如user.userId,这里将先获取user属性的对象类型并映射到对应的表名,后面的userId为 + * user所在实体的属性。映射结果或为:my_sys_user.user_id + */ + private String fieldName; + /** + * 排序方向。true为升序,否则降序。 + */ + private Boolean asc = true; + /** + * 如果该值不为NULL,则会对日期型排序字段进行DATE_FORMAT函数的计算,并根据具体的值,将日期数据截取到指定的位。 + * day: 表示按照天聚合,将会截取到天。DATE_FORMAT(columnName, '%Y-%m-%d') + * month: 表示按照月聚合,将会截取到月。DATE_FORMAT(columnName, '%Y-%m-01') + * year: 表示按照年聚合,将会截取到年。DATE_FORMAT(columnName, '%Y-01-01') + */ + private String dateAggregateBy; + } + + private static class OrderBaseData { + private String modelName; + private String fieldName; + private String tableName; + private String columnName; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyPageData.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyPageData.java new file mode 100644 index 00000000..741b227c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyPageData.java @@ -0,0 +1,36 @@ +package com.flow.demo.common.core.object; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.LinkedList; +import java.util.List; + +/** + * 分页数据的应答返回对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MyPageData { + /** + * 数据列表。 + */ + private List dataList; + /** + * 数据总数量。 + */ + private Long totalCount; + + /** + * 为了保持前端的数据格式兼容性,在没有数据的时候,需要返回空分页对象。 + * @return 空分页对象。 + */ + public static MyPageData emptyPageData() { + return new MyPageData<>(new LinkedList<>(), 0L); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyPageParam.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyPageParam.java new file mode 100644 index 00000000..03fc8e30 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyPageParam.java @@ -0,0 +1,58 @@ +package com.flow.demo.common.core.object; + +import lombok.Getter; + +/** + * Controller参数中的分页请求对象 + * + * @author Jerry + * @date 2021-06-06 + */ +@Getter +public class MyPageParam { + + public static final int DEFAULT_PAGE_NUM = 1; + public static final int DEFAULT_PAGE_SIZE = 10; + public static final int DEFAULT_MAX_SIZE = 100; + + /** + * 分页号码,从1开始计数。 + */ + private Integer pageNum; + + /** + * 每页大小。 + */ + private Integer pageSize; + + /** + * 设置当前分页页号。 + * + * @param pageNum 页号,如果传入非法值,则使用缺省值。 + */ + public void setPageNum(Integer pageNum) { + if (pageNum == null) { + return; + } + if (pageNum <= 0) { + pageNum = DEFAULT_PAGE_NUM; + } + this.pageNum = pageNum; + } + + /** + * 设置分页的大小。 + * + * @param pageSize 分页大小,如果传入非法值,则使用缺省值。 + */ + public void setPageSize(Integer pageSize) { + if (pageSize == null) { + return; + } + if (pageSize <= 0 || pageSize > DEFAULT_MAX_SIZE) { + pageSize = DEFAULT_PAGE_SIZE; + } + this.pageSize = pageSize; + } + +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyRelationParam.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyRelationParam.java new file mode 100644 index 00000000..64e125a0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyRelationParam.java @@ -0,0 +1,91 @@ +package com.flow.demo.common.core.object; + +import lombok.Builder; +import lombok.Data; + +/** + * 实体对象数据组装参数构建器。 + * BaseService中的实体对象数据组装函数,会根据该参数对象进行数据组装。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@Builder +public class MyRelationParam { + + /** + * 是否组装字典关联的标记。 + * 组装RelationDict和RelationConstDict注解标记的字段。 + */ + private boolean buildDict; + + /** + * 是否组装一对一关联的标记。 + * 组装RelationOneToOne注解标记的字段。 + */ + private boolean buildOneToOne; + + /** + * 是否组装一对多关联的标记。 + * 组装RelationOneToMany注解标记的字段。 + */ + private boolean buildOneToMany; + + /** + * 在组装一对一关联的同时,是否继续关联从表中的字典。 + * 从表中RelationDict和RelationConstDict注解标记的字段。 + * 该字段为true时,无需设置buildOneToOne了。 + */ + private boolean buildOneToOneWithDict; + + /** + * 是否组装主表对多对多中间表关联的标记。 + * 组装RelationManyToMany注解标记的字段。 + */ + private boolean buildRelationManyToMany; + + /** + * 是否组装聚合计算关联的标记。 + * 组装RelationOneToManyAggregation和RelationManyToManyAggregation注解标记的字段。 + */ + private boolean buildRelationAggregation; + + /** + * 便捷方法,返回仅做字典关联的参数对象。 + * + * @return 返回仅做字典关联的参数对象。 + */ + public static MyRelationParam dictOnly() { + return MyRelationParam.builder().buildDict(true).build(); + } + + /** + * 便捷方法,返回仅做字典关联、一对一从表及其字典和聚合计算的参数对象。 + * NOTE: 对于一对多和多对多,这种从表数据是列表结果的关联,均不返回。 + * + * @return 返回仅做字典关联、一对一从表及其字典和聚合计算的参数对象。 + */ + public static MyRelationParam normal() { + return MyRelationParam.builder() + .buildDict(true) + .buildOneToOneWithDict(true) + .buildRelationAggregation(true) + .build(); + } + + /** + * 便捷方法,返回全部关联的参数对象。 + * + * @return 返回全部关联的参数对象。 + */ + public static MyRelationParam full() { + return MyRelationParam.builder() + .buildDict(true) + .buildOneToOneWithDict(true) + .buildRelationAggregation(true) + .buildRelationManyToMany(true) + .buildOneToMany(true) + .build(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyWhereCriteria.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyWhereCriteria.java new file mode 100644 index 00000000..ed0a2ff0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/MyWhereCriteria.java @@ -0,0 +1,361 @@ +package com.flow.demo.common.core.object; + +import cn.hutool.core.util.ReflectUtil; +import com.alibaba.fastjson.annotation.JSONField; +import com.flow.demo.common.core.exception.InvalidDataFieldException; +import com.flow.demo.common.core.exception.InvalidDataModelException; +import com.flow.demo.common.core.util.MyModelUtil; +import lombok.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.Collection; +import java.util.Date; +import java.util.List; + +/** + * Where中的条件语句。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Data +@NoArgsConstructor +public class MyWhereCriteria { + + /** + * 等于 + */ + public static final int OPERATOR_EQUAL = 0; + + /** + * 不等于 + */ + public static final int OPERATOR_NOT_EQUAL = 1; + + /** + * 大于等于 + */ + public static final int OPERATOR_GE = 2; + + /** + * 大于 + */ + public static final int OPERATOR_GT = 3; + + /** + * 小于等于 + */ + public static final int OPERATOR_LE = 4; + + /** + * 小于 + */ + public static final int OPERATOR_LT = 5; + + /** + * LIKE + */ + public static final int OPERATOR_LIKE = 6; + + /** + * NOT NULL + */ + public static final int OPERATOR_NOT_NULL = 7; + + /** + * IS NULL + */ + public static final int OPERATOR_IS_NULL = 8; + + /** + * IN + */ + public static final int OPERATOR_IN = 9; + + /** + * 参与过滤的实体对象的Class。 + */ + @JSONField(serialize = false) + private Class modelClazz; + + /** + * 数据库表名。 + */ + private String tableName; + + /** + * Java属性名称。 + */ + private String fieldName; + + /** + * 数据表字段名。 + */ + private String columnName; + + /** + * 数据表字段类型。 + */ + private Integer columnType; + + /** + * 操作符类型,取值范围见上面的常量值。 + */ + private Integer operatorType; + + /** + * 条件数据值。 + */ + private Object value; + + public MyWhereCriteria(Class modelClazz, String fieldName, Integer operatorType, Object value) { + this.modelClazz = modelClazz; + this.fieldName = fieldName; + this.operatorType = operatorType; + this.value = value; + } + + /** + * 设置条件值。 + * + * @param fieldName 条件所属的实体对象的字段名。 + * @param operatorType 条件操作符。具体值可参考当前对象的静态变量。 + * @param value 条件过滤值。 + * @return 验证结果对象,如果有错误将会返回具体的错误信息。 + */ + public CallResult setCriteria(String fieldName, Integer operatorType, Object value) { + this.operatorType = operatorType; + this.fieldName = fieldName; + this.value = value; + return doVerify(); + } + + /** + * 设置条件值。 + * + * @param modelClazz 数据表对应实体对象的Class. + * @param fieldName 条件所属的实体对象的字段名。 + * @param operatorType 条件操作符。具体值可参考当前对象的静态变量。 + * @param value 条件过滤值。 + * @return 验证结果对象,如果有错误将会返回具体的错误信息。 + */ + public CallResult setCriteria(Class modelClazz, String fieldName, Integer operatorType, Object value) { + this.modelClazz = modelClazz; + this.operatorType = operatorType; + this.fieldName = fieldName; + this.value = value; + return doVerify(); + } + + /** + * 设置条件值,通过该构造方法设置时,通常是直接将表名、字段名、字段类型等赋值,无需在通过modelClazz进行推演。 + * + * @param tableName 数据表名。 + * @param columnName 数据字段名。 + * @param columnType 数据字段类型。 + * @param operatorType 操作类型。具体值可参考当前对象的静态变量。 + * @param value 条件过滤值。 + */ + public void setCriteria( + String tableName, String columnName, String columnType, Integer operatorType, Object value) { + this.tableName = tableName; + this.columnName = columnName; + this.columnType = MyModelUtil.NUMERIC_FIELD_TYPE; + if (String.class.getSimpleName().equals(columnType)) { + this.columnType = MyModelUtil.STRING_FIELD_TYPE; + } else if (Date.class.getSimpleName().equals(columnType)) { + this.columnType = MyModelUtil.DATE_FIELD_TYPE; + } + this.operatorType = operatorType; + this.value = value; + } + + /** + * 在执行该函数之前,该对象的所有数据均已经赋值完毕。 + * 该函数主要验证操作符字段和条件值字段对应关系的合法性。 + * + * @return 验证结果对象,如果有错误将会返回具体的错误信息。 + */ + public CallResult doVerify() { + if (fieldName == null) { + return CallResult.error("过滤字段名称 [fieldName] 不能为空!"); + } + if (modelClazz != null && ReflectUtil.getField(modelClazz, fieldName) == null) { + return CallResult.error( + "过滤字段 [" + fieldName + "] 在实体对象 [" + modelClazz.getSimpleName() + "] 中并不存在!"); + } + if (!checkOperatorType()) { + return CallResult.error("无效的操作符类型 [" + operatorType + "]!"); + } + // 其他操作符必须包含value值 + if (operatorType != OPERATOR_IS_NULL && operatorType != OPERATOR_NOT_NULL && value == null) { + String operatorString = this.getOperatorString(); + return CallResult.error("操作符 [" + operatorString + "] 的条件值不能为空!"); + } + if (this.operatorType == OPERATOR_IN) { + if (!(value instanceof Collection)) { + return CallResult.error("操作符 [IN] 的条件值必须为集合对象!"); + } + if (CollectionUtils.isEmpty((Collection) value)) { + return CallResult.error("操作符 [IN] 的条件值不能为空!"); + } + } + return CallResult.ok(); + } + + /** + * 判断操作符类型是否合法。 + * + * @return 合法返回true,否则false。 + */ + public boolean checkOperatorType() { + return operatorType != null + && (operatorType >= OPERATOR_EQUAL && operatorType <= OPERATOR_IN); + } + + /** + * 获取操作符的字符串形式。 + * + * @return 操作符的字符串。 + */ + public String getOperatorString() { + switch (operatorType) { + case OPERATOR_EQUAL: + return " = "; + case OPERATOR_NOT_EQUAL: + return " != "; + case OPERATOR_GE: + return " >= "; + case OPERATOR_GT: + return " > "; + case OPERATOR_LE: + return " <= "; + case OPERATOR_LT: + return " < "; + case OPERATOR_LIKE: + return " LIKE "; + case OPERATOR_NOT_NULL: + return " IS NOT NULL "; + case OPERATOR_IS_NULL: + return " IS NULL "; + case OPERATOR_IN: + return " IN "; + default: + return null; + } + } + + /** + * 获取组装后的SQL Where从句,如 table_name.column_name = 'value'。 + * 与查询数据表对应的实体对象Class为当前对象的modelClazz字段。 + * + * @exception InvalidDataFieldException selectFieldList中存在非法实体字段时,抛出该异常。 + * @return 组装后的SQL条件从句。 + */ + public String makeCriteriaString() { + return makeCriteriaString(this.modelClazz); + } + + /** + * 获取组装后的SQL Where从句,如 table_name.column_name = 'value'。 + * + * @param modelClazz 与查询数据表对应的实体对象的Class。 + * @exception InvalidDataFieldException selectFieldList中存在非法实体字段时,抛出该异常。 + * @exception InvalidDataModelException 参数modelClazz没有对应的table,抛出该异常。 + * @return 组装后的SQL条件从句。 + */ + public String makeCriteriaString(Class modelClazz) { + String tableName; + String columnName; + Integer columnType; + if (modelClazz != null) { + Tuple2 fieldInfo = MyModelUtil.mapToColumnInfo(fieldName, modelClazz); + if (fieldInfo == null) { + throw new InvalidDataFieldException(modelClazz.getSimpleName(), fieldName); + } + columnName = fieldInfo.getFirst(); + columnType = fieldInfo.getSecond(); + tableName = MyModelUtil.mapToTableName(modelClazz); + if (tableName == null) { + throw new InvalidDataModelException(modelClazz.getSimpleName()); + } + } else { + tableName = this.tableName; + columnName = this.columnName; + columnType = this.columnType; + } + return this.buildClauseString(tableName, columnName, columnType); + } + + /** + * 获取组装后的SQL Where从句。如 table_name.column_name = 'value'。 + * + * @param criteriaList 条件列表,所有条件直接目前仅支持 AND 的关系。 + * @exception InvalidDataFieldException selectFieldList中存在非法实体字段时,抛出该异常。 + * @return 组装后的SQL条件从句。 + */ + public static String makeCriteriaString(List criteriaList) { + return makeCriteriaString(criteriaList, null); + } + + /** + * 获取组装后的SQL Where从句。如 table_name.column_name = 'value'。 + * + * @param criteriaList 条件列表,所有条件直接目前仅支持 AND 的关系。 + * @param modelClazz 与数据表对应的实体对象的Class。 + * 如果不为NULL实体对象Class使用该值,否则使用每个MyWhereCriteria自身的modelClazz。 + * @exception InvalidDataFieldException selectFieldList中存在非法实体字段时,抛出该异常。 + * @return 组装后的SQL条件从句。 + */ + public static String makeCriteriaString(List criteriaList, Class modelClazz) { + if (CollectionUtils.isEmpty(criteriaList)) { + return null; + } + StringBuilder sb = new StringBuilder(256); + int i = 0; + for (MyWhereCriteria whereCriteria : criteriaList) { + Class clazz = modelClazz; + if (clazz == null) { + clazz = whereCriteria.modelClazz; + } + if (i++ != 0) { + sb.append(" AND "); + } + String criteriaString = whereCriteria.makeCriteriaString(clazz); + sb.append(criteriaString); + } + return sb.length() == 0 ? null : sb.toString(); + } + + private String buildClauseString(String tableName, String columnName, Integer columnType) { + StringBuilder sb = new StringBuilder(64); + sb.append(tableName).append(".").append(columnName).append(getOperatorString()); + if (operatorType == OPERATOR_IN) { + Collection filterValues = (Collection) value; + sb.append("("); + int i = 0; + for (Object filterValue : filterValues) { + if (columnType.equals(MyModelUtil.NUMERIC_FIELD_TYPE)) { + sb.append(filterValue); + } else { + sb.append("'").append(filterValue).append("'"); + } + if (i++ != filterValues.size() - 1) { + sb.append(", "); + } + } + sb.append(")"); + return sb.toString(); + } + if (value != null) { + if (columnType.equals(MyModelUtil.NUMERIC_FIELD_TYPE)) { + sb.append(value); + } else { + sb.append("'").append(value).append("'"); + } + } + return sb.toString(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/ResponseResult.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/ResponseResult.java new file mode 100644 index 00000000..5d62e3c7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/ResponseResult.java @@ -0,0 +1,221 @@ +package com.flow.demo.common.core.object; + +import com.alibaba.fastjson.JSON; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.util.ContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * 接口返回对象 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Data +public class ResponseResult { + + /** + * 为了优化性能,所有没有携带数据的正确结果,均可用该对象表示。 + */ + private static final ResponseResult OK = new ResponseResult<>(); + /** + * 是否成功标记。 + */ + private boolean success = true; + /** + * 错误码。 + */ + private String errorCode = "NO-ERROR"; + /** + * 错误信息描述。 + */ + private String errorMessage = "NO-MESSAGE"; + /** + * 实际数据。 + */ + private T data = null; + + /** + * 根据参数errorCodeEnum的枚举值,判断创建成功对象还是错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和 getErrorMessage()。 + * + * @param errorCodeEnum 错误码枚举 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult create(ErrorCodeEnum errorCodeEnum) { + return create(errorCodeEnum, errorCodeEnum.getErrorMessage()); + } + + /** + * 根据参数errorCodeEnum的枚举值,判断创建成功对象还是错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和参数 errorMessage。 + * + * @param errorCodeEnum 错误码枚举。 + * @param errorMessage 如果该参数为null,错误信息取自errorCodeEnum参数内置的errorMessage,否则使用当前参数。 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult create(ErrorCodeEnum errorCodeEnum, String errorMessage) { + errorMessage = errorMessage != null ? errorMessage : errorCodeEnum.getErrorMessage(); + return errorCodeEnum == ErrorCodeEnum.NO_ERROR ? success() : error(errorCodeEnum.name(), errorMessage); + } + + /** + * 根据参数errorCode是否为空,判断创建成功对象还是错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCode 和参数 errorMessage。 + * + * @param errorCode 自定义的错误码 + * @param errorMessage 自定义的错误信息 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult create(String errorCode, String errorMessage) { + return errorCode == null ? success() : error(errorCode, errorMessage); + } + + /** + * 创建成功对象。 + * 如果需要绑定返回数据,可以在实例化后调用setDataObject方法。 + * + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult success() { + return OK; + } + + /** + * 创建带有返回数据的成功对象。 + * + * @param data 返回的数据对象 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult success(T data) { + ResponseResult resp = new ResponseResult<>(); + resp.data = data; + return resp; + } + + /** + * 创建错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和 getErrorMessage()。 + * + * @param errorCodeEnum 错误码枚举 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult error(ErrorCodeEnum errorCodeEnum) { + return error(errorCodeEnum.name(), errorCodeEnum.getErrorMessage()); + } + + /** + * 创建错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和参数 errorMessage。 + * + * @param errorCodeEnum 错误码枚举 + * @param errorMessage 自定义的错误信息 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult error(ErrorCodeEnum errorCodeEnum, String errorMessage) { + return error(errorCodeEnum.name(), errorMessage); + } + + /** + * 创建错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCode 和参数 errorMessage。 + * + * @param errorCode 自定义的错误码 + * @param errorMessage 自定义的错误信息 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult error(String errorCode, String errorMessage) { + return new ResponseResult<>(errorCode, errorMessage); + } + + /** + * 根据参数中出错的ResponseResult,创建新的错误应答对象。 + * + * @param errorCause 导致错误原因的应答对象。 + * @return 返回创建的ResponseResult实例对象。 + */ + public static ResponseResult errorFrom(ResponseResult errorCause) { + return error(errorCause.errorCode, errorCause.getErrorMessage()); + } + + /** + * 根据参数中出错的CallResult,创建新的错误应答对象。 + * + * @param errorCause 导致错误原因的应答对象。 + * @return 返回创建的ResponseResult实例对象。 + */ + public static ResponseResult errorFrom(CallResult errorCause) { + return error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorCause.getErrorMessage()); + } + + /** + * 是否成功。 + * + * @return true成功,否则false。 + */ + public boolean isSuccess() { + return success; + } + + /** + * 通过HttpServletResponse直接输出应该信息的工具方法。 + * + * @param httpStatus http状态码。 + * @param responseResult 应答内容。 + * @param 数据对象类型。 + * @throws IOException 异常错误。 + */ + public static void output(int httpStatus, ResponseResult responseResult) throws IOException { + if (httpStatus != HttpServletResponse.SC_OK) { + log.error(JSON.toJSONString(responseResult)); + } else { + log.info(JSON.toJSONString(responseResult)); + } + HttpServletResponse response = ContextUtil.getHttpResponse(); + PrintWriter out = response.getWriter(); + response.setContentType("application/json; charset=utf-8"); + response.setStatus(httpStatus); + if (responseResult != null) { + out.print(JSON.toJSONString(responseResult)); + } + out.flush(); + } + + /** + * 通过HttpServletResponse直接输出应该信息的工具方法。 + * + * @param httpStatus http状态码。 + * @param 数据对象类型。 + * @throws IOException 异常错误。 + */ + public static void output(int httpStatus) throws IOException { + output(httpStatus, null); + } + + /** + * 通过HttpServletResponse直接输出应该信息的工具方法。Http状态码为200。 + * + * @param responseResult 应答内容。 + * @param 数据对象类型。 + * @throws IOException 异常错误。 + */ + public static void output(ResponseResult responseResult) throws IOException { + output(HttpServletResponse.SC_OK, responseResult); + } + + private ResponseResult() { + + } + + private ResponseResult(String errorCode, String errorMessage) { + this.success = false; + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/TokenData.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/TokenData.java new file mode 100644 index 00000000..88ab4aa0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/TokenData.java @@ -0,0 +1,99 @@ +package com.flow.demo.common.core.object; + +import com.flow.demo.common.core.util.ContextUtil; +import lombok.Data; +import lombok.ToString; + +import javax.servlet.http.HttpServletRequest; +import java.util.Date; + +/** + * 基于Jwt,用于前后端传递的令牌对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ToString +public class TokenData { + + /** + * 在HTTP Request对象中的属性键。 + */ + public static final String REQUEST_ATTRIBUTE_NAME = "tokenData"; + /** + * 用户Id。 + */ + private Long userId; + /** + * 用户所在部门Id。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private Long deptId; + /** + * 用户的部门岗位Id。多个岗位之间逗号分隔。仅当系统支持岗位时有值。 + */ + private String deptPostIds; + /** + * 租户Id。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private Long tenantId; + /** + * 是否为超级管理员。 + */ + private Boolean isAdmin; + /** + * 用户登录名。 + */ + private String loginName; + /** + * 用户显示名称。 + */ + private String showName; + /** + * 设备类型。参考 AppDeviceType。 + */ + private Integer deviceType; + /** + * 标识不同登录的会话Id。 + */ + private String sessionId; + /** + * 访问uaa的授权token。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private String uaaAccessToken; + /** + * 数据库路由键(仅当水平分库时使用)。 + */ + private Integer datasourceRouteKey; + /** + * 登录IP。 + */ + private String loginIp; + /** + * 登录时间。 + */ + private Date loginTime; + + /** + * 将令牌对象添加到Http请求对象。 + * + * @param tokenData 令牌对象。 + */ + public static void addToRequest(TokenData tokenData) { + HttpServletRequest request = ContextUtil.getHttpRequest(); + request.setAttribute(TokenData.REQUEST_ATTRIBUTE_NAME, tokenData); + } + + /** + * 从Http Request对象中获取令牌对象。 + * + * @return 令牌对象。 + */ + public static TokenData takeFromRequest() { + HttpServletRequest request = ContextUtil.getHttpRequest(); + return (TokenData) request.getAttribute(REQUEST_ATTRIBUTE_NAME); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/Tuple2.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/Tuple2.java new file mode 100644 index 00000000..397b1fa6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/object/Tuple2.java @@ -0,0 +1,50 @@ +package com.flow.demo.common.core.object; + +/** + * 二元组对象。主要用于可以一次返回多个结果的场景,同时还能避免强制转换。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class Tuple2 { + + /** + * 第一个变量。 + */ + private final T1 first; + /** + * 第二个变量。 + */ + private final T2 second; + + /** + * 构造函数。 + * + * @param first 第一个变量。 + * @param second 第二个变量。 + */ + public Tuple2(T1 first, T2 second) { + this.first = first; + this.second = second; + } + + /** + * 获取第一个变量。 + * + * @return 返回第一个变量。 + */ + public T1 getFirst() { + return first; + } + + /** + * 获取第二个变量。 + * + * @return 返回第二个变量。 + */ + public T2 getSecond() { + return second; + } + +} + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/BaseUpDownloader.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/BaseUpDownloader.java new file mode 100644 index 00000000..25a85be3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/BaseUpDownloader.java @@ -0,0 +1,137 @@ +package com.flow.demo.common.core.upload; + +import com.alibaba.fastjson.JSON; +import com.flow.demo.common.core.constant.ApplicationConstant; +import com.flow.demo.common.core.util.ContextUtil; +import com.flow.demo.common.core.util.MyCommonUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 上传或下载文件抽象父类。 + * 包含存储本地文件的功能,以及上传和下载所需的通用方法。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public abstract class BaseUpDownloader { + + /** + * 构建上传文件的完整目录。 + * + * @param rootBaseDir 文件下载的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @return 上传文件的完整路径名。 + */ + public String makeFullPath( + String rootBaseDir, String modelName, String fieldName, Boolean asImage) { + StringBuilder uploadPathBuilder = new StringBuilder(128); + if (StringUtils.isNotBlank(rootBaseDir)) { + uploadPathBuilder.append(rootBaseDir).append("/"); + } + if (Boolean.TRUE.equals(asImage)) { + uploadPathBuilder.append(ApplicationConstant.UPLOAD_IMAGE_PARENT_PATH); + } else { + uploadPathBuilder.append(ApplicationConstant.UPLOAD_ATTACHMENT_PARENT_PATH); + } + uploadPathBuilder.append("/").append(modelName).append("/").append(fieldName).append("/"); + return uploadPathBuilder.toString(); + } + + /** + * 构建上传操作的返回对象。 + * + * @param serviceContextPath 微服务的上下文路径,如: /admin/upms。 + * @param originalFilename 上传文件的原始文件名(包含扩展名)。 + */ + public void fillUploadResponseInfo( + UploadResponseInfo responseInfo, String serviceContextPath, String originalFilename) { + // 根据请求上传的uri构建下载uri,只是将末尾的/upload改为/download即可。 + HttpServletRequest request = ContextUtil.getHttpRequest(); + String uri = request.getRequestURI(); + uri = StringUtils.removeEnd(uri, "/"); + uri = StringUtils.removeEnd(uri, "/upload"); + String downloadUri; + if (StringUtils.isBlank(serviceContextPath)) { + downloadUri = uri + "/download"; + } else { + downloadUri = serviceContextPath + uri + "/download"; + } + StringBuilder filenameBuilder = new StringBuilder(64); + filenameBuilder.append(MyCommonUtil.generateUuid()) + .append(".").append(FilenameUtils.getExtension(originalFilename)); + responseInfo.setDownloadUri(downloadUri); + responseInfo.setFilename(filenameBuilder.toString()); + } + + /** + * 执行下载操作,从本地文件系统读取数据,并将读取的数据直接写入到HttpServletResponse应答对象。 + * + * @param rootBaseDir 文件下载的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param fileName 文件名。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @param response Http 应答对象。 + * @throws Exception 操作错误。 + */ + public abstract void doDownload( + String rootBaseDir, + String modelName, + String fieldName, + String fileName, + Boolean asImage, + HttpServletResponse response) throws Exception; + + /** + * 执行文件上传操作,并存入本地文件系统,再将与该文件下载对应的Url直接写入到HttpServletResponse应答对象,返回给前端。 + * + * @param serviceContextPath 微服务的上下文路径,如: /admin/upms。 + * @param rootBaseDir 存放上传文件的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param uploadFile Http请求中上传的文件对象。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @return 存储在本地上传文件名。 + * @throws Exception 操作错误。 + */ + public abstract UploadResponseInfo doUpload( + String serviceContextPath, + String rootBaseDir, + String modelName, + String fieldName, + Boolean asImage, + MultipartFile uploadFile) throws Exception; + + /** + * 判断filename参数指定的文件名,是否被包含在fileInfoJson参数中。 + * + * @param fileInfoJson 内部类UploadFileInfo的JSONArray数组。 + * @param filename 被包含的文件名。 + * @return 存在返回true,否则false。 + */ + public static boolean containFile(String fileInfoJson, String filename) { + if (StringUtils.isAnyBlank(fileInfoJson, filename)) { + return false; + } + List fileInfoList = JSON.parseArray(fileInfoJson, UploadResponseInfo.class); + if (CollectionUtils.isNotEmpty(fileInfoList)) { + for (UploadResponseInfo fileInfo : fileInfoList) { + if (StringUtils.equals(filename, fileInfo.getFilename())) { + return true; + } + } + } + return false; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/LocalUpDownloader.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/LocalUpDownloader.java new file mode 100644 index 00000000..268f6009 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/LocalUpDownloader.java @@ -0,0 +1,149 @@ +package com.flow.demo.common.core.upload; + +import com.alibaba.fastjson.JSON; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.Objects; + +/** + * 存储本地文件的上传下载实现类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Component +public class LocalUpDownloader extends BaseUpDownloader { + + @Autowired + private UpDownloaderFactory factory; + + @PostConstruct + public void doRegister() { + factory.registerUpDownloader(UploadStoreTypeEnum.LOCAL_SYSTEM, this); + } + + /** + * 执行下载操作,从本地文件系统读取数据,并将读取的数据直接写入到HttpServletResponse应答对象。 + * + * @param rootBaseDir 文件下载的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param fileName 文件名。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @param response Http 应答对象。 + */ + @Override + public void doDownload( + String rootBaseDir, + String modelName, + String fieldName, + String fileName, + Boolean asImage, + HttpServletResponse response) { + String uploadPath = makeFullPath(rootBaseDir, modelName, fieldName, asImage); + String fullFileanme = uploadPath + "/" + fileName; + File file = new File(fullFileanme); + if (!file.exists()) { + log.warn("Download file [" + fullFileanme + "] failed, no file found!"); + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + response.setHeader("content-type", "application/octet-stream"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + byte[] buff = new byte[2048]; + try (OutputStream os = response.getOutputStream(); + BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) { + int i = bis.read(buff); + while (i != -1) { + os.write(buff, 0, i); + os.flush(); + i = bis.read(buff); + } + } catch (IOException e) { + log.error("Failed to call LocalUpDownloader.doDownload", e); + } + } + + /** + * 执行文件上传操作,并存入本地文件系统,再将与该文件下载对应的Url直接写入到HttpServletResponse应答对象,返回给前端。 + * + * @param serviceContextPath 微服务的上下文路径,如: /admin/upms。 + * @param rootBaseDir 存放上传文件的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param uploadFile Http请求中上传的文件对象。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @return 存储在本地上传文件名。 + * @throws IOException 文件操作错误。 + */ + @Override + public UploadResponseInfo doUpload( + String serviceContextPath, + String rootBaseDir, + String modelName, + String fieldName, + Boolean asImage, + MultipartFile uploadFile) throws IOException { + UploadResponseInfo responseInfo = new UploadResponseInfo(); + if (Objects.isNull(uploadFile) || uploadFile.isEmpty()) { + responseInfo.setUploadFailed(true); + responseInfo.setErrorMessage(ErrorCodeEnum.INVALID_UPLOAD_FILE_ARGUMENT.getErrorMessage()); + return responseInfo; + } + String uploadPath = makeFullPath(rootBaseDir, modelName, fieldName, asImage); + fillUploadResponseInfo(responseInfo, serviceContextPath, uploadFile.getOriginalFilename()); + try { + byte[] bytes = uploadFile.getBytes(); + Path path = Paths.get(uploadPath + responseInfo.getFilename()); + // 如果没有files文件夹,则创建 + if (!Files.isWritable(path)) { + Files.createDirectories(Paths.get(uploadPath)); + } + // 文件写入指定路径 + Files.write(path, bytes); + } catch (IOException e) { + log.error("Failed to write uploaded file [" + uploadFile.getOriginalFilename() + " ].", e); + responseInfo.setUploadFailed(true); + responseInfo.setErrorMessage(ErrorCodeEnum.INVALID_UPLOAD_FILE_IOERROR.getErrorMessage()); + return responseInfo; + } + return responseInfo; + } + + /** + * 判断filename参数指定的文件名,是否被包含在fileInfoJson参数中。 + * + * @param fileInfoJson 内部类UploadFileInfo的JSONArray数组。 + * @param filename 被包含的文件名。 + * @return 存在返回true,否则false。 + */ + public static boolean containFile(String fileInfoJson, String filename) { + if (StringUtils.isAnyBlank(fileInfoJson, filename)) { + return false; + } + List fileInfoList = JSON.parseArray(fileInfoJson, UploadResponseInfo.class); + if (CollectionUtils.isNotEmpty(fileInfoList)) { + for (UploadResponseInfo fileInfo : fileInfoList) { + if (StringUtils.equals(filename, fileInfo.getFilename())) { + return true; + } + } + } + return false; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UpDownloaderFactory.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UpDownloaderFactory.java new file mode 100644 index 00000000..74ce3d10 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UpDownloaderFactory.java @@ -0,0 +1,49 @@ +package com.flow.demo.common.core.upload; + +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * 业务对象根据上传下载存储类型,获取上传下载对象的工厂类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Component +public class UpDownloaderFactory { + + private final Map upDownloaderMap = new HashMap<>(); + + /** + * 根据存储类型获取上传下载对象。 + * @param storeType 存储类型。 + * @return 匹配的上传下载对象。 + */ + public BaseUpDownloader get(UploadStoreTypeEnum storeType) { + BaseUpDownloader upDownloader = upDownloaderMap.get(storeType); + if (upDownloader == null) { + throw new UnsupportedOperationException( + "The storeType [" + storeType.name() + "] isn't supported, please add dependency jar first."); + } + return upDownloader; + } + + /** + * 注册上传下载对象到工厂。 + * + * @param storeType 存储类型。 + * @param upDownloader 上传下载对象。 + */ + public void registerUpDownloader(UploadStoreTypeEnum storeType, BaseUpDownloader upDownloader) { + if (storeType == null || upDownloader == null) { + throw new IllegalArgumentException("The Argument can't be NULL."); + } + if (upDownloaderMap.containsKey(storeType)) { + throw new UnsupportedOperationException( + "The storeType [" + storeType.name() + "] has been registered already."); + } + upDownloaderMap.put(storeType, upDownloader); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UploadResponseInfo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UploadResponseInfo.java new file mode 100644 index 00000000..7da0f300 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UploadResponseInfo.java @@ -0,0 +1,29 @@ +package com.flow.demo.common.core.upload; + +import lombok.Data; + +/** + * 数据上传操作的应答信息对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class UploadResponseInfo { + /** + * 上传是否出现错误。 + */ + private Boolean uploadFailed = false; + /** + * 具体错误信息。 + */ + private String errorMessage; + /** + * 返回前端的下载url。 + */ + private String downloadUri; + /** + * 返回给前端的文件名。 + */ + private String filename; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UploadStoreInfo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UploadStoreInfo.java new file mode 100644 index 00000000..ec8accfa --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UploadStoreInfo.java @@ -0,0 +1,22 @@ +package com.flow.demo.common.core.upload; + +import lombok.Data; + +/** + * 上传数据存储信息对象。这里之所以使用对象,主要是便于今后扩展。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class UploadStoreInfo { + + /** + * 是否支持上传。 + */ + private boolean supportUpload; + /** + * 上传数据存储类型。 + */ + private UploadStoreTypeEnum storeType; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UploadStoreTypeEnum.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UploadStoreTypeEnum.java new file mode 100644 index 00000000..cef43e6c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/upload/UploadStoreTypeEnum.java @@ -0,0 +1,19 @@ +package com.flow.demo.common.core.upload; + +/** + * 上传数据存储介质类型枚举。 + * + * @author Jerry + * @date 2021-06-06 + */ +public enum UploadStoreTypeEnum { + + /** + * 本地系统。 + */ + LOCAL_SYSTEM, + /** + * minio分布式存储。 + */ + MINIO_SYSTEM +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/AopTargetUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/AopTargetUtil.java new file mode 100644 index 00000000..7d2e9ae5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/AopTargetUtil.java @@ -0,0 +1,64 @@ +package com.flow.demo.common.core.util; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.aop.framework.AdvisedSupport; +import org.springframework.aop.framework.AopProxy; +import org.springframework.aop.support.AopUtils; + +import java.lang.reflect.Field; + +/** + * 获取JDK动态代理/CGLIB代理对象代理的目标对象的工具类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class AopTargetUtil { + + /** + * 获取参数对象代理的目标对象。 + * + * @param proxy 代理对象 + * @return 代理的目标对象。 + */ + public static Object getTarget(Object proxy) { + if (!AopUtils.isAopProxy(proxy)) { + return proxy; + } + try { + if (AopUtils.isJdkDynamicProxy(proxy)) { + return getJdkDynamicProxyTargetObject(proxy); + } else { + return getCglibProxyTargetObject(proxy); + } + } catch (Exception e) { + log.error("Failed to call getJdkDynamicProxyTargetObject or getCglibProxyTargetObject", e); + return null; + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private AopTargetUtil() { + } + + private static Object getCglibProxyTargetObject(Object proxy) throws Exception { + Field h = proxy.getClass().getDeclaredField("CGLIB$CALLBACK_0"); + h.setAccessible(true); + Object dynamicAdvisedInterceptor = h.get(proxy); + Field advised = dynamicAdvisedInterceptor.getClass().getDeclaredField("advised"); + advised.setAccessible(true); + return ((AdvisedSupport) advised.get(dynamicAdvisedInterceptor)).getTargetSource().getTarget(); + } + + private static Object getJdkDynamicProxyTargetObject(Object proxy) throws Exception { + Field h = proxy.getClass().getSuperclass().getDeclaredField("h"); + h.setAccessible(true); + AopProxy aopProxy = (AopProxy) h.get(proxy); + Field advised = aopProxy.getClass().getDeclaredField("advised"); + advised.setAccessible(true); + return ((AdvisedSupport) advised.get(aopProxy)).getTargetSource().getTarget(); + } +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/ApplicationContextHolder.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/ApplicationContextHolder.java new file mode 100644 index 00000000..d96f01e8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/ApplicationContextHolder.java @@ -0,0 +1,90 @@ +package com.flow.demo.common.core.util; + +import com.flow.demo.common.core.exception.MyRuntimeException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.Map; + +/** + * Spring 系统启动应用感知对象,主要用于获取Spring Bean的上下文对象,后续的代码中可以直接查找系统中加载的Bean对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Component +public class ApplicationContextHolder implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + /** + * Spring 启动的过程中会自动调用,并将应用上下文对象赋值进来。 + * + * @param applicationContext 应用上下文对象,可通过该对象查找Spring中已经加载的Bean。 + */ + @Override + public void setApplicationContext(@NonNull ApplicationContext applicationContext) { + doSetApplicationContext(applicationContext); + } + + /** + * 获取应用上下文对象。 + * + * @return 应用上下文。 + */ + public static ApplicationContext getApplicationContext() { + assertApplicationContext(); + return applicationContext; + } + + /** + * 根据BeanName,获取Bean对象。 + * + * @param beanName Bean名称。 + * @param 返回的Bean类型。 + * @return Bean对象。 + */ + @SuppressWarnings("unchecked") + public static T getBean(String beanName) { + assertApplicationContext(); + return (T) applicationContext.getBean(beanName); + } + + /** + * 根据Bean的ClassType,获取Bean对象。 + * + * @param beanType Bean的Class类型。 + * @param 返回的Bean类型。 + * @return Bean对象。 + */ + public static T getBean(Class beanType) { + assertApplicationContext(); + return applicationContext.getBean(beanType); + } + + /** + * 根据Bean的ClassType,获取Bean对象列表。 + * + * @param beanType Bean的Class类型。 + * @param 返回的Bean类型。 + * @return Bean对象列表。 + */ + public static Collection getBeanListOfType(Class beanType) { + assertApplicationContext(); + Map beanMap = applicationContext.getBeansOfType(beanType); + return beanMap == null ? null : beanMap.values(); + } + + private static void assertApplicationContext() { + if (ApplicationContextHolder.applicationContext == null) { + throw new MyRuntimeException("applicaitonContext属性为null,请检查是否注入了ApplicationContextHolder!"); + } + } + + private static void doSetApplicationContext(ApplicationContext applicationContext) { + ApplicationContextHolder.applicationContext = applicationContext; + } +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/ContextUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/ContextUtil.java new file mode 100644 index 00000000..d6c90591 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/ContextUtil.java @@ -0,0 +1,49 @@ +package com.flow.demo.common.core.util; + +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 获取Servlet HttpRequest和HttpResponse的工具类。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class ContextUtil { + + /** + * 判断当前是否处于HttpServletRequest上下文环境。 + * + * @return 是返回true,否则false。 + */ + public static boolean hasRequestContext() { + return RequestContextHolder.getRequestAttributes() != null; + } + + /** + * 获取Servlet请求上下文的HttpRequest对象。 + * + * @return 请求上下文中的HttpRequest对象。 + */ + public static HttpServletRequest getHttpRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + /** + * 获取Servlet请求上下文的HttpResponse对象。 + * + * @return 请求上下文中的HttpResponse对象。 + */ + public static HttpServletResponse getHttpResponse() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ContextUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/DataSourceResolver.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/DataSourceResolver.java new file mode 100644 index 00000000..f065a7d4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/DataSourceResolver.java @@ -0,0 +1,19 @@ +package com.flow.demo.common.core.util; + +/** + * 基于自定义解析规则的多数据源解析接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface DataSourceResolver { + + /** + * 动态解析方法。实现类可以根据当前的请求,或者上下文环境进行动态解析。 + * + * @param arg 可选的入参。MyDataSourceResolver注解中的arg参数。 + * @param methodArgs 被织入方法的所有参数。 + * @return 返回用于多数据源切换的类型值。DataSourceResolveAspect 切面方法会根据该返回值和配置信息,进行多数据源切换。 + */ + int resolve(String arg, Object[] methodArgs); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/ExportUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/ExportUtil.java new file mode 100644 index 00000000..d53c3ea1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/ExportUtil.java @@ -0,0 +1,95 @@ +package com.flow.demo.common.core.util; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; +import cn.jimmyshi.beanquery.BeanQuery; +import com.flow.demo.common.core.constant.ApplicationConstant; +import com.flow.demo.common.core.exception.MyRuntimeException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVPrinter; +import org.apache.commons.io.FilenameUtils; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * 导出工具类,目前支持xlsx和csv两种类型。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class ExportUtil { + + /** + * 数据导出。目前仅支持xlsx和csv。 + * + * @param dataList 导出数据列表。 + * @param selectFieldMap 导出的数据字段,key为对象字段名称,value为中文标题名称。 + * @param filename 导出文件名。 + * @param 数据对象类型。 + * @throws IOException 文件操作失败。 + */ + public static void doExport( + Collection dataList, Map selectFieldMap, String filename) throws IOException { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + StringBuilder sb = new StringBuilder(128); + for (Map.Entry e : selectFieldMap.entrySet()) { + sb.append(e.getKey()).append(" as ").append(e.getValue()).append(", "); + } + // 去掉末尾的逗号 + String selectFieldString = sb.substring(0, sb.length() - 2); + // 写出数据到xcel格式的输出流 + List> resultList = BeanQuery.select(selectFieldString).executeFrom(dataList); + // 构建HTTP输出流参数 + HttpServletResponse response = ContextUtil.getHttpResponse(); + response.setHeader("content-type", "application/octet-stream"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + filename); + if (ApplicationConstant.XLSX_EXT.equals(FilenameUtils.getExtension(filename))) { + ServletOutputStream out = response.getOutputStream(); + ExcelWriter writer = ExcelUtil.getWriter(true); + writer.setRowHeight(-1, 30); + writer.setColumnWidth(-1, 30); + writer.setColumnWidth(1, 20); + writer.write(resultList); + writer.flush(out); + writer.close(); + IoUtil.close(out); + } else if (ApplicationConstant.CSV_EXT.equals(FilenameUtils.getExtension(filename))) { + Collection headerList = selectFieldMap.values(); + String[] headerArray = new String[headerList.size()]; + headerList.toArray(headerArray); + CSVFormat format = CSVFormat.DEFAULT.withHeader(headerArray); + response.setCharacterEncoding(StandardCharsets.UTF_8.name()); + try (Writer out = response.getWriter(); CSVPrinter printer = new CSVPrinter(out, format)) { + for (Map o : resultList) { + for (Map.Entry entry : o.entrySet()) { + printer.print(entry.getValue()); + } + printer.println(); + } + printer.flush(); + } catch (Exception e) { + log.error("Failed to call ExportUtil.doExport", e); + } + } else { + throw new MyRuntimeException("不支持的导出文件类型!"); + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ExportUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/IpUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/IpUtil.java new file mode 100644 index 00000000..b55382b8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/IpUtil.java @@ -0,0 +1,101 @@ +package com.flow.demo.common.core.util; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +/** + * Ip工具类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class IpUtil { + + private static final String UNKNOWN = "unknown"; + + /** + * 通过Servlet的HttpRequest对象获取Ip地址。 + * + * @param request HttpRequest对象。 + * @return 本次请求的Ip地址。 + */ + public static String getRemoteIpAddress(HttpServletRequest request) { + String ip = null; + // X-Forwarded-For:Squid 服务代理 + String ipAddresses = request.getHeader("X-Forwarded-For"); + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // Proxy-Client-IP:apache 服务代理 + ipAddresses = request.getHeader("Proxy-Client-IP"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // WL-Proxy-Client-IP:weblogic 服务代理 + ipAddresses = request.getHeader("WL-Proxy-Client-IP"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // HTTP_CLIENT_IP:有些代理服务器 + ipAddresses = request.getHeader("HTTP_CLIENT_IP"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // X-Real-IP:nginx服务代理 + ipAddresses = request.getHeader("X-Real-IP"); + } + // 有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP + if (StringUtils.isNotBlank(ipAddresses)) { + ip = ipAddresses.split(",")[0]; + } + // 还是不能获取到,最后再通过request.getRemoteAddr();获取 + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + public static String getFirstLocalIpAddress() { + String ip; + try { + List ipList = getHostAddress(); + // default the first + ip = (!ipList.isEmpty()) ? ipList.get(0) : ""; + } catch (Exception ex) { + ip = ""; + log.error("Failed to call ", ex); + } + return ip; + } + + private static List getHostAddress() throws SocketException { + List ipList = new ArrayList<>(5); + Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()) { + NetworkInterface ni = interfaces.nextElement(); + Enumeration allAddress = ni.getInetAddresses(); + while (allAddress.hasMoreElements()) { + InetAddress address = allAddress.nextElement(); + // skip the IPv6 addr + // skip the IPv6 addr + if (address.isLoopbackAddress() || address instanceof Inet6Address) { + continue; + } + String hostAddress = address.getHostAddress(); + ipList.add(hostAddress); + } + } + return ipList; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private IpUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/JwtUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/JwtUtil.java new file mode 100644 index 00000000..484c4879 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/JwtUtil.java @@ -0,0 +1,110 @@ +package com.flow.demo.common.core.util; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; +import java.util.Map; + +/** + * 基于JWT的Token生成工具类 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class JwtUtil { + + private static final String TOKEN_PREFIX = "Bearer "; + private static final String CLAIM_KEY_CREATEDTIME = "CreatedTime"; + + /** + * Token缺省过期时间是30分钟 + */ + private static final Long TOKEN_EXPIRATION = 1800000L; + /** + * 缺省情况下,Token会每5分钟被刷新一次 + */ + private static final Long REFRESH_TOKEN_INTERVAL = 300000L; + + /** + * 生成加密后的JWT令牌,生成的结果中包含令牌前缀,如"Bearer " + * + * @param claims 令牌中携带的数据 + * @param expirationMillisecond 过期的毫秒数 + * @return 生成后的令牌信息 + */ + public static String generateToken(Map claims, long expirationMillisecond, String signingKey) { + // 自动添加token的创建时间 + long createTime = System.currentTimeMillis(); + claims.put(CLAIM_KEY_CREATEDTIME, createTime); + String token = Jwts.builder() + .setClaims(claims) + .setExpiration(new Date(createTime + expirationMillisecond)) + .signWith(SignatureAlgorithm.HS512, signingKey) + .compact(); + return TOKEN_PREFIX + token; + } + + /** + * 生成加密后的JWT令牌,生成的结果中包含令牌前缀,如"Bearer " + * + * @param claims 令牌中携带的数据 + * @return 生成后的令牌信息 + */ + public static String generateToken(Map claims, String signingKey) { + return generateToken(claims, TOKEN_EXPIRATION, signingKey); + } + + /** + * 获取token中的数据对象 + * + * @param token 令牌信息(需要包含令牌前缀,如"Bearer ") + * @return 令牌中的数据对象,解析视频返回null。 + */ + public static Claims parseToken(String token, String signingKey) { + if (token == null || !token.startsWith(TOKEN_PREFIX)) { + return null; + } + String tokenKey = token.substring(TOKEN_PREFIX.length()); + Claims claims = null; + try { + claims = Jwts.parser().setSigningKey(signingKey).parseClaimsJws(tokenKey).getBody(); + } catch (Exception e) { + log.error("Token Expired", e); + } + return claims; + } + + /** + * 判断令牌是否过期 + * + * @param claims 令牌解密后的Map对象。 + * @return true 过期,否则false。 + */ + public static boolean isNullOrExpired(Claims claims) { + return claims == null || claims.getExpiration().before(new Date()); + } + + /** + * 判断解密后的Token payload是否需要被强制刷新,如果需要,则调用generateToken方法重新生成Token。 + * + * @param claims Token解密后payload数据 + * @return true 需要刷新,否则false + */ + public static boolean needToRefresh(Claims claims) { + if (claims == null) { + return false; + } + Long createTime = (Long) claims.get(CLAIM_KEY_CREATEDTIME); + return createTime == null || System.currentTimeMillis() - createTime > REFRESH_TOKEN_INTERVAL; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private JwtUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/LogMessageUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/LogMessageUtil.java new file mode 100644 index 00000000..54c21efe --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/LogMessageUtil.java @@ -0,0 +1,33 @@ +package com.flow.demo.common.core.util; + +/** + * 拼接日志消息的工具类。 + * 主要目标是,尽量保证日志输出的统一性,同时也可以有效减少与日志信息相关的常量字符串, + * 提高代码的规范度和可维护性。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class LogMessageUtil { + + /** + * RPC调用错误格式。 + */ + private static final String RPC_ERROR_MSG_FORMAT = "RPC Failed with Error message [%s]"; + + /** + * 组装RPC调用的错误信息。 + * + * @param errorMsg 具体的错误信息。 + * @return 格式化后的错误信息。 + */ + public static String makeRpcError(String errorMsg) { + return String.format(RPC_ERROR_MSG_FORMAT, errorMsg); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private LogMessageUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyCommonUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyCommonUtil.java new file mode 100644 index 00000000..e1b0f762 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyCommonUtil.java @@ -0,0 +1,195 @@ +package com.flow.demo.common.core.util; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; +import com.flow.demo.common.core.constant.AppDeviceType; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import java.lang.reflect.Field; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 脚手架中常用的基本工具方法集合,一般而言工程内部使用的方法。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class MyCommonUtil { + + private static final Validator VALIDATOR; + + static { + VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator(); + } + + /** + * 创建uuid。 + * + * @return 返回uuid。 + */ + public static String generateUuid() { + return UUID.randomUUID().toString().replace("-", ""); + } + + /** + * 对用户密码进行加盐后加密。 + * + * @param password 明文密码。 + * @param passwordSalt 盐值。 + * @return 加密后的密码。 + */ + public static String encrptedPassword(String password, String passwordSalt) { + return DigestUtil.md5Hex(password + passwordSalt); + } + + /** + * 这个方法一般用于Controller对于入口参数的基本验证。 + * 对于字符串,如果为空字符串,也将视为Blank,同时返回true。 + * + * @param objs 一组参数。 + * @return 返回是否存在null或空字符串的参数。 + */ + public static boolean existBlankArgument(Object...objs) { + for (Object obj : objs) { + if (MyCommonUtil.isBlankOrNull(obj)) { + return true; + } + } + return false; + } + + /** + * 结果和 existBlankArgument 相反。 + * + * @param objs 一组参数。 + * @return 返回是否存在null或空字符串的参数。 + */ + public static boolean existNotBlankArgument(Object...objs) { + for (Object obj : objs) { + if (!MyCommonUtil.isBlankOrNull(obj)) { + return true; + } + } + return false; + } + + /** + * 验证参数是否为空。 + * + * @param obj 待判断的参数。 + * @return 空或者null返回true,否则false。 + */ + public static boolean isBlankOrNull(Object obj) { + if (obj instanceof Collection) { + return CollUtil.isEmpty((Collection) obj); + } + return obj == null || (obj instanceof CharSequence && StrUtil.isBlank((CharSequence) obj)); + } + + /** + * 验证参数是否为非空。 + * + * @param obj 待判断的参数。 + * @return 空或者null返回false,否则true。 + */ + public static boolean isNotBlankOrNull(Object obj) { + return !isBlankOrNull(obj); + } + + /** + * 判断模型对象是否通过校验,没有通过返回具体的校验错误信息。 + * + * @param model 带校验的model。 + * @param groups Validate绑定的校验组。 + * @return 没有错误返回null,否则返回具体的错误信息。 + */ + public static String getModelValidationError(T model, Class...groups) { + Set> constraintViolations = VALIDATOR.validate(model, groups); + if (!constraintViolations.isEmpty()) { + Iterator> it = constraintViolations.iterator(); + ConstraintViolation constraint = it.next(); + return constraint.getMessage(); + } + return null; + } + + /** + * 拼接参数中的字符串列表,用指定分隔符进行分割,同时每个字符串对象用单引号括起来。 + * + * @param dataList 字符串集合。 + * @param separator 分隔符。 + * @return 拼接后的字符串。 + */ + public static String joinString(Collection dataList, final char separator) { + int index = 0; + StringBuilder sb = new StringBuilder(128); + for (String data : dataList) { + sb.append("'").append(data).append("'"); + if (index++ != dataList.size() - 1) { + sb.append(separator); + } + } + return sb.toString(); + } + + /** + * 将SQL Like中的通配符替换为字符本身的含义,以便于比较。 + * + * @param str 待替换的字符串。 + * @return 替换后的字符串。 + */ + public static String replaceSqlWildcard(String str) { + if (StrUtil.isBlank(str)) { + return str; + } + return StrUtil.replaceChars(StrUtil.replaceChars(str, "_", "\\_"), "%", "\\%"); + } + + /** + * 获取对象中,非空字段的名字列表。 + * + * @param object 数据对象。 + * @param clazz 数据对象的class类型。 + * @param 数据对象类型。 + * @return 数据对象中,值不为NULL的字段数组。 + */ + public static String[] getNotNullFieldNames(T object, Class clazz) { + Field[] fields = ReflectUtil.getFields(clazz); + List fieldNameList = Arrays.stream(fields) + .filter(f -> ReflectUtil.getFieldValue(object, f) != null) + .map(Field::getName).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(fieldNameList)) { + return fieldNameList.toArray(new String[]{}); + } + return new String[]{}; + } + + /** + * 获取请求头中的设备信息。 + * + * @return 设备类型,具体值可参考AppDeviceType常量类。 + */ + public static int getDeviceType() { + // 缺省都按照Web登录方式设置,如果前端header中的值为不合法值,这里也不会报错,而是使用Web缺省方式。 + int deviceType = AppDeviceType.WEB; + String deviceTypeString = ContextUtil.getHttpRequest().getHeader("deviceType"); + if (StrUtil.isNotBlank(deviceTypeString)) { + Integer type = Integer.valueOf(deviceTypeString); + if (AppDeviceType.isValid(type)) { + deviceType = type; + } + } + return deviceType; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyCommonUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyDateUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyDateUtil.java new file mode 100644 index 00000000..a46fe00b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyDateUtil.java @@ -0,0 +1,181 @@ +package com.flow.demo.common.core.util; + +import com.flow.demo.common.core.object.Tuple2; +import org.apache.commons.lang3.time.DateUtils; +import org.joda.time.DateTime; +import org.joda.time.Period; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +import java.util.Calendar; +import java.util.Date; + +import static org.joda.time.PeriodType.days; + +/** + * 日期工具类,主要封装了部分joda-time中的方法,让很多代码一行完成,同时统一了日期到字符串的pattern格式。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class MyDateUtil { + + /** + * 统一的日期pattern,今后可以根据自己的需求去修改。 + */ + public static final String COMMON_DATE_FORMAT = "yyyy-MM-dd"; + /** + * 统一的日期时间pattern,今后可以根据自己的需求去修改。 + */ + public static final String COMMON_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; + /** + * 缺省日期格式化器,提前获取提升运行时效率。 + */ + private static final DateTimeFormatter DATE_PARSE_FORMATTER = + DateTimeFormat.forPattern(MyDateUtil.COMMON_DATE_FORMAT); + /** + * 缺省日期时间格式化器,提前获取提升运行时效率。 + */ + private static final DateTimeFormatter DATETIME_PARSE_FORMATTER = + DateTimeFormat.forPattern(MyDateUtil.COMMON_DATETIME_FORMAT); + + /** + * 获取一天的开始时间的字符串格式,如2019-08-03 00:00:00.000。 + * + * @param dateTime 待格式化的日期时间对象。 + * @return 格式化后的字符串。 + */ + public static String getBeginTimeOfDay(DateTime dateTime) { + return dateTime.withTimeAtStartOfDay().toString(COMMON_DATETIME_FORMAT); + } + + /** + * 获取一天的结束时间的字符串格式,如2019-08-03 23:59:59.999。 + * + * @param dateTime 待格式化的日期时间对象。 + * @return 格式化后的字符串。 + */ + public static String getEndTimeOfDay(DateTime dateTime) { + return dateTime.withTime(23, 59, 59, 999).toString(COMMON_DATETIME_FORMAT); + } + + /** + * 获取一天中的开始时间和结束时间的字符串格式,如2019-08-03 00:00:00.000 和 2019-08-03 23:59:59.999。 + * + * @param dateTime 待格式化的日期时间对象。 + * @return 包含格式后字符串的二元组对象。 + */ + public static Tuple2 getDateTimeRangeOfDay(DateTime dateTime) { + return new Tuple2<>(getBeginTimeOfDay(dateTime), getEndTimeOfDay(dateTime)); + } + + /** + * 获取本月第一天的日期格式。如2019-08-01。 + * + * @param dateTime 待格式化的日期对象。 + * @return 格式化后的字符串。 + */ + public static String getBeginDateOfMonth(DateTime dateTime) { + return dateTime.withDayOfMonth(1).toString(COMMON_DATE_FORMAT); + } + + /** + * 获取本月第一天的日期格式。如2019-08-01。 + * + * @param dateString 待格式化的日期字符串对象。 + * @return 格式化后的字符串。 + */ + public static String getBeginDateOfMonth(String dateString) { + DateTime dateTime = toDate(dateString); + return dateTime.withDayOfMonth(1).toString(COMMON_DATE_FORMAT); + } + + /** + * 计算指定日期距离今天相差的天数。 + * + * @param dateTime 待格式化的日期时间对象。 + * @return 相差天数。 + */ + public static int getDayDiffToNow(DateTime dateTime) { + return new Period(dateTime, new DateTime(), days()).getDays(); + } + + /** + * 将日期对象格式化为缺省的字符串格式。 + * + * @param dateTime 待格式化的日期对象。 + * @return 格式化后的字符串。 + */ + public static String toDateString(DateTime dateTime) { + return dateTime.toString(COMMON_DATE_FORMAT); + } + + /** + * 将日期时间对象格式化为缺省的字符串格式。 + * + * @param dateTime 待格式化的日期对象。 + * @return 格式化后的字符串。 + */ + public static String toDateTimeString(DateTime dateTime) { + return dateTime.toString(COMMON_DATETIME_FORMAT); + } + + /** + * 将缺省格式的日期字符串解析为日期对象。 + * + * @param dateString 待解析的字符串。 + * @return 解析后的日期对象。 + */ + public static DateTime toDate(String dateString) { + return DATE_PARSE_FORMATTER.parseDateTime(dateString); + } + + /** + * 将缺省格式的日期字符串解析为日期对象。 + * + * @param dateTimeString 待解析的字符串。 + * @return 解析后的日期对象。 + */ + public static DateTime toDateTime(String dateTimeString) { + return DATETIME_PARSE_FORMATTER.parseDateTime(dateTimeString); + } + + /** + * 截取时间到天。如2019-10-03 01:20:30 转换为 2019-10-03 00:00:00。 + * 由于没有字符串的中间转换,因此效率更高。 + * + * @param date 待截取日期对象。 + * @return 转换后日期对象。 + */ + public static Date truncateToDay(Date date) { + return DateUtils.truncate(date, Calendar.DAY_OF_MONTH); + } + + /** + * 截取时间到月。如2019-10-03 01:20:30 转换为 2019-10-01 00:00:00。 + * 由于没有字符串的中间转换,因此效率更高。 + * + * @param date 待截取日期对象。 + * @return 转换后日期对象。 + */ + public static Date truncateToMonth(Date date) { + return DateUtils.truncate(date, Calendar.MONTH); + } + + /** + * 截取时间到年。如2019-10-03 01:20:30 转换为 2019-01-01 00:00:00。 + * 由于没有字符串的中间转换,因此效率更高。 + * + * @param date 待截取日期对象。 + * @return 转换后日期对象。 + */ + public static Date truncateToYear(Date date) { + return DateUtils.truncate(date, Calendar.YEAR); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyDateUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyModelUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyModelUtil.java new file mode 100644 index 00000000..e47f418d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyModelUtil.java @@ -0,0 +1,713 @@ +package com.flow.demo.common.core.util; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ReflectUtil; +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.exception.InvalidDataFieldException; +import com.flow.demo.common.core.annotation.*; +import com.flow.demo.common.core.exception.MyRuntimeException; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.core.object.Tuple2; +import com.flow.demo.common.core.upload.UploadStoreInfo; +import com.google.common.base.CaseFormat; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Field; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 负责Model数据操作、类型转换和关系关联等行为的工具类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class MyModelUtil { + + /** + * 数值型字段。 + */ + public static final Integer NUMERIC_FIELD_TYPE = 0; + /** + * 字符型字段。 + */ + public static final Integer STRING_FIELD_TYPE = 1; + /** + * 日期型字段。 + */ + public static final Integer DATE_FIELD_TYPE = 2; + /** + * 整个工程的实体对象中,创建者Id字段的Java对象名。 + */ + public static final String CREATE_USER_ID_FIELD_NAME = "createUserId"; + /** + * 整个工程的实体对象中,创建时间字段的Java对象名。 + */ + public static final String CREATE_TIME_FIELD_NAME = "createTime"; + /** + * 整个工程的实体对象中,更新者Id字段的Java对象名。 + */ + public static final String UPDATE_USER_ID_FIELD_NAME = "updateUserId"; + /** + * 整个工程的实体对象中,更新时间字段的Java对象名。 + */ + public static final String UPDATE_TIME_FIELD_NAME = "updateTime"; + /** + * mapToColumnName和mapToColumnInfo使用的缓存。 + */ + private static final Map> CACHED_COLUMNINFO_MAP = new ConcurrentHashMap<>(); + + /** + * 将bean的数据列表转换为Map列表。 + * + * @param dataList bean数据列表。 + * @param bean对象类型。 + * @return 转换后的Map列表。 + */ + public static List> beanToMapList(List dataList) { + if (CollectionUtils.isEmpty(dataList)) { + return null; + } + List> resultList = new LinkedList<>(); + for (T data : dataList) { + resultList.add(BeanUtil.beanToMap(data)); + } + return resultList; + } + + /** + * 拷贝源类型的集合数据到目标类型的集合中,其中源类型和目标类型中的对象字段类型完全相同。 + * NOTE: 该函数主要应用于框架中,Dto和Model之间的copy,特别针对一对一关联的深度copy。 + * 在Dto中,一对一对象可以使用Map来表示,而不需要使用从表对象的Dto。 + * + * @param sourceCollection 源类型集合。 + * @param targetClazz 目标类型的Class对象。 + * @param 源类型。 + * @param 目标类型。 + * @return copy后的目标类型对象集合。 + */ + public static List copyCollectionTo(Collection sourceCollection, Class targetClazz) { + List targetList = new LinkedList<>(); + if (CollectionUtils.isNotEmpty(sourceCollection)) { + for (S source : sourceCollection) { + try { + T target = targetClazz.newInstance(); + BeanUtil.copyProperties(source, target); + targetList.add(target); + } catch (Exception e) { + log.error("Failed to call MyModelUtil.copyCollectionTo", e); + return Collections.emptyList(); + } + } + } + return targetList; + } + + /** + * 拷贝源类型的对象数据到目标类型的对象中,其中源类型和目标类型中的对象字段类型完全相同。 + * NOTE: 该函数主要应用于框架中,Dto和Model之间的copy,特别针对一对一关联的深度copy。 + * 在Dto中,一对一对象可以使用Map来表示,而不需要使用从表对象的Dto。 + * + * @param source 源类型对象。 + * @param targetClazz 目标类型的Class对象。 + * @param 源类型。 + * @param 目标类型。 + * @return copy后的目标类型对象。 + */ + public static T copyTo(S source, Class targetClazz) { + if (source == null) { + return null; + } + try { + T target = targetClazz.newInstance(); + BeanUtil.copyProperties(source, target); + return target; + } catch (Exception e) { + log.error("Failed to call MyModelUtil.copyTo", e); + return null; + } + } + + /** + * 映射Model对象的字段反射对象,获取与该字段对应的数据库列名称。 + * + * @param field 字段反射对象。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称。 + */ + public static String mapToColumnName(Field field, Class modelClazz) { + return mapToColumnName(field.getName(), modelClazz); + } + + /** + * 映射Model对象的字段名称,获取与该字段对应的数据库列名称。 + * + * @param fieldName 字段名称。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称。 + */ + public static String mapToColumnName(String fieldName, Class modelClazz) { + Tuple2 columnInfo = mapToColumnInfo(fieldName, modelClazz); + return columnInfo == null ? null : columnInfo.getFirst(); + } + + /** + * 映射Model对象的字段反射对象,获取与该字段对应的数据库列名称。 + * 如果没有匹配到ColumnName,则立刻抛出异常。 + * + * @param field 字段反射对象。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称。 + */ + public static String safeMapToColumnName(Field field, Class modelClazz) { + return safeMapToColumnName(field.getName(), modelClazz); + } + + /** + * 映射Model对象的字段名称,获取与该字段对应的数据库列名称。 + * 如果没有匹配到ColumnName,则立刻抛出异常。 + * + * @param fieldName 字段名称。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称。 + */ + public static String safeMapToColumnName(String fieldName, Class modelClazz) { + String columnName = mapToColumnName(fieldName, modelClazz); + if (columnName == null) { + throw new InvalidDataFieldException(modelClazz.getSimpleName(), fieldName); + } + return columnName; + } + + /** + * 映射Model对象的字段名称,获取与该字段对应的数据库列名称和字段类型。 + * + * @param fieldName 字段名称。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称和Java字段类型。 + */ + public static Tuple2 mapToColumnInfo(String fieldName, Class modelClazz) { + if (StringUtils.isBlank(fieldName)) { + return null; + } + StringBuilder sb = new StringBuilder(128); + sb.append(modelClazz.getName()).append("-#-").append(fieldName); + Tuple2 columnInfo = CACHED_COLUMNINFO_MAP.get(sb.toString()); + if (columnInfo == null) { + Field field = ReflectUtil.getField(modelClazz, fieldName); + if (field == null) { + return null; + } + TableField c = field.getAnnotation(TableField.class); + String columnName = null; + if (c == null) { + TableId id = field.getAnnotation(TableId.class); + if (id != null) { + columnName = id.value(); + } + } + if (columnName == null) { + columnName = c == null ? CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldName) : c.value(); + if (StringUtils.isBlank(columnName)) { + columnName = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldName); + } + } + // 这里缺省情况下都是按照整型去处理,因为他覆盖太多的类型了。 + // 如Integer/Long/Double/BigDecimal,可根据实际情况完善和扩充。 + String typeName = field.getType().getSimpleName(); + Integer type = NUMERIC_FIELD_TYPE; + if (String.class.getSimpleName().equals(typeName)) { + type = STRING_FIELD_TYPE; + } else if (Date.class.getSimpleName().equals(typeName)) { + type = DATE_FIELD_TYPE; + } + columnInfo = new Tuple2<>(columnName, type); + CACHED_COLUMNINFO_MAP.put(sb.toString(), columnInfo); + } + return columnInfo; + } + + /** + * 映射Model主对象的Class名称,到Model所对应的表名称。 + * + * @param modelClazz Model主对象的Class。 + * @return Model对象对应的数据表名称。 + */ + public static String mapToTableName(Class modelClazz) { + TableName t = modelClazz.getAnnotation(TableName.class); + return t == null ? null : t.value(); + } + + /** + * 主Model类型中,遍历所有包含RelationConstDict注解的字段,并将关联的静态字典中的数据, + * 填充到thisModel对象的被注解字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModel 主对象。 + * @param 主表对象类型。 + */ + @SuppressWarnings("unchecked") + public static void makeConstDictRelation(Class thisClazz, T thisModel) { + if (thisModel == null) { + return; + } + Field[] fields = ReflectUtil.getFields(thisClazz); + for (Field field : fields) { + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, field.getName()); + RelationConstDict r = thisTargetField.getAnnotation(RelationConstDict.class); + if (r == null) { + continue; + } + Field dictMapField = ReflectUtil.getField(r.constantDictClass(), "DICT_MAP"); + Map dictMap = + (Map) ReflectUtil.getFieldValue(r.constantDictClass(), dictMapField); + Object id = ReflectUtil.getFieldValue(thisModel, r.masterIdField()); + if (id != null) { + String name = dictMap.get(id); + if (name != null) { + Map m = new HashMap<>(2); + m.put("id", id); + m.put("name", name); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + } + } + } + + /** + * 主Model类型中,遍历所有包含RelationConstDict注解的字段,并将关联的静态字典中的数据, + * 填充到thisModelList集合元素对象的被注解字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param 主表对象类型。 + */ + @SuppressWarnings("unchecked") + public static void makeConstDictRelation(Class thisClazz, List thisModelList) { + if (CollectionUtils.isEmpty(thisModelList)) { + return; + } + Field[] fields = ReflectUtil.getFields(thisClazz); + for (Field field : fields) { + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, field.getName()); + RelationConstDict r = thisTargetField.getAnnotation(RelationConstDict.class); + if (r == null) { + continue; + } + Field dictMapField = ReflectUtil.getField(r.constantDictClass(), "DICT_MAP"); + Map dictMap = + (Map) ReflectUtil.getFieldValue(r.constantDictClass(), dictMapField); + for (T thisModel : thisModelList) { + if (thisModel == null) { + continue; + } + Object id = ReflectUtil.getFieldValue(thisModel, r.masterIdField()); + if (id != null) { + String name = dictMap.get(id); + if (name != null) { + Map m = new HashMap<>(2); + m.put("id", id); + m.put("name", name); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + } + } + } + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationDict注解参数,将被关联对象thatModel中的数据, + * 关联到thisModel对象的thisRelationField字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModel 主对象。 + * @param thatModel 字典关联对象。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeDictRelation( + Class thisClazz, T thisModel, R thatModel, String thisRelationField) { + if (thatModel == null || thisModel == null) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationDict r = thisTargetField.getAnnotation(RelationDict.class); + Class thatClass = r.slaveModelClass(); + Field slaveIdField = ReflectUtil.getField(thatClass, r.slaveIdField()); + Field slaveNameField = ReflectUtil.getField(thatClass, r.slaveNameField()); + Map m = new HashMap<>(2); + m.put("id", ReflectUtil.getFieldValue(thatModel, slaveIdField)); + m.put("name", ReflectUtil.getFieldValue(thatModel, slaveNameField)); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationDict注解参数,将被关联对象集合thatModelList中的数据, + * 逐个关联到thisModelList每一个元素的thisRelationField字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thatModelList 字典关联对象列表集合。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeDictRelation( + Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { + if (CollectionUtils.isEmpty(thatModelList) + || CollectionUtils.isEmpty(thisModelList)) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationDict r = thisTargetField.getAnnotation(RelationDict.class); + Field masterIdField = ReflectUtil.getField(thisClazz, r.masterIdField()); + Class thatClass = r.slaveModelClass(); + Field slaveIdField = ReflectUtil.getField(thatClass, r.slaveIdField()); + Field slaveNameField = ReflectUtil.getField(thatClass, r.slaveNameField()); + Map thatMap = new HashMap<>(20); + thatModelList.forEach(thatModel -> { + Object id = ReflectUtil.getFieldValue(thatModel, slaveIdField); + thatMap.put(id, thatModel); + }); + thisModelList.forEach(thisModel -> { + if (thisModel != null) { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + R thatModel = thatMap.get(id); + if (thatModel != null) { + Map m = new HashMap<>(4); + m.put("id", id); + m.put("name", ReflectUtil.getFieldValue(thatModel, slaveNameField)); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + } + }); + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationDict注解参数,将被关联对象集合thatModelMap中的数据, + * 逐个关联到thisModelList每一个元素的thisRelationField字段中。 + * 该函数之所以使用Map,主要出于性能优化考虑,在连续使用thatModelMap进行关联时,有效的避免了从多次从List转换到Map的过程。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thatMadelMap 字典关联对象映射集合。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeDictRelation( + Class thisClazz, List thisModelList, Map thatMadelMap, String thisRelationField) { + if (MapUtils.isEmpty(thatMadelMap) + || CollectionUtils.isEmpty(thisModelList)) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationDict r = thisTargetField.getAnnotation(RelationDict.class); + Field masterIdField = ReflectUtil.getField(thisClazz, r.masterIdField()); + Class thatClass = r.slaveModelClass(); + Field slaveNameField = ReflectUtil.getField(thatClass, r.slaveNameField()); + thisModelList.forEach(thisModel -> { + if (thisModel != null) { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + R thatModel = thatMadelMap.get(id); + if (thatModel != null) { + Map m = new HashMap<>(4); + m.put("id", id); + m.put("name", ReflectUtil.getFieldValue(thatModel, slaveNameField)); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + } + }); + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationOneToOne注解参数,将被关联对象列表thatModelList中的数据, + * 逐个关联到thisModelList每一个元素的thisRelationField字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thatModelList 一对一关联对象列表。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeOneToOneRelation( + Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { + if (CollectionUtils.isEmpty(thatModelList) + || CollectionUtils.isEmpty(thisModelList)) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationOneToOne r = thisTargetField.getAnnotation(RelationOneToOne.class); + Field masterIdField = ReflectUtil.getField(thisClazz, r.masterIdField()); + Class thatClass = r.slaveModelClass(); + Field slaveIdField = ReflectUtil.getField(thatClass, r.slaveIdField()); + Map thatMap = new HashMap<>(20); + thatModelList.forEach(thatModel -> { + Object id = ReflectUtil.getFieldValue(thatModel, slaveIdField); + thatMap.put(id, thatModel); + }); + // 判断放在循环的外部,提升一点儿效率。 + if (thisTargetField.getType().equals(Map.class)) { + thisModelList.forEach(thisModel -> { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + R thatModel = thatMap.get(id); + if (thatModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, BeanUtil.beanToMap(thatModel)); + } + }); + } else { + thisModelList.forEach(thisModel -> { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + R thatModel = thatMap.get(id); + if (thatModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, thatModel); + } + }); + } + } + + /** + * 根据主对象和关联对象各自的关联Id函数,将主对象列表和关联对象列表中的数据关联到一起,并将关联对象 + * 设置到主对象的指定关联字段中。 + * NOTE: 用于主对象关联字段中,没有包含RelationOneToOne注解的场景。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thisIdGetterFunc 主对象Id的Getter函数。 + * @param thatModelList 关联对象列表。 + * @param thatIdGetterFunc 关联对象Id的Getter函数。 + * @param thisRelationField 主对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeOneToOneRelation( + Class thisClazz, + List thisModelList, + Function thisIdGetterFunc, + List thatModelList, + Function thatIdGetterFunc, + String thisRelationField) { + makeOneToOneRelation(thisClazz, thisModelList, + thisIdGetterFunc, thatModelList, thatIdGetterFunc, thisRelationField, false); + } + + /** + * 根据主对象和关联对象各自的关联Id函数,将主对象列表和关联对象列表中的数据关联到一起,并将关联对象 + * 设置到主对象的指定关联字段中。 + * NOTE: 用于主对象关联字段中,没有包含RelationOneToOne注解的场景。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thisIdGetterFunc 主对象Id的Getter函数。 + * @param thatModelList 关联对象列表。 + * @param thatIdGetterFunc 关联对象Id的Getter函数。 + * @param thisRelationField 主对象中保存被关联对象的字段名称。 + * @param orderByThatList 如果为true,则按照ThatModelList的顺序输出。同时thisModelList被排序后的新列表替换。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeOneToOneRelation( + Class thisClazz, + List thisModelList, + Function thisIdGetterFunc, + List thatModelList, + Function thatIdGetterFunc, + String thisRelationField, + boolean orderByThatList) { + if (CollectionUtils.isEmpty(thisModelList)) { + return; + } + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + boolean isMap = thisTargetField.getType().equals(Map.class); + if (orderByThatList) { + List newThisModelList = new LinkedList<>(); + Map thisModelMap = + thisModelList.stream().collect(Collectors.toMap(thisIdGetterFunc, c -> c)); + thatModelList.forEach(thatModel -> { + Object thatId = thatIdGetterFunc.apply(thatModel); + T thisModel = thisModelMap.get(thatId); + if (thisModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, normalize(isMap, thatModel)); + newThisModelList.add(thisModel); + } + }); + thisModelList.clear(); + thisModelList.addAll(newThisModelList); + } else { + Map thatMadelMap = + thatModelList.stream().collect(Collectors.toMap(thatIdGetterFunc, c -> c)); + thisModelList.forEach(thisModel -> { + Object thisId = thisIdGetterFunc.apply(thisModel); + R thatModel = thatMadelMap.get(thisId); + if (thatModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, normalize(isMap, thatModel)); + } + }); + } + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationOneToMany注解参数,将被关联对象列表thatModelList中的数据, + * 逐个关联到thisModelList每一个元素的thisRelationField字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thatModelList 一对多关联对象列表。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeOneToManyRelation( + Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { + if (CollectionUtils.isEmpty(thatModelList) || CollectionUtils.isEmpty(thisModelList)) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationOneToMany r = thisTargetField.getAnnotation(RelationOneToMany.class); + Field masterIdField = ReflectUtil.getField(thisClazz, r.masterIdField()); + Class thatClass = r.slaveModelClass(); + Field slaveIdField = ReflectUtil.getField(thatClass, r.slaveIdField()); + Map> thatMap = new HashMap<>(20); + thatModelList.forEach(thatModel -> { + Object id = ReflectUtil.getFieldValue(thatModel, slaveIdField); + List thatModelSubList = thatMap.computeIfAbsent(id, k -> new LinkedList<>()); + thatModelSubList.add(thatModel); + }); + thisModelList.forEach(thisModel -> { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + List thatModel = thatMap.get(id); + if (thatModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, thatModel); + } + }); + } + + private static Object normalize(boolean isMap, M model) { + return isMap ? BeanUtil.beanToMap(model) : model; + } + + /** + * 获取上传字段的存储信息。 + * + * @param modelClass model的class对象。 + * @param uploadFieldName 上传字段名。 + * @param model的类型。 + * @return 字段的上传存储信息对象。该值始终不会返回null。 + */ + public static UploadStoreInfo getUploadStoreInfo(Class modelClass, String uploadFieldName) { + UploadStoreInfo uploadStoreInfo = new UploadStoreInfo(); + Field uploadField = ReflectUtil.getField(modelClass, uploadFieldName); + if (uploadField == null) { + throw new UnsupportedOperationException("The Field [" + + uploadFieldName + "] doesn't exist in Model [" + modelClass.getSimpleName() + "]."); + } + uploadStoreInfo.setSupportUpload(false); + UploadFlagColumn anno = uploadField.getAnnotation(UploadFlagColumn.class); + if (anno != null) { + uploadStoreInfo.setSupportUpload(true); + uploadStoreInfo.setStoreType(anno.storeType()); + } + return uploadStoreInfo; + } + + /** + * 在插入实体对象数据之前,可以调用该方法,初始化通用字段的数据。 + * + * @param data 实体对象。 + * @param 实体对象类型。 + */ + public static void fillCommonsForInsert(M data) { + try { + Field createdByField = ReflectUtil.getField(data.getClass(), CREATE_USER_ID_FIELD_NAME); + if (createdByField != null) { + ReflectUtil.setAccessible(createdByField); + createdByField.set(data, TokenData.takeFromRequest().getUserId()); + } + Field createTimeField = ReflectUtil.getField(data.getClass(), CREATE_TIME_FIELD_NAME); + if (createTimeField != null) { + ReflectUtil.setAccessible(createTimeField); + createTimeField.set(data, new Date()); + } + Field updatedByField = ReflectUtil.getField(data.getClass(), UPDATE_USER_ID_FIELD_NAME); + if (updatedByField != null) { + ReflectUtil.setAccessible(updatedByField); + updatedByField.set(data, TokenData.takeFromRequest().getUserId()); + } + Field updateTimeField = ReflectUtil.getField(data.getClass(), UPDATE_TIME_FIELD_NAME); + if (updateTimeField != null) { + ReflectUtil.setAccessible(updateTimeField); + updateTimeField.set(data, new Date()); + } + } catch (IllegalAccessException e) { + throw new MyRuntimeException(e); + } + } + + /** + * 在更新实体对象数据之前,可以调用该方法,更新通用字段的数据。 + * + * @param data 实体对象。 + * @param originalData 原有实体对象。 + * @param 实体对象类型。 + */ + public static void fillCommonsForUpdate(M data, M originalData) { + try { + Object createdByValue = ReflectUtil.getFieldValue(originalData, CREATE_USER_ID_FIELD_NAME); + if (createdByValue != null) { + ReflectUtil.setFieldValue(data, CREATE_USER_ID_FIELD_NAME, createdByValue); + } + Object createTimeValue = ReflectUtil.getFieldValue(originalData, CREATE_TIME_FIELD_NAME); + if (createTimeValue != null) { + ReflectUtil.setFieldValue(data, CREATE_TIME_FIELD_NAME, createTimeValue); + } + Field updatedByField = ReflectUtil.getField(data.getClass(), UPDATE_USER_ID_FIELD_NAME); + if (updatedByField != null) { + ReflectUtil.setAccessible(updatedByField); + updatedByField.set(data, TokenData.takeFromRequest().getUserId()); + } + Field updateTimeField = ReflectUtil.getField(data.getClass(), UPDATE_TIME_FIELD_NAME); + if (updateTimeField != null) { + ReflectUtil.setAccessible(updateTimeField); + updateTimeField.set(data, new Date()); + } + } catch (IllegalAccessException e) { + throw new MyRuntimeException(e); + } + } + + /** + * 为实体对象字段设置缺省值。如果data对象中指定字段的值为NULL,则设置缺省值,否则跳过。 + * @param data 实体对象。 + * @param fieldName 实体对象字段名。 + * @param defaultValue 缺省值。 + * @param 实体对象类型。 + * @param 缺省值类型。 + */ + public static void setDefaultValue(M data, String fieldName, V defaultValue) { + Object v = ReflectUtil.getFieldValue(data, fieldName); + if (v == null) { + ReflectUtil.setFieldValue(data, fieldName, defaultValue); + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyModelUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyPageUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyPageUtil.java new file mode 100644 index 00000000..6b167ed7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/MyPageUtil.java @@ -0,0 +1,108 @@ +package com.flow.demo.common.core.util; + +import cn.jimmyshi.beanquery.BeanQuery; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.Page; +import org.apache.commons.collections4.CollectionUtils; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.core.object.MyPageData; +import com.flow.demo.common.core.object.Tuple2; + +import java.util.List; + +/** + * 生成带有分页信息的数据列表 + * + * @author Jerry + * @date 2021-06-06 + */ +public class MyPageUtil { + + private static final String DATA_LIST_LITERAL = "dataList"; + private static final String TOTAL_COUNT_LITERAL = "totalCount"; + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param dataList 数据列表,该参数必须是调用PageMethod.startPage之后,立即执行mybatis查询操作的结果集。 + * @param includeFields 结果集中需要返回到前端的字段,多个字段之间逗号分隔。 + * @return 返回只是包含includeFields字段的数据列表,以及结果集TotalCount。 + */ + public static JSONObject makeResponseData(List dataList, String includeFields) { + JSONObject pageData = new JSONObject(); + pageData.put(DATA_LIST_LITERAL, BeanQuery.select(includeFields).from(dataList).execute()); + if (dataList instanceof Page) { + pageData.put(TOTAL_COUNT_LITERAL, ((Page)dataList).getTotal()); + } + return pageData; + } + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param dataList 数据列表,该参数必须是调用PageMethod.startPage之后,立即执行mybatis查询操作的结果集。 + * @return 返回分页数据对象。 + */ + public static MyPageData makeResponseData(List dataList) { + MyPageData pageData = new MyPageData<>(); + pageData.setDataList(dataList); + if (dataList instanceof Page) { + pageData.setTotalCount(((Page)dataList).getTotal()); + } + return pageData; + } + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param dataList 数据列表,该参数必须是调用PageMethod.startPage之后,立即执行mybatis查询操作的结果集。 + * @param totalCount 总数量。 + * @return 返回分页数据对象。 + */ + public static MyPageData makeResponseData(List dataList, Long totalCount) { + MyPageData pageData = new MyPageData<>(); + pageData.setDataList(dataList); + if (totalCount != null) { + pageData.setTotalCount(totalCount); + } + return pageData; + } + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param dataList 实体对象数据列表。 + * @param modelMapper 实体对象到DomainVO对象的数据映射器。 + * @param DomainVO对象类型。 + * @param 实体对象类型。 + * @return 返回分页数据对象。 + */ + public static MyPageData makeResponseData(List dataList, BaseModelMapper modelMapper) { + long totalCount = 0L; + if (CollectionUtils.isEmpty(dataList)) { + // 这里需要构建分页数据对象,统一前端数据格式 + return MyPageData.emptyPageData(); + } + if (dataList instanceof Page) { + totalCount = ((Page) dataList).getTotal(); + } + return MyPageUtil.makeResponseData(modelMapper.fromModelList(dataList), totalCount); + } + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param responseData 第一个数据时数据列表,第二个是列表数量。 + * @param 源数据类型。 + * @return 返回分页数据对象。 + */ + public static MyPageData makeResponseData(Tuple2, Long> responseData) { + return makeResponseData(responseData.getFirst(), responseData.getSecond()); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyPageUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/RedisKeyUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/RedisKeyUtil.java new file mode 100644 index 00000000..065a1477 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/RedisKeyUtil.java @@ -0,0 +1,86 @@ +package com.flow.demo.common.core.util; + +/** + * Redis 键生成工具类。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class RedisKeyUtil { + + /** + * 获取通用的session缓存的键前缀。 + * + * @return session缓存的键前缀。 + */ + public static String getSessionIdPrefix() { + return "SESSIONID__"; + } + + /** + * 获取指定用户Id的session缓存的键前缀。 + * + * @param loginName 指定的用户登录名。 + * @return session缓存的键前缀。 + */ + public static String getSessionIdPrefix(String loginName) { + return "SESSIONID__" + loginName + "_"; + } + + /** + * 获取指定用户Id和登录设备类型的session缓存的键前缀。 + * + * @param loginName 指定的用户登录名。 + * @param deviceType 设备类型。 + * @return session缓存的键前缀。 + */ + public static String getSessionIdPrefix(String loginName, int deviceType) { + return "SESSIONID__" + loginName + "_" + deviceType + "_"; + } + + /** + * 计算SessionId返回存储于Redis中的键。 + * + * @param sessionId 会话Id。 + * @return 会话存储于Redis中的键值。 + */ + public static String makeSessionIdKey(String sessionId) { + return "SESSIONID__" + sessionId; + } + + /** + * 计算SessionId关联的权限数据存储于Redis中的键。 + * + * @param sessionId 会话Id。 + * @return 会话关联的权限数据存储于Redis中的键值。 + */ + public static String makeSessionPermIdKey(String sessionId) { + return "PERM__" + sessionId; + } + + /** + * 计算SessionId关联的数据权限数据存储于Redis中的键。 + * + * @param sessionId 会话Id。 + * @return 会话关联的数据权限数据存储于Redis中的键值。 + */ + public static String makeSessionDataPermIdKey(String sessionId) { + return "DATA_PERM__" + sessionId; + } + + /** + * 计算在线表对象缓存在Redis中的键值。 + * + * @param tableId 在线表主键Id。 + * @return 会话关联的数据权限数据存储于Redis中的键值。 + */ + public static String makeOnlineTableKey(Long tableId) { + return "ONLINE_TABLE_" + tableId; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private RedisKeyUtil() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/RsaUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/RsaUtil.java new file mode 100644 index 00000000..a8b37ed0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/RsaUtil.java @@ -0,0 +1,115 @@ +package com.flow.demo.common.core.util; + +import javax.crypto.Cipher; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * Java RSA 加密工具类。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class RsaUtil { + + /** + * 密钥长度 于原文长度对应 以及越长速度越慢 + */ + private static final int KEY_SIZE = 1024; + /** + * 用于封装随机产生的公钥与私钥 + */ + private static final Map KEY_MAP = new HashMap<>(); + + /** + * 随机生成密钥对。 + */ + public static void genKeyPair() throws NoSuchAlgorithmException { + // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象 + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + // 初始化密钥对生成器 + keyPairGen.initialize(KEY_SIZE, new SecureRandom()); + // 生成一个密钥对,保存在keyPair中 + KeyPair keyPair = keyPairGen.generateKeyPair(); + // 得到私钥 + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + // 得到公钥 + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + String publicKeyString = Base64.getEncoder().encodeToString(publicKey.getEncoded()); + // 得到私钥字符串 + String privateKeyString = Base64.getEncoder().encodeToString(privateKey.getEncoded()); + // 将公钥和私钥保存到Map + // 0表示公钥 + KEY_MAP.put(0, publicKeyString); + // 1表示私钥 + KEY_MAP.put(1, privateKeyString); + } + + /** + * RSA公钥加密。 + * + * @param str 加密字符串 + * @param publicKey 公钥 + * @return 密文 + * @throws Exception 加密过程中的异常信息 + */ + public static String encrypt(String str, String publicKey) throws Exception { + // base64编码的公钥 + byte[] decoded = Base64.getDecoder().decode(publicKey); + RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); + // RSA加密。后面这个更安全,但是SonarQube始终report安全漏洞。"RSA/ECB/PKCS1Padding" + // 而浏览器自带的Javascript加密功能,目前safari不支持,而且用的人也不太多。所以暂时都不考虑了。 + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, pubKey); + return Base64.getEncoder().encodeToString(cipher.doFinal(str.getBytes(StandardCharsets.UTF_8))); + } + + /** + * RSA私钥解密。 + * + * @param str 加密字符串 + * @param privateKey 私钥 + * @return 明文 + * @throws Exception 解密过程中的异常信息 + */ + public static String decrypt(String str, String privateKey) throws Exception { + // 64位解码加密后的字符串 + byte[] inputByte = Base64.getDecoder().decode(str); + // base64编码的私钥 + byte[] decoded = Base64.getDecoder().decode(privateKey); + RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); + // RSA解密 + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, priKey); + return new String(cipher.doFinal(inputByte)); + } + + public static void main(String[] args) throws Exception { + long temp = System.currentTimeMillis(); + // 生成公钥和私钥 + genKeyPair(); + // 加密字符串 + System.out.println("公钥:" + KEY_MAP.get(0)); + System.out.println("私钥:" + KEY_MAP.get(1)); + System.out.println("生成密钥消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + System.out.println("生成后的公钥前端使用!"); + System.out.println("生成后的私钥后台使用!"); + String message = "RSA测试ABCD~!@#$"; + System.out.println("原文:" + message); + temp = System.currentTimeMillis(); + String messageEn = encrypt(message, KEY_MAP.get(0)); + System.out.println("密文:" + messageEn); + System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + temp = System.currentTimeMillis(); + String messageDe = decrypt(messageEn, KEY_MAP.get(1)); + System.out.println("解密:" + messageDe); + System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + } +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/TreeNode.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/TreeNode.java new file mode 100644 index 00000000..8f52d5ff --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/util/TreeNode.java @@ -0,0 +1,93 @@ +package com.flow.demo.common.core.util; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +/** + * 将列表结构组建为树结构的工具类。 + * + * @param 对象类型。 + * @param 节点之间关联键的类型。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class TreeNode { + + private K id; + private K parentId; + private T data; + private List> childList = new ArrayList<>(); + + /** + * 将列表结构组建为树结构的工具方法。 + * + * @param dataList 数据列表结构。 + * @param idFunc 获取关联id的函数对象。 + * @param parentIdFunc 获取关联ParentId的函数对象。 + * @param root 根节点。 + * @param 数据对象类型。 + * @param 节点之间关联键的类型。 + * @return 源数据对象的树结构存储。 + */ + public static List> build( + List dataList, Function idFunc, Function parentIdFunc, K root) { + List> treeNodeList = new ArrayList<>(); + for (T data : dataList) { + if (parentIdFunc.apply(data).equals(idFunc.apply(data))) { + continue; + } + TreeNode dataNode = new TreeNode<>(); + dataNode.setId(idFunc.apply(data)); + dataNode.setParentId(parentIdFunc.apply(data)); + dataNode.setData(data); + treeNodeList.add(dataNode); + } + return root == null ? toBuildTreeWithoutRoot(treeNodeList) : toBuildTree(treeNodeList, root); + } + + private static List> toBuildTreeWithoutRoot(List> treeNodes) { + Map> treeNodeMap = new HashMap<>(treeNodes.size()); + for (TreeNode treeNode : treeNodes) { + treeNodeMap.put(treeNode.id, treeNode); + } + List> treeNodeList = new ArrayList<>(); + for (TreeNode treeNode : treeNodes) { + TreeNode parentNode = treeNodeMap.get(treeNode.getParentId()); + if (parentNode == null) { + treeNodeList.add(treeNode); + } else { + parentNode.add(treeNode); + } + } + return treeNodeList; + } + + private static List> toBuildTree(List> treeNodes, K root) { + List> treeNodeList = new ArrayList<>(); + for (TreeNode treeNode : treeNodes) { + if (root.equals(treeNode.getParentId())) { + treeNodeList.add(treeNode); + } + for (TreeNode it : treeNodes) { + if (it.getParentId() == treeNode.getId()) { + if (treeNode.getChildList() == null) { + treeNode.setChildList(new ArrayList<>()); + } + treeNode.add(it); + } + } + } + return treeNodeList; + } + + private void add(TreeNode node) { + childList.add(node); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/AddGroup.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/AddGroup.java new file mode 100644 index 00000000..5b8b586a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/AddGroup.java @@ -0,0 +1,10 @@ +package com.flow.demo.common.core.validator; + +/** + * 数据增加的验证分组。通常用于数据新增场景。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface AddGroup { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/ConstDictRef.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/ConstDictRef.java new file mode 100644 index 00000000..01990460 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/ConstDictRef.java @@ -0,0 +1,48 @@ +package com.flow.demo.common.core.validator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 定义在Model对象中,标注字段值引用自指定的常量字典,和ConstDictRefValidator对象配合完成数据验证。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = ConstDictValidator.class) +public @interface ConstDictRef { + + /** + * 引用的常量字典对象,该对象必须包含isValid的静态方法。 + * + * @return 最大长度。 + */ + Class constDictClass(); + + /** + * 超过边界后的错误消息提示。 + * + * @return 错误提示。 + */ + String message() default "无效的字典引用值!"; + + /** + * 验证分组。 + * + * @return 验证分组。 + */ + Class[] groups() default {}; + + /** + * 载荷对象类型。 + * + * @return 载荷对象。 + */ + Class[] payload() default {}; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/ConstDictValidator.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/ConstDictValidator.java new file mode 100644 index 00000000..d62b6a88 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/ConstDictValidator.java @@ -0,0 +1,33 @@ +package com.flow.demo.common.core.validator; + +import cn.hutool.core.util.ReflectUtil; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.lang.reflect.Method; + +/** + * 数据字段自定义验证,用于验证Model中字符串字段的最大长度和最小长度。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class ConstDictValidator implements ConstraintValidator { + + private ConstDictRef constDictRef; + + @Override + public void initialize(ConstDictRef constDictRef) { + this.constDictRef = constDictRef; + } + + @Override + public boolean isValid(Object s, ConstraintValidatorContext constraintValidatorContext) { + if (s == null) { + return true; + } + Method method = + ReflectUtil.getMethodByName(constDictRef.constDictClass(), "isValid"); + return ReflectUtil.invokeStatic(method, s); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/TextLength.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/TextLength.java new file mode 100644 index 00000000..ec3a9795 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/TextLength.java @@ -0,0 +1,55 @@ +package com.flow.demo.common.core.validator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 定义在Model或Dto对象中,UTF-8编码的字符串字段长度的上限和下限,和TextLengthValidator对象配合完成数据验证。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = TextLengthValidator.class) +public @interface TextLength { + + /** + * 字符串字段的最小长度。 + * + * @return 最小长度。 + */ + int min() default 0; + + /** + * 字符串字段的最大长度。 + * + * @return 最大长度。 + */ + int max() default Integer.MAX_VALUE; + + /** + * 超过边界后的错误消息提示。 + * + * @return 错误提示。 + */ + String message() default "字段长度超过最大字节数!"; + + /** + * 验证分组。 + * + * @return 验证分组。 + */ + Class[] groups() default { }; + + /** + * 载荷对象类型。 + * + * @return 载荷对象。 + */ + Class[] payload() default { }; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/TextLengthValidator.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/TextLengthValidator.java new file mode 100644 index 00000000..5c40ddc8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/TextLengthValidator.java @@ -0,0 +1,39 @@ +package com.flow.demo.common.core.validator; + +import org.apache.commons.lang3.CharUtils; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * 数据字段自定义验证,用于验证Model中UTF-8编码的字符串字段的最大长度和最小长度。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class TextLengthValidator implements ConstraintValidator { + + private TextLength textLength; + + @Override + public void initialize(TextLength textLength) { + this.textLength = textLength; + } + + @Override + public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { + if (s == null) { + return true; + } + int length = 0; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (CharUtils.isAscii(c)) { + ++length; + } else { + length += 2; + } + } + return length >= textLength.min() && length <= textLength.max(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/UpdateGroup.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/UpdateGroup.java new file mode 100644 index 00000000..193406d6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-core/src/main/java/com/flow/demo/common/core/validator/UpdateGroup.java @@ -0,0 +1,11 @@ +package com.flow.demo.common.core.validator; + +/** + * 数据修改的验证分组。通常用于数据更新的场景。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface UpdateGroup { + +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/pom.xml new file mode 100644 index 00000000..62a44e17 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/pom.xml @@ -0,0 +1,29 @@ + + + + common + com.flow.demo + 1.0.0 + + 4.0.0 + + common-datafilter + 1.0.0 + common-datafilter + jar + + + + com.flow.demo + common-core + 1.0.0 + + + com.flow.demo + common-redis + 1.0.0 + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/aop/DisableDataFilterAspect.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/aop/DisableDataFilterAspect.java new file mode 100644 index 00000000..dad1b077 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/aop/DisableDataFilterAspect.java @@ -0,0 +1,41 @@ +package com.flow.demo.common.datafilter.aop; + +import com.flow.demo.common.core.object.GlobalThreadLocal; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + * 禁用Mybatis拦截器数据过滤的AOP处理类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Aspect +@Component +@Order(1) +@Slf4j +public class DisableDataFilterAspect { + + /** + * 所有标记了DisableDataFilter注解的方法。 + */ + @Pointcut("@annotation(com.flow.demo.common.core.annotation.DisableDataFilter)") + public void disableDataFilterPointCut() { + // 空注释,避免sonar警告 + } + + @Around("disableDataFilterPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + boolean dataFilterEnabled = GlobalThreadLocal.setDataFilter(false); + try { + return point.proceed(); + } finally { + GlobalThreadLocal.setDataFilter(dataFilterEnabled); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/config/DataFilterAutoConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/config/DataFilterAutoConfig.java new file mode 100644 index 00000000..8a330340 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/config/DataFilterAutoConfig.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.datafilter.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-datafilter模块的自动配置引导类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EnableConfigurationProperties({DataFilterProperties.class}) +public class DataFilterAutoConfig { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/config/DataFilterProperties.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/config/DataFilterProperties.java new file mode 100644 index 00000000..a8e401f5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/config/DataFilterProperties.java @@ -0,0 +1,44 @@ +package com.flow.demo.common.datafilter.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * common-datafilter模块的配置类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ConfigurationProperties(prefix = "datafilter") +public class DataFilterProperties { + + /** + * 是否启用租户过滤。 + */ + @Value("${datafilter.tenant.enabled}") + private Boolean enabledTenantFilter; + + /** + * 是否启动数据权限过滤。 + */ + @Value("${datafilter.dataperm.enabled}") + private Boolean enabledDataPermFilter; + + /** + * 部门关联表的表名前缀,如zz_。该值主要用在MybatisDataFilterInterceptor拦截器中, + * 用于拼接数据权限过滤的SQL语句。 + */ + @Value("${datafilter.dataperm.deptRelationTablePrefix:}") + private String deptRelationTablePrefix; + + /** + * 该值为true的时候,在进行数据权限过滤时,会加上表名,如:zz_sys_user.dept_id = xxx。 + * 为false时,过滤条件不加表名,只是使用字段名,如:dept_id = xxx。该值目前主要适用于 + * Oracle分页SQL使用了子查询的场景。此场景下,由于子查询使用了别名,再在数据权限过滤条件中 + * 加上原有表名时,SQL语法会报错。 + */ + @Value("${datafilter.dataperm.addTableNamePrefix:true}") + private Boolean addTableNamePrefix; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/config/DataFilterWebMvcConfigurer.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/config/DataFilterWebMvcConfigurer.java new file mode 100644 index 00000000..acf7f246 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/config/DataFilterWebMvcConfigurer.java @@ -0,0 +1,21 @@ +package com.flow.demo.common.datafilter.config; + +import com.flow.demo.common.datafilter.interceptor.DataFilterInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 添加数据过滤相关的拦截器。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +public class DataFilterWebMvcConfigurer implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new DataFilterInterceptor()).addPathPatterns("/**"); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/constant/DataPermRuleType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/constant/DataPermRuleType.java new file mode 100644 index 00000000..836730f6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/constant/DataPermRuleType.java @@ -0,0 +1,69 @@ +package com.flow.demo.common.datafilter.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 数据权限规则类型常量类。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class DataPermRuleType { + + /** + * 查看全部。 + */ + public static final int TYPE_ALL = 0; + + /** + * 仅查看当前用户 + */ + public static final int TYPE_USER_ONLY = 1; + + /** + * 仅查看当前部门 + */ + public static final int TYPE_DEPT_ONLY = 2; + + /** + * 所在部门及子部门 + */ + public static final int TYPE_DEPT_AND_CHILD_DEPT = 3; + + /** + * 多部门及子部门 + */ + public static final int TYPE_MULTI_DEPT_AND_CHILD_DEPT = 4; + + /** + * 自定义部门列表 + */ + public static final int TYPE_CUSTOM_DEPT_LIST = 5; + + private static final Map DICT_MAP = new HashMap<>(6); + static { + DICT_MAP.put(0, "查看全部"); + DICT_MAP.put(1, "仅查看当前用户"); + DICT_MAP.put(2, "仅查看所在部门"); + DICT_MAP.put(3, "所在部门及子部门"); + DICT_MAP.put(4, "多部门及子部门"); + DICT_MAP.put(5, "自定义部门列表"); + } + + /** + * 判断参数是否为当前常量字典的合法取值范围。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private DataPermRuleType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/interceptor/DataFilterInterceptor.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/interceptor/DataFilterInterceptor.java new file mode 100644 index 00000000..d67112f8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/interceptor/DataFilterInterceptor.java @@ -0,0 +1,42 @@ +package com.flow.demo.common.datafilter.interceptor; + +import com.flow.demo.common.core.object.GlobalThreadLocal; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 主要用于初始化,通过Mybatis拦截器插件进行数据过滤的标记。 + * 在调用controller接口处理方法之前,必须强制将数据过滤标记设置为缺省值。 + * 这样可以避免使用当前线程在处理上一个请求时,未能正常清理的数据过滤标记值。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class DataFilterInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + // 每次进入Controller接口之前,均主动打开数据权限验证。 + // 可以避免该Servlet线程在处理之前的请求时异常退出,从而导致该状态数据没有被正常清除。 + GlobalThreadLocal.setDataFilter(true); + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + // 这里需要加注释,否则sonar不happy。 + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + GlobalThreadLocal.clearDataFilter(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/interceptor/MybatisDataFilterInterceptor.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/interceptor/MybatisDataFilterInterceptor.java new file mode 100644 index 00000000..dd37914d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/interceptor/MybatisDataFilterInterceptor.java @@ -0,0 +1,473 @@ +package com.flow.demo.common.datafilter.interceptor; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReflectUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableName; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.annotation.*; +import com.flow.demo.common.core.exception.NoDataPermException; +import com.flow.demo.common.core.object.GlobalThreadLocal; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.core.util.ApplicationContextHolder; +import com.flow.demo.common.core.util.ContextUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.RedisKeyUtil; +import com.flow.demo.common.datafilter.config.DataFilterProperties; +import com.flow.demo.common.datafilter.constant.DataPermRuleType; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.statement.Statement; +import net.sf.jsqlparser.statement.delete.Delete; +import net.sf.jsqlparser.statement.select.FromItem; +import net.sf.jsqlparser.statement.select.PlainSelect; +import net.sf.jsqlparser.statement.select.Select; +import net.sf.jsqlparser.statement.select.SubSelect; +import net.sf.jsqlparser.statement.update.Update; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.executor.statement.RoutingStatementHandler; +import org.apache.ibatis.executor.statement.StatementHandler; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlCommandType; +import org.apache.ibatis.plugin.*; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.sql.Connection; +import java.util.*; + +/** + * Mybatis拦截器。目前用于数据权限的统一拦截和注入处理。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) +@Slf4j +@Component +public class MybatisDataFilterInterceptor implements Interceptor { + + @Autowired + private RedissonClient redissonClient; + @Autowired + private DataFilterProperties properties; + + /** + * 对象缓存。由于Set是排序后的,因此在查找排除方法名称时效率更高。 + * 在应用服务启动的监听器中(LoadDataPermMapperListener),会调用当前对象的(loadMappersWithDataPerm)方法,加载缓存。 + */ + private final Map cachedDataPermMap = new HashMap<>(); + /** + * 租户租户对象缓存。 + */ + private final Map cachedTenantMap = new HashMap<>(); + + /** + * 预先加载与数据过滤相关的数据到缓存,该函数会在(LoadDataFilterInfoListener)监听器中调用。 + */ + @SuppressWarnings("all") + public void loadInfoWithDataFilter() { + Map mapperMap = + ApplicationContextHolder.getApplicationContext().getBeansOfType(BaseDaoMapper.class); + for (BaseDaoMapper mapperProxy : mapperMap.values()) { + // 优先处理jdk的代理 + Object proxy = ReflectUtil.getFieldValue(mapperProxy, "h"); + // 如果不是jdk的代理,再看看cjlib的代理。 + if (proxy == null) { + proxy = ReflectUtil.getFieldValue(mapperProxy, "CGLIB$CALLBACK_0"); + } + Class mapperClass = + (Class) ReflectUtil.getFieldValue(proxy, "mapperInterface"); + if (properties.getEnabledTenantFilter()) { + loadTenantFilterData(mapperClass); + } + if (properties.getEnabledDataPermFilter()) { + EnableDataPerm rule = mapperClass.getAnnotation(EnableDataPerm.class); + if (rule != null) { + loadDataPermFilterRules(mapperClass, rule); + } + } + } + } + + private void loadTenantFilterData(Class mapperClass) { + Class modelClass = (Class) ((ParameterizedType) + mapperClass.getGenericInterfaces()[0]).getActualTypeArguments()[0]; + Field[] fields = ReflectUtil.getFields(modelClass); + for (Field field : fields) { + if (field.getAnnotation(TenantFilterColumn.class) != null) { + ModelTenantInfo tenantInfo = new ModelTenantInfo(); + tenantInfo.setModelName(modelClass.getSimpleName()); + tenantInfo.setTableName(modelClass.getAnnotation(TableName.class).value()); + tenantInfo.setFieldName(field.getName()); + tenantInfo.setColumnName(MyModelUtil.mapToColumnName(field, modelClass)); + // 判断当前dao中是否包括不需要自动注入租户Id过滤的方法。 + DisableTenantFilter disableTenantFilter = + mapperClass.getAnnotation(DisableTenantFilter.class); + if (disableTenantFilter != null) { + // 这里开始获取当前Mapper已经声明的的SqlId中,有哪些是需要排除在外的。 + // 排除在外的将不进行数据过滤。 + Set excludeMethodNameSet = new HashSet<>(); + for (String excludeName : disableTenantFilter.includeMethodName()) { + excludeMethodNameSet.add(excludeName); + // 这里是给pagehelper中,分页查询先获取数据总量的查询。 + excludeMethodNameSet.add(excludeName + "_COUNT"); + } + tenantInfo.setExcludeMethodNameSet(excludeMethodNameSet); + } + cachedTenantMap.put(mapperClass.getName(), tenantInfo); + break; + } + } + } + + private void loadDataPermFilterRules(Class mapperClass, EnableDataPerm rule) { + String sysDataPermMapperName = "SysDataPermMapper"; + // 由于给数据权限Mapper添加@EnableDataPerm,将会导致无限递归,因此这里检测到之后, + // 会在系统启动加载监听器的时候,及时抛出异常。 + if (StringUtils.equals(sysDataPermMapperName, mapperClass.getSimpleName())) { + throw new IllegalStateException("Add @EnableDataPerm annotation to SysDataPermMapper is ILLEGAL!"); + } + // 这里开始获取当前Mapper已经声明的的SqlId中,有哪些是需要排除在外的。 + // 排除在外的将不进行数据过滤。 + Set excludeMethodNameSet = null; + String[] excludes = rule.excluseMethodName(); + if (excludes.length > 0) { + excludeMethodNameSet = new HashSet<>(); + for (String excludeName : excludes) { + excludeMethodNameSet.add(excludeName); + // 这里是给pagehelper中,分页查询先获取数据总量的查询。 + excludeMethodNameSet.add(excludeName + "_COUNT"); + } + } + // 获取Mapper关联的主表信息,包括表名,user过滤字段名和dept过滤字段名。 + Class modelClazz = (Class) + ((ParameterizedType) mapperClass.getGenericInterfaces()[0]).getActualTypeArguments()[0]; + Field[] fields = ReflectUtil.getFields(modelClazz); + Field userFilterField = null; + Field deptFilterField = null; + for (Field field : fields) { + if (null != field.getAnnotation(UserFilterColumn.class)) { + userFilterField = field; + } + if (null != field.getAnnotation(DeptFilterColumn.class)) { + deptFilterField = field; + } + if (userFilterField != null && deptFilterField != null) { + break; + } + } + // 通过注解解析与Mapper关联的Model,并获取与数据权限关联的信息,并将结果缓存。 + ModelDataPermInfo info = new ModelDataPermInfo(); + info.setMainTableName(MyModelUtil.mapToTableName(modelClazz)); + info.setExcludeMethodNameSet(excludeMethodNameSet); + if (userFilterField != null) { + info.setUserFilterColumn(MyModelUtil.mapToColumnName(userFilterField, modelClazz)); + } + if (deptFilterField != null) { + info.setDeptFilterColumn(MyModelUtil.mapToColumnName(deptFilterField, modelClazz)); + } + cachedDataPermMap.put(mapperClass.getName(), info); + } + + @Override + public Object intercept(Invocation invocation) throws Throwable { + // 判断当前线程本地存储中,业务操作是否禁用了数据权限过滤,如果禁用,则不进行后续的数据过滤处理了。 + if (!GlobalThreadLocal.enabledDataFilter()) { + return invocation.proceed(); + } + // 只有在HttpServletRequest场景下,该拦截器才起作用,对于系统级别的预加载数据不会应用数据权限。 + if (!ContextUtil.hasRequestContext()) { + return invocation.proceed(); + } + // 没有登录的用户,不会参与租户过滤,如果需要过滤的,自己在代码中手动实现 + // 通常对于无需登录的白名单url,也无需过滤了。 + // 另外就是登录接口中,获取菜单列表的接口,由于尚未登录,没有TokenData,所以这个接口我们手动加入了该条件。 + if (TokenData.takeFromRequest() == null) { + return invocation.proceed(); + } + RoutingStatementHandler handler = (RoutingStatementHandler) invocation.getTarget(); + StatementHandler delegate = + (StatementHandler) ReflectUtil.getFieldValue(handler, "delegate"); + // 通过反射获取delegate父类BaseStatementHandler的mappedStatement属性 + MappedStatement mappedStatement = + (MappedStatement) ReflectUtil.getFieldValue(delegate, "mappedStatement"); + SqlCommandType commandType = mappedStatement.getSqlCommandType(); + // 对于INSERT语句,我们不进行任何数据过滤。 + if (commandType == SqlCommandType.INSERT) { + return invocation.proceed(); + } + String sqlId = mappedStatement.getId(); + int pos = StringUtils.lastIndexOf(sqlId, "."); + String className = StringUtils.substring(sqlId, 0, pos); + String methodName = StringUtils.substring(sqlId, pos + 1); + // 先进行租户过滤条件的处理,再将解析并处理后的SQL Statement交给下一步的数据权限过滤去处理。 + // 这样做的目的主要是为了减少一次SQL解析的过程,因为这是高频操作,所以要尽量去优化。 + Statement statement = null; + if (properties.getEnabledTenantFilter()) { + statement = this.processTenantFilter(className, methodName, delegate.getBoundSql(), commandType); + } + // 处理数据权限过滤。 + if (properties.getEnabledDataPermFilter()) { + this.processDataPermFilter(className, methodName, delegate.getBoundSql(), commandType, statement, sqlId); + } + return invocation.proceed(); + } + + private Statement processTenantFilter( + String className, String methodName, BoundSql boundSql, SqlCommandType commandType) throws JSQLParserException { + ModelTenantInfo info = cachedTenantMap.get(className); + if (info == null || CollUtil.contains(info.getExcludeMethodNameSet(), methodName)) { + return null; + } + String sql = boundSql.getSql(); + Statement statement = CCJSqlParserUtil.parse(sql); + StringBuilder filterBuilder = new StringBuilder(64); + filterBuilder.append(info.tableName).append(".") + .append(info.columnName) + .append("=") + .append(TokenData.takeFromRequest().getTenantId()); + String dataFilter = filterBuilder.toString(); + if (commandType == SqlCommandType.UPDATE) { + Update update = (Update) statement; + this.buildWhereClause(update, dataFilter); + } else if (commandType == SqlCommandType.DELETE) { + Delete delete = (Delete) statement; + this.buildWhereClause(delete, dataFilter); + } else { + Select select = (Select) statement; + PlainSelect selectBody = (PlainSelect) select.getSelectBody(); + FromItem fromItem = selectBody.getFromItem(); + if (fromItem != null) { + PlainSelect subSelect = null; + if (fromItem instanceof SubSelect) { + subSelect = (PlainSelect) ((SubSelect) fromItem).getSelectBody(); + } + if (subSelect != null) { + buildWhereClause(subSelect, dataFilter); + } else { + buildWhereClause(selectBody, dataFilter); + } + } + } + ReflectUtil.setFieldValue(boundSql, "sql", statement.toString()); + return statement; + } + + private void processDataPermFilter( + String className, String methodName, BoundSql boundSql, SqlCommandType commandType, Statement statement, String sqlId) + throws JSQLParserException { + // 判断当前线程本地存储中,业务操作是否禁用了数据权限过滤,如果禁用,则不进行后续的数据过滤处理了。 + // 数据过滤权限中,INSERT不过滤。如果是管理员则不参与数据权限的数据过滤,显示全部数据。 + TokenData tokenData = TokenData.takeFromRequest(); + if (Boolean.TRUE.equals(tokenData.getIsAdmin())) { + return; + } + ModelDataPermInfo info = cachedDataPermMap.get(className); + // 再次查找当前方法是否为排除方法,如果不是,就参与数据权限注入过滤。 + if (info == null || CollUtil.contains(info.getExcludeMethodNameSet(), methodName)) { + return; + } + String dataPermSessionKey = RedisKeyUtil.makeSessionDataPermIdKey(tokenData.getSessionId()); + String dataPermData = redissonClient.getBucket(dataPermSessionKey).get().toString(); + if (StringUtils.isBlank(dataPermData)) { + throw new NoDataPermException( + "No Related DataPerm found for SQL_ID [ " + sqlId + " ]."); + } + Map dataPermMap = new HashMap<>(8); + for (Map.Entry entry : JSON.parseObject(dataPermData).entrySet()) { + dataPermMap.put(Integer.valueOf(entry.getKey()), entry.getValue().toString()); + } + if (MapUtils.isEmpty(dataPermMap)) { + throw new NoDataPermException( + "No Related DataPerm found for SQL_ID [ " + sqlId + " ]."); + } + if (dataPermMap.containsKey(DataPermRuleType.TYPE_ALL)) { + return; + } + this.processDataPerm(info, dataPermMap, boundSql, commandType, statement); + } + + private void processDataPerm( + ModelDataPermInfo info, + Map dataPermMap, + BoundSql boundSql, + SqlCommandType commandType, + Statement statement) throws JSQLParserException { + List criteriaList = new LinkedList<>(); + for (Map.Entry entry : dataPermMap.entrySet()) { + String filterClause = processDataPermRule(info, entry.getKey(), entry.getValue()); + if (StringUtils.isNotBlank(filterClause)) { + criteriaList.add(filterClause); + } + } + if (CollectionUtils.isEmpty(criteriaList)) { + return; + } + StringBuilder filterBuilder = new StringBuilder(128); + filterBuilder.append("("); + filterBuilder.append(StringUtils.join(criteriaList, " OR ")); + filterBuilder.append(")"); + String dataFilter = filterBuilder.toString(); + if (statement == null) { + String sql = boundSql.getSql(); + statement = CCJSqlParserUtil.parse(sql); + } + if (commandType == SqlCommandType.UPDATE) { + Update update = (Update) statement; + this.buildWhereClause(update, dataFilter); + } else if (commandType == SqlCommandType.DELETE) { + Delete delete = (Delete) statement; + this.buildWhereClause(delete, dataFilter); + } else { + Select select = (Select) statement; + PlainSelect selectBody = (PlainSelect) select.getSelectBody(); + FromItem fromItem = selectBody.getFromItem(); + PlainSelect subSelect = null; + if (fromItem != null) { + if (fromItem instanceof SubSelect) { + subSelect = (PlainSelect) ((SubSelect) fromItem).getSelectBody(); + } + if (subSelect != null) { + buildWhereClause(subSelect, dataFilter); + } else { + buildWhereClause(selectBody, dataFilter); + } + } + } + ReflectUtil.setFieldValue(boundSql, "sql", statement.toString()); + } + + private String processDataPermRule(ModelDataPermInfo info, Integer ruleType, String deptIds) { + TokenData tokenData = TokenData.takeFromRequest(); + StringBuilder filter = new StringBuilder(128); + if (ruleType == DataPermRuleType.TYPE_USER_ONLY) { + if (StringUtils.isNotBlank(info.getUserFilterColumn())) { + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getUserFilterColumn()) + .append(" = ") + .append(tokenData.getUserId()); + } + } else { + if (StringUtils.isNotBlank(info.getDeptFilterColumn())) { + if (ruleType == DataPermRuleType.TYPE_DEPT_ONLY) { + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getDeptFilterColumn()) + .append(" = ") + .append(tokenData.getDeptId()); + } else if (ruleType == DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT) { + filter.append(" EXISTS ") + .append("(SELECT 1 FROM ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation WHERE ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.parent_dept_id = ") + .append(tokenData.getDeptId()) + .append(" AND "); + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getDeptFilterColumn()) + .append(" = ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.dept_id) "); + } else if (ruleType == DataPermRuleType.TYPE_MULTI_DEPT_AND_CHILD_DEPT) { + filter.append(" EXISTS ") + .append("(SELECT 1 FROM ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation WHERE ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.parent_dept_id IN (") + .append(deptIds) + .append(") AND "); + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getDeptFilterColumn()) + .append(" = ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.dept_id) "); + } else if (ruleType == DataPermRuleType.TYPE_CUSTOM_DEPT_LIST) { + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getDeptFilterColumn()) + .append(" IN (") + .append(deptIds) + .append(") "); + } + } + } + return filter.toString(); + } + + private void buildWhereClause(Update update, String dataFilter) throws JSQLParserException { + if (update.getWhere() == null) { + update.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter)); + } else { + AndExpression and = new AndExpression( + CCJSqlParserUtil.parseCondExpression(dataFilter), update.getWhere()); + update.setWhere(and); + } + } + + private void buildWhereClause(Delete delete, String dataFilter) throws JSQLParserException { + if (delete.getWhere() == null) { + delete.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter)); + } else { + AndExpression and = new AndExpression( + CCJSqlParserUtil.parseCondExpression(dataFilter), delete.getWhere()); + delete.setWhere(and); + } + } + + private void buildWhereClause(PlainSelect select, String dataFilter) throws JSQLParserException { + if (select.getWhere() == null) { + select.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter)); + } else { + AndExpression and = new AndExpression( + CCJSqlParserUtil.parseCondExpression(dataFilter), select.getWhere()); + select.setWhere(and); + } + } + + @Override + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + + @Override + public void setProperties(Properties properties) { + // 这里需要空注解,否则sonar会不happy。 + } + + @Data + private static final class ModelDataPermInfo { + private Set excludeMethodNameSet; + private String userFilterColumn; + private String deptFilterColumn; + private String mainTableName; + } + + @Data + private static final class ModelTenantInfo { + private Set excludeMethodNameSet; + private String modelName; + private String tableName; + private String fieldName; + private String columnName; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/listener/LoadDataFilterInfoListener.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/listener/LoadDataFilterInfoListener.java new file mode 100644 index 00000000..ebfeb13c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/java/com/flow/demo/common/datafilter/listener/LoadDataFilterInfoListener.java @@ -0,0 +1,25 @@ +package com.flow.demo.common.datafilter.listener; + +import com.flow.demo.common.datafilter.interceptor.MybatisDataFilterInterceptor; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +/** + * 应用服务启动监听器。 + * 目前主要功能是调用MybatisDataFilterInterceptor中的loadInfoWithDataFilter方法, + * 将标记有过滤注解的数据加载到缓存,以提升系统运行时效率。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Component +public class LoadDataFilterInfoListener implements ApplicationListener { + + @Override + public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { + MybatisDataFilterInterceptor interceptor = + applicationReadyEvent.getApplicationContext().getBean(MybatisDataFilterInterceptor.class); + interceptor.loadInfoWithDataFilter(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/resources/META-INF/spring.factories b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..d60d87d2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-datafilter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.flow.demo.common.datafilter.config.DataFilterAutoConfig \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/pom.xml new file mode 100644 index 00000000..e103d8ba --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/pom.xml @@ -0,0 +1,48 @@ + + + + common + com.flow.demo + 1.0.0 + + 4.0.0 + + common-flow-online + 1.0.0 + common-flow-online + jar + + + + com.flow.demo + common-flow + 1.0.0 + + + com.flow.demo + common-online + 1.0.0 + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/config/FlowOnlineAutoConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/config/FlowOnlineAutoConfig.java new file mode 100644 index 00000000..4b398c02 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/config/FlowOnlineAutoConfig.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.flow.online.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-flow-online模块的自动配置引导类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EnableConfigurationProperties({FlowOnlineProperties.class}) +public class FlowOnlineAutoConfig { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/config/FlowOnlineProperties.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/config/FlowOnlineProperties.java new file mode 100644 index 00000000..2748f2ba --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/config/FlowOnlineProperties.java @@ -0,0 +1,20 @@ +package com.flow.demo.common.flow.online.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 在线表单工作流模块的配置对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ConfigurationProperties(prefix = "common-flow-online") +public class FlowOnlineProperties { + + /** + * 在线表单的URL前缀。 + */ + private String urlPrefix; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/controller/FlowOnlineOperationController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/controller/FlowOnlineOperationController.java new file mode 100644 index 00000000..830a90f1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/controller/FlowOnlineOperationController.java @@ -0,0 +1,698 @@ +package com.flow.demo.common.flow.online.controller; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.page.PageMethod; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.flow.dto.FlowWorkOrderDto; +import com.flow.demo.common.flow.vo.FlowEntryVo; +import com.flow.demo.common.flow.vo.FlowWorkOrderVo; +import com.flow.demo.common.online.dto.OnlineFilterDto; +import com.flow.demo.common.online.model.*; +import com.flow.demo.common.online.model.constant.FieldFilterType; +import com.flow.demo.common.online.model.constant.RelationType; +import com.flow.demo.common.online.object.ColumnData; +import com.flow.demo.common.online.service.OnlineFormService; +import com.flow.demo.common.online.service.OnlinePageService; +import com.flow.demo.common.online.service.OnlineOperationService; +import com.flow.demo.common.online.service.OnlineTableService; +import com.flow.demo.common.online.util.OnlineOperationHelper; +import com.flow.demo.common.flow.online.service.FlowOnlineOperationService; +import com.flow.demo.common.flow.constant.FlowApprovalType; +import com.flow.demo.common.flow.util.FlowOperationHelper; +import com.flow.demo.common.flow.constant.FlowTaskStatus; +import com.flow.demo.common.flow.dto.FlowTaskCommentDto; +import com.flow.demo.common.flow.exception.FlowOperationException; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.flow.vo.TaskInfoVo; +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 流程操作接口类 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-flow.urlPrefix}/flowOnlineOperation") +public class FlowOnlineOperationController { + + @Autowired + private FlowEntryService flowEntryService; + @Autowired + private FlowApiService flowApiService; + @Autowired + private FlowOperationHelper flowOperationHelper; + @Autowired + private FlowOnlineOperationService flowOnlineOperationService; + @Autowired + private FlowWorkOrderService flowWorkOrderService; + @Autowired + private OnlineFormService onlineFormService; + @Autowired + private OnlinePageService onlinePageService; + @Autowired + private OnlineOperationService onlineOperationService; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private OnlineOperationHelper onlineOperationHelper; + + /** + * 根据指定流程的主版本,发起一个流程实例,同时作为第一个任务节点的执行人,执行第一个用户任务。 + * + * @param processDefinitionKey 流程定义标识。 + * @param flowTaskCommentDto 审批意见。 + * @param taskVariableData 流程任务变量数据。 + * @param masterData 流程审批相关的主表数据。 + * @param slaveData 流程审批相关的多个从表数据。 + * @return 应答结果对象。 + */ + @PostMapping("/startAndTakeUserTask/{processDefinitionKey}") + public ResponseResult startAndTakeUserTask( + @PathVariable("processDefinitionKey") String processDefinitionKey, + @MyRequestBody(required = true) FlowTaskCommentDto flowTaskCommentDto, + @MyRequestBody JSONObject taskVariableData, + @MyRequestBody(required = true) JSONObject masterData, + @MyRequestBody JSONObject slaveData) { + String errorMessage; + // 1. 验证流程数据的合法性。 + ResponseResult flowEntryResult = flowOperationHelper.verifyAndGetFlowEntry(processDefinitionKey); + if (!flowEntryResult.isSuccess()) { + return ResponseResult.errorFrom(flowEntryResult); + } + // 2. 验证流程一个用户任务的合法性。 + FlowEntryPublish flowEntryPublish = flowEntryResult.getData().getMainFlowEntryPublish(); + if (!flowEntryPublish.getActiveStatus()) { + errorMessage = "数据验证失败,当前流程发布对象已被挂起,不能启动新流程!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + ResponseResult taskInfoResult = + flowOperationHelper.verifyAndGetInitialTaskInfo(flowEntryPublish, true); + if (!taskInfoResult.isSuccess()) { + return ResponseResult.errorFrom(taskInfoResult); + } + TaskInfoVo taskInfo = taskInfoResult.getData(); + // 3. 验证在线表单及其关联数据源的合法性。 + ResponseResult datasourceResult = this.verifyAndGetOnlineDatasource(taskInfo.getFormId()); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + OnlineDatasource datasource = datasourceResult.getData(); + OnlineTable masterTable = datasource.getMasterTable(); + // 4. 为本次流程操作构建数据。 + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(masterTable, masterData, false, null); + if (!columnDataListResult.isSuccess()) { + return ResponseResult.errorFrom(columnDataListResult); + } + FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class); + // 5. 保存在线表单提交的数据,同时启动流程和自动完成第一个用户任务。 + if (slaveData == null) { + flowOnlineOperationService.saveNewAndStartProcess( + flowEntryPublish.getProcessDefinitionId(), + flowTaskComment, + taskVariableData, + masterTable, + columnDataListResult.getData()); + } else { + // 如果本次请求中包含从表数据,则一同插入。 + ResponseResult>>> slaveDataListResult = + onlineOperationHelper.buildSlaveDataList(datasource.getDatasourceId(), slaveData); + if (!slaveDataListResult.isSuccess()) { + return ResponseResult.errorFrom(slaveDataListResult); + } + flowOnlineOperationService.saveNewAndStartProcess( + flowEntryPublish.getProcessDefinitionId(), + flowTaskComment, + taskVariableData, + masterTable, + columnDataListResult.getData(), + slaveDataListResult.getData()); + } + return ResponseResult.success(); + } + + /** + * 提交流程的用户任务。 + * + * @param processInstanceId 流程实例Id。 + * @param taskId 流程任务Id。 + * @param flowTaskCommentDto 流程审批数据。 + * @param taskVariableData 流程任务变量数据。 + * @param masterData 流程审批相关的主表数据。 + * @param slaveData 流程审批相关的多个从表数据。 + * @return 应答结果对象。 + */ + @PostMapping("/submitUserTask") + public ResponseResult submitUserTask( + @MyRequestBody(required = true) String processInstanceId, + @MyRequestBody(required = true) String taskId, + @MyRequestBody(required = true) FlowTaskCommentDto flowTaskCommentDto, + @MyRequestBody JSONObject taskVariableData, + @MyRequestBody JSONObject masterData, + @MyRequestBody JSONObject slaveData) { + String errorMessage; + // 验证流程任务的合法性。 + Task task = flowApiService.getProcessInstanceActiveTask(processInstanceId, taskId); + ResponseResult taskInfoResult = flowOperationHelper.verifyAndGetRuntimeTaskInfo(task); + if (!taskInfoResult.isSuccess()) { + return ResponseResult.errorFrom(taskInfoResult); + } + TaskInfoVo taskInfo = taskInfoResult.getData(); + // 验证在线表单及其关联数据源的合法性。 + ResponseResult datasourceResult = this.verifyAndGetOnlineDatasource(taskInfo.getFormId()); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + CallResult assigneeVerifyResult = flowApiService.verifyAssigneeOrCandidateAndClaim(task); + if (!assigneeVerifyResult.isSuccess()) { + return ResponseResult.errorFrom(assigneeVerifyResult); + } + OnlineDatasource datasource = datasourceResult.getData(); + OnlineTable masterTable = datasource.getMasterTable(); + Long datasourceId = datasource.getDatasourceId(); + ProcessInstance instance = flowApiService.getProcessInstance(processInstanceId); + String dataId = instance.getBusinessKey(); + FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class); + if (StrUtil.isBlank(dataId)) { + return this.submitNewTask(processInstanceId, taskId, + flowTaskComment, taskVariableData, masterTable, masterData, slaveData, datasourceId); + } + try { + if (StrUtil.equals(flowTaskComment.getApprovalType(), FlowApprovalType.TRANSFER)) { + if (StrUtil.isBlank(flowTaskComment.getDelegateAssginee())) { + errorMessage = "数据验证失败,加签或转办任务指派人不能为空!!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + flowOnlineOperationService.updateAndTakeTask( + task, flowTaskComment, taskVariableData, masterTable, masterData, dataId, slaveData, datasourceId); + } catch (FlowOperationException e) { + log.error("Failed to call [FlowOnlineOperationService.updateAndTakeTask]", e); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, e.getMessage()); + } + return ResponseResult.success(); + } + + /** + * 获取当前流程实例的详情数据。包括主表数据、一对一从表数据、一对多从表数据列表等。 + * + * @param processInstanceId 当前运行时的流程实例Id。 + * @param taskId 流程任务Id。 + * @return 当前流程实例的详情数据。 + */ + @GetMapping("/viewUserTask") + public ResponseResult viewUserTask(@RequestParam String processInstanceId, @RequestParam String taskId) { + String errorMessage; + // 验证流程任务的合法性。 + Task task = flowApiService.getProcessInstanceActiveTask(processInstanceId, taskId); + ProcessInstance instance = flowApiService.getProcessInstance(processInstanceId); + // 如果业务主数据为空,则直接返回。 + if (StrUtil.isBlank(instance.getBusinessKey())) { + return ResponseResult.success(null); + } + ResponseResult taskInfoResult = flowOperationHelper.verifyAndGetRuntimeTaskInfo(task); + if (!taskInfoResult.isSuccess()) { + return ResponseResult.errorFrom(taskInfoResult); + } + TaskInfoVo taskInfo = taskInfoResult.getData(); + // 验证在线表单及其关联数据源的合法性。 + ResponseResult datasourceResult = this.verifyAndGetOnlineDatasource(taskInfo.getFormId()); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + OnlineDatasource datasource = datasourceResult.getData(); + ResponseResult> relationListResult = + onlineOperationHelper.verifyAndGetRelationList(datasource.getDatasourceId(), null); + if (!relationListResult.isSuccess()) { + return ResponseResult.errorFrom(relationListResult); + } + JSONObject jsonData = this.buildUserTaskData( + instance.getBusinessKey(), datasource.getMasterTable(), relationListResult.getData()); + return ResponseResult.success(jsonData); + } + + /** + * 获取已经结束的流程实例的详情数据。包括主表数据、一对一从表数据、一对多从表数据列表等。 + * + * @param processInstanceId 历史流程实例Id。 + * @param taskId 历史任务Id。如果该值为null,仅有发起人可以查看当前流程数据,否则只有任务的指派人才能查看。 + * @return 历史流程实例的详情数据。 + */ + @GetMapping("/viewHistoricProcessInstance") + public ResponseResult viewHistoricProcessInstance( + @RequestParam String processInstanceId, @RequestParam(required = false) String taskId) { + String errorMessage; + // 验证流程实例的合法性。 + HistoricProcessInstance instance = flowApiService.getHistoricProcessInstance(processInstanceId); + if (instance == null) { + errorMessage = "数据验证失败,指定的流程实例Id并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + String loginName = TokenData.takeFromRequest().getLoginName(); + if (StrUtil.isBlank(taskId)) { + if (!StrUtil.equals(loginName, instance.getStartUserId())) { + errorMessage = "数据验证失败,指定历史流程的发起人与当前用户不匹配!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } else { + HistoricTaskInstance taskInstance = flowApiService.getHistoricTaskInstance(processInstanceId, taskId); + if (taskInstance == null) { + errorMessage = "数据验证失败,指定的任务Id并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!StrUtil.equals(loginName, taskInstance.getAssignee())) { + errorMessage = "数据验证失败,历史任务的指派人与当前用户不匹配!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + if (StrUtil.isBlank(instance.getBusinessKey())) { + // 对于没有提交过任何用户任务的场景,可直接返回空数据。 + return ResponseResult.success(new JSONObject()); + } + FlowEntryPublish flowEntryPublish = + flowEntryService.getFlowEntryPublishList(CollUtil.newHashSet(instance.getProcessDefinitionId())).get(0); + TaskInfoVo taskInfoVo = JSON.parseObject(flowEntryPublish.getInitTaskInfo(), TaskInfoVo.class); + // 验证在线表单及其关联数据源的合法性。 + ResponseResult datasourceResult = this.verifyAndGetOnlineDatasource(taskInfoVo.getFormId()); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + OnlineDatasource datasource = datasourceResult.getData(); + ResponseResult> relationListResult = + onlineOperationHelper.verifyAndGetRelationList(datasource.getDatasourceId(), null); + if (!relationListResult.isSuccess()) { + return ResponseResult.errorFrom(relationListResult); + } + JSONObject jsonData = this.buildUserTaskData( + instance.getBusinessKey(), datasource.getMasterTable(), relationListResult.getData()); + return ResponseResult.success(jsonData); + } + + /** + * 工作流工单列表。 + * + * @param processDefinitionKey 流程标识名。 + * @param flowWorkOrderDtoFilter 过滤对象。 + * @param pageParam 分页参数。 + * @return 查询结果。 + */ + @PostMapping("/listWorkOrder/{processDefinitionKey}") + public ResponseResult> listWorkOrder( + @PathVariable("processDefinitionKey") String processDefinitionKey, + @MyRequestBody FlowWorkOrderDto flowWorkOrderDtoFilter, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + FlowWorkOrder flowWorkOrderFilter = + flowOperationHelper.makeWorkOrderFilter(flowWorkOrderDtoFilter, processDefinitionKey); + MyOrderParam orderParam = new MyOrderParam(); + orderParam.add(new MyOrderParam.OrderInfo("workOrderId", false, null)); + String orderBy = MyOrderParam.buildOrderBy(orderParam, FlowWorkOrder.class); + List flowWorkOrderList = flowWorkOrderService.getFlowWorkOrderList(flowWorkOrderFilter, orderBy); + MyPageData resultData = + MyPageUtil.makeResponseData(flowWorkOrderList, FlowWorkOrder.INSTANCE); + this.makeWorkOrderTaskInfo(resultData.getDataList()); + return ResponseResult.success(resultData); + } + + /** + * 为数据源主表字段上传文件。 + * + * @param processDefinitionKey 流程引擎流程定义标识。 + * @param processInstanceId 流程实例Id。 + * @param taskId 流程任务Id。 + * @param datasourceId 数据源Id。 + * @param relationId 数据源关联Id。 + * @param fieldName 数据表字段名。 + * @param asImage 是否为图片文件。 + * @param uploadFile 上传文件对象。 + */ + @PostMapping("/upload") + public void upload( + @RequestParam String processDefinitionKey, + @RequestParam(required = false) String processInstanceId, + @RequestParam(required = false) String taskId, + @RequestParam Long datasourceId, + @RequestParam(required = false) Long relationId, + @RequestParam String fieldName, + @RequestParam Boolean asImage, + @RequestParam("uploadFile") MultipartFile uploadFile) throws Exception { + ResponseResult verifyResult = + this.verifyUploadOrDownload(processDefinitionKey, processInstanceId, taskId, datasourceId); + if (!verifyResult.isSuccess()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, ResponseResult.errorFrom(verifyResult)); + return; + } + ResponseResult verifyTableResult = + this.verifyAndGetOnlineTable(datasourceId, relationId, null, null); + if (!verifyTableResult.isSuccess()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, ResponseResult.errorFrom(verifyTableResult)); + return; + } + onlineOperationHelper.doUpload(verifyTableResult.getData(), fieldName, asImage, uploadFile); + } + + /** + * 下载文件接口。 + * 越权访问限制说明: + * taskId为空,当前用户必须为当前流程的发起人,否则必须为当前任务的指派人或候选人。 + * relationId为空,下载数据为主表字段,否则为关联的从表字段。 + * + * @param processDefinitionKey 流程引擎流程定义标识。 + * @param processInstanceId 流程实例Id。 + * @param taskId 流程任务Id。 + * @param datasourceId 数据源Id。 + * @param relationId 数据源关联Id。 + * @param dataId 附件所在记录的主键Id。 + * @param fieldName 数据表字段名。 + * @param asImage 是否为图片文件。 + * @param response Http 应答对象。 + */ + @GetMapping("/download") + public void download( + @RequestParam String processDefinitionKey, + @RequestParam(required = false) String processInstanceId, + @RequestParam(required = false) String taskId, + @RequestParam Long datasourceId, + @RequestParam(required = false) Long relationId, + @RequestParam(required = false) String dataId, + @RequestParam String fieldName, + @RequestParam String filename, + @RequestParam Boolean asImage, + HttpServletResponse response) throws Exception { + ResponseResult verifyResult = + this.verifyUploadOrDownload(processDefinitionKey, processInstanceId, taskId, datasourceId); + if (!verifyResult.isSuccess()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, ResponseResult.errorFrom(verifyResult)); + return; + } + ResponseResult verifyTableResult = + this.verifyAndGetOnlineTable(datasourceId, relationId, verifyResult.getData(), dataId); + if (!verifyTableResult.isSuccess()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, ResponseResult.errorFrom(verifyTableResult)); + return; + } + onlineOperationHelper.doDownload(verifyTableResult.getData(), dataId, fieldName, filename, asImage, response); + } + + /** + * 获取所有流程对象,同时获取关联的在线表单对象列表。 + * + * @return 查询结果。 + */ + @GetMapping("/listFlowEntryForm") + public ResponseResult> listFlowEntryForm() { + List flowEntryList = flowEntryService.getAllList(); + List flowEntryVoList = FlowEntry.INSTANCE.fromModelList(flowEntryList); + if (CollUtil.isNotEmpty(flowEntryVoList)) { + Set pageIdSet = flowEntryVoList.stream().map(FlowEntryVo::getPageId).collect(Collectors.toSet()); + List formList = onlineFormService.getOnlineFormListByPageIds(pageIdSet); + Map> formMap = + formList.stream().collect(Collectors.groupingBy(OnlineForm::getPageId)); + for (FlowEntryVo flowEntryVo : flowEntryVoList) { + List flowEntryFormList = formMap.get(flowEntryVo.getPageId()); + flowEntryVo.setFormList(MyModelUtil.beanToMapList(flowEntryFormList)); + } + } + return ResponseResult.success(flowEntryVoList); + } + + private ResponseResult verifyAndGetOnlineDatasource(Long formId) { + List formDatasourceList = onlineFormService.getFormDatasourceListByFormId(formId); + if (CollUtil.isEmpty(formDatasourceList)) { + String errorMessage = "数据验证失败,流程任务绑定的在线表单Id [" + formId + "] 不存在,请修改流程图!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + return onlineOperationHelper.verifyAndGetDatasource(formDatasourceList.get(0).getDatasourceId()); + } + + private JSONObject buildUserTaskData( + String businessKey, OnlineTable masterTable, List relationList) { + JSONObject jsonData = new JSONObject(); + List oneToOneRelationList = relationList.stream() + .filter(r -> r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList()); + Map result = + onlineOperationService.getMasterData(masterTable, oneToOneRelationList, relationList, businessKey); + if (MapUtil.isEmpty(result)) { + return jsonData; + } + jsonData.put("masterAndOneToOne", result); + List oneToManyRelationList = relationList.stream() + .filter(r -> r.getRelationType().equals(RelationType.ONE_TO_MANY)).collect(Collectors.toList()); + if (CollUtil.isEmpty(oneToManyRelationList)) { + return jsonData; + } + JSONObject oneToManyJsonData = new JSONObject(); + jsonData.put("oneToMany", oneToManyJsonData); + for (OnlineDatasourceRelation relation : oneToManyRelationList) { + OnlineFilterDto filterDto = new OnlineFilterDto(); + filterDto.setTableName(relation.getSlaveTable().getTableName()); + OnlineColumn slaveColumn = relation.getSlaveTable().getColumnMap().get(relation.getSlaveColumnId()); + filterDto.setColumnName(slaveColumn.getColumnName()); + filterDto.setFilterType(FieldFilterType.EQUAL_FILTER); + Object columnValue = result.get(masterTable.getPrimaryKeyColumn().getColumnName()); + filterDto.setColumnValue(columnValue); + List> slaveResultList = + onlineOperationService.getSlaveDataList(relation, CollUtil.newLinkedList(filterDto), null); + if (CollUtil.isNotEmpty(slaveResultList)) { + oneToManyJsonData.put(relation.getVariableName(), slaveResultList); + } + } + return jsonData; + } + + private ResponseResult submitNewTask( + String processInstanceId, + String taskId, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable masterTable, + JSONObject masterData, + JSONObject slaveData, + Long datasourceId) { + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(masterTable, masterData, false, null); + if (!columnDataListResult.isSuccess()) { + return ResponseResult.errorFrom(columnDataListResult); + } + // 保存在线表单提交的数据,同时启动流程和自动完成第一个用户任务。 + if (slaveData == null) { + flowOnlineOperationService.saveNewAndTakeTask( + processInstanceId, + taskId, + flowTaskComment, + taskVariableData, + masterTable, + columnDataListResult.getData()); + } else { + // 如果本次请求中包含从表数据,则一同插入。 + ResponseResult>>> slaveDataListResult = + onlineOperationHelper.buildSlaveDataList(datasourceId, slaveData); + if (!slaveDataListResult.isSuccess()) { + return ResponseResult.errorFrom(slaveDataListResult); + } + flowOnlineOperationService.saveNewAndTakeTask( + processInstanceId, + taskId, + flowTaskComment, + taskVariableData, + masterTable, + columnDataListResult.getData(), + slaveDataListResult.getData()); + } + return ResponseResult.success(); + } + + private ResponseResult verifyAndGetOnlineTable( + Long datasourceId, Long relationId, String businessKey, String dataId) { + ResponseResult datasourceResult = + onlineOperationHelper.verifyAndGetDatasource(datasourceId); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + OnlineTable masterTable = datasourceResult.getData().getMasterTable(); + OnlineTable table = masterTable; + ResponseResult relationResult = null; + if (relationId != null) { + relationResult = onlineOperationHelper.verifyAndGetRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + return ResponseResult.errorFrom(relationResult); + } + table = relationResult.getData().getSlaveTable(); + } + if (StrUtil.hasBlank(businessKey, dataId)) { + return ResponseResult.success(table); + } + String errorMessage; + // 如果relationId为null,这里就是主表数据。 + if (relationId == null) { + if (!StrUtil.equals(businessKey, dataId)) { + errorMessage = "数据验证失败,参数主键Id与流程主表主键Id不匹配!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + return ResponseResult.success(table); + } + OnlineDatasourceRelation relation = relationResult.getData(); + OnlineTable slaveTable = relation.getSlaveTable(); + Map dataMap = + onlineOperationService.getMasterData(slaveTable, null, null, dataId); + if (dataMap == null) { + errorMessage = "数据验证失败,从表主键Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineColumn slaveColumn = slaveTable.getColumnMap().get(relation.getSlaveColumnId()); + Object relationSlaveDataId = dataMap.get(slaveColumn.getColumnName()); + if (relationSlaveDataId == null) { + errorMessage = "数据验证失败,当前关联的从表字段值为NULL!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineColumn masterColumn = masterTable.getColumnMap().get(relation.getMasterColumnId()); + if (masterColumn.getPrimaryKey()) { + if (!StrUtil.equals(relationSlaveDataId.toString(), businessKey)) { + errorMessage = "数据验证失败,当前从表主键Id关联的主表Id当前流程的BusinessKey不一致!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + Map masterDataMap = + onlineOperationService.getMasterData(masterTable, null, null, businessKey); + if (masterDataMap == null) { + errorMessage = "数据验证失败,主表主键Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + Object relationMasterDataId = masterDataMap.get(masterColumn.getColumnName()); + if (relationMasterDataId == null) { + errorMessage = "数据验证失败,当前关联的主表字段值为NULL!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!StrUtil.equals(relationMasterDataId.toString(), relationSlaveDataId.toString())) { + errorMessage = "数据验证失败,当前关联的主表字段值和从表字段值不一致!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + return ResponseResult.success(table); + } + + private ResponseResult verifyUploadOrDownload( + String processDefinitionKey, String processInstanceId, String taskId, Long datasourceId) { + if (!StrUtil.isAllBlank(processInstanceId, taskId)) { + ResponseResult verifyResult = + flowOperationHelper.verifyUploadOrDownloadPermission(processInstanceId, taskId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(ResponseResult.errorFrom(verifyResult)); + } + } + String errorMessage; + FlowEntry flowEntry = flowEntryService.getFlowEntryByProcessDefinitionKey(processDefinitionKey); + if (flowEntry == null) { + errorMessage = "数据验证失败,指定流程Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + String businessKey = null; + if (processInstanceId != null) { + HistoricProcessInstance instance = flowApiService.getHistoricProcessInstance(processInstanceId); + if (!StrUtil.equals(flowEntry.getProcessDefinitionKey(), instance.getProcessDefinitionKey())) { + errorMessage = "数据验证失败,指定流程实例并不属于当前流程!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + businessKey = instance.getBusinessKey(); + } + List datasourceList = + onlinePageService.getOnlinePageDatasourceListByPageId(flowEntry.getPageId()); + Optional r = datasourceList.stream() + .map(OnlinePageDatasource::getDatasourceId).filter(c -> c.equals(datasourceId)).findFirst(); + if (!r.isPresent()) { + errorMessage = "数据验证失败,当前数据源Id并不属于当前流程!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + return ResponseResult.success(businessKey); + } + + private void makeWorkOrderTaskInfo(List flowWorkOrderVoList) { + if (CollUtil.isEmpty(flowWorkOrderVoList)) { + return; + } + Set definitionIdSet = + flowWorkOrderVoList.stream().map(FlowWorkOrderVo::getProcessDefinitionId).collect(Collectors.toSet()); + List flowEntryPublishList = flowEntryService.getFlowEntryPublishList(definitionIdSet); + Map flowEntryPublishMap = + flowEntryPublishList.stream().collect(Collectors.toMap(FlowEntryPublish::getProcessDefinitionId, c -> c)); + for (FlowWorkOrderVo flowWorkOrderVo : flowWorkOrderVoList) { + FlowEntryPublish flowEntryPublish = flowEntryPublishMap.get(flowWorkOrderVo.getProcessDefinitionId()); + flowWorkOrderVo.setInitTaskInfo(flowEntryPublish.getInitTaskInfo()); + } + Set businessKeySet = + flowWorkOrderVoList.stream().map(FlowWorkOrderVo::getBusinessKey).collect(Collectors.toSet()); + Long tableId = flowWorkOrderVoList.get(0).getOnlineTableId(); + OnlineTable masterTable = onlineTableService.getOnlineTableFromCache(tableId); + Set convertedBusinessKeySet = + onlineOperationHelper.convertToTypeValue(masterTable.getPrimaryKeyColumn(), businessKeySet); + List filterList = new LinkedList<>(); + OnlineFilterDto filterDto = new OnlineFilterDto(); + filterDto.setTableName(masterTable.getTableName()); + filterDto.setColumnName(masterTable.getPrimaryKeyColumn().getColumnName()); + filterDto.setFilterType(FieldFilterType.IN_LIST_FILTER); + filterDto.setColumnValue(convertedBusinessKeySet); + List> dataList = onlineOperationService.getMasterDataList( + masterTable, null, null, filterList, null); + Map> dataMap = dataList.stream() + .collect(Collectors.toMap(c -> c.get(masterTable.getPrimaryKeyColumn().getColumnName()), c -> c)); + for (FlowWorkOrderVo flowWorkOrderVo : flowWorkOrderVoList) { + Object dataId = onlineOperationHelper.convertToTypeValue( + masterTable.getPrimaryKeyColumn(), flowWorkOrderVo.getBusinessKey()); + Map data = dataMap.get(dataId); + if (data != null) { + flowWorkOrderVo.setMasterData(data); + } + } + List unfinishedProcessInstanceIds = flowWorkOrderVoList.stream() + .filter(c -> !c.getFlowStatus().equals(FlowTaskStatus.FINISHED)) + .map(FlowWorkOrderVo::getProcessInstanceId) + .collect(Collectors.toList()); + if (CollUtil.isEmpty(unfinishedProcessInstanceIds)) { + return; + } + List taskList = flowApiService.getTaskListByProcessInstanceIds(unfinishedProcessInstanceIds); + Map> taskMap = + taskList.stream().collect(Collectors.groupingBy(Task::getProcessInstanceId)); + for (FlowWorkOrderVo flowWorkOrderVo : flowWorkOrderVoList) { + List instanceTaskList = taskMap.get(flowWorkOrderVo.getProcessInstanceId()); + if (instanceTaskList == null) { + continue; + } + JSONArray taskArray = new JSONArray(); + for (Task task : instanceTaskList) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("taskId", task.getId()); + jsonObject.put("taskName", task.getName()); + jsonObject.put("taskKey", task.getTaskDefinitionKey()); + jsonObject.put("assignee", task.getAssignee()); + taskArray.add(jsonObject); + } + flowWorkOrderVo.setRuntimeTaskInfoList(taskArray); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/service/FlowOnlineOperationService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/service/FlowOnlineOperationService.java new file mode 100644 index 00000000..510fd07e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/service/FlowOnlineOperationService.java @@ -0,0 +1,116 @@ +package com.flow.demo.common.flow.online.service; + +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.online.model.OnlineDatasourceRelation; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.object.ColumnData; +import com.flow.demo.common.flow.model.FlowTaskComment; +import org.flowable.task.api.Task; + +import java.util.List; +import java.util.Map; + +/** + * 流程操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowOnlineOperationService { + + /** + * 保存在线表单的数据,同时启动流程。如果当前用户是第一个用户任务的Assignee, + * 或者第一个用户任务的Assignee是流程发起人变量,该方法还会自动Take第一个任务。 + * + * @param processDefinitionId 流程定义Id。 + * @param flowTaskComment 流程审批批注对象。 + * @param taskVariableData 流程任务的变量数据。 + * @param table 表对象。 + * @param columnDataList 表数据。 + */ + void saveNewAndStartProcess( + String processDefinitionId, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable table, + List columnDataList); + + /** + * 保存在线表单的数据,同时启动流程。如果当前用户是第一个用户任务的Assignee, + * 或者第一个用户任务的Assignee是流程发起人变量,该方法还会自动Take第一个任务。 + * + * @param processDefinitionId 流程定义Id。 + * @param flowTaskComment 流程审批批注对象。 + * @param taskVariableData 流程任务的变量数据。 + * @param masterTable 主表对象。 + * @param masterColumnDataList 主表数据。 + * @param slaveColumnDataListMap 关联从表数据Map。 + */ + void saveNewAndStartProcess( + String processDefinitionId, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable masterTable, + List masterColumnDataList, + Map>> slaveColumnDataListMap); + + /** + * 保存在线表单的数据,同时Take用户任务。 + * + * @param processInstanceId 流程实例Id。 + * @param taskId 流程任务Id。 + * @param flowTaskComment 流程审批批注对象。 + * @param taskVariableData 流程任务的变量数据。 + * @param table 表对象。 + * @param columnDataList 表数据。 + */ + void saveNewAndTakeTask( + String processInstanceId, + String taskId, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable table, + List columnDataList); + + /** + * 保存在线表单的数据,同时Take用户任务。 + * + * @param processInstanceId 流程实例Id。 + * @param taskId 流程任务Id。 + * @param flowTaskComment 流程审批批注对象。 + * @param taskVariableData 流程任务的变量数据。 + * @param masterTable 主表对象。 + * @param masterColumnDataList 主表数据。 + * @param slaveColumnDataListMap 关联从表数据Map。 + */ + void saveNewAndTakeTask( + String processInstanceId, + String taskId, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable masterTable, + List masterColumnDataList, + Map>> slaveColumnDataListMap); + + /** + * 保存业务表数据,同时接收流程任务。 + * + * @param task 流程任务。 + * @param flowTaskComment 流程审批批注对象。 + * @param taskVariableData 流程任务的变量数据。 + * @param masterTable 主表对象。 + * @param masterData 主表数据。 + * @param masterDataId 主表数据主键。 + * @param slaveData 从表数据。 + * @param datasourceId 在线表所属数据源Id。 + */ + void updateAndTakeTask( + Task task, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable masterTable, + JSONObject masterData, + String masterDataId, + JSONObject slaveData, + Long datasourceId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/service/impl/FlowOnlineOperationServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/service/impl/FlowOnlineOperationServiceImpl.java new file mode 100644 index 00000000..518e8dd4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/java/com/flow/demo/common/flow/online/service/impl/FlowOnlineOperationServiceImpl.java @@ -0,0 +1,247 @@ +package com.flow.demo.common.flow.online.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.object.ResponseResult; +import com.flow.demo.common.online.model.OnlineColumn; +import com.flow.demo.common.online.model.OnlineDatasourceRelation; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.model.constant.RelationType; +import com.flow.demo.common.online.object.ColumnData; +import com.flow.demo.common.online.service.OnlineOperationService; +import com.flow.demo.common.online.util.OnlineOperationHelper; +import com.flow.demo.common.flow.constant.FlowApprovalType; +import com.flow.demo.common.flow.constant.FlowTaskStatus; +import com.flow.demo.common.flow.exception.FlowOperationException; +import com.flow.demo.common.flow.model.FlowTaskComment; +import com.flow.demo.common.flow.service.FlowApiService; +import com.flow.demo.common.flow.service.FlowWorkOrderService; +import com.flow.demo.common.flow.online.service.FlowOnlineOperationService; +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +@Slf4j +@Service("flowOnlineOperationService") +public class FlowOnlineOperationServiceImpl implements FlowOnlineOperationService { + + @Autowired + private FlowApiService flowApiService; + @Autowired + private FlowWorkOrderService flowWorkOrderService; + @Autowired + private OnlineOperationService onlineOperationService; + @Autowired + private OnlineOperationHelper onlineOperationHelper; + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewAndStartProcess( + String processDefinitionId, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable table, + List columnDataList) { + Object dataId = onlineOperationService.saveNew(table, columnDataList); + ProcessInstance instance = + flowApiService.startAndTakeFirst(processDefinitionId, dataId, flowTaskComment, taskVariableData); + flowWorkOrderService.saveNew(instance, dataId, table.getTableId()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewAndStartProcess( + String processDefinitionId, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable masterTable, + List masterColumnDataList, + Map>> slaveColumnDataListMap) { + Object dataId = onlineOperationService.saveNewAndSlaveRelation( + masterTable, masterColumnDataList, slaveColumnDataListMap); + ProcessInstance instance = + flowApiService.startAndTakeFirst(processDefinitionId, dataId, flowTaskComment, taskVariableData); + flowWorkOrderService.saveNew(instance, dataId, masterTable.getTableId()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewAndTakeTask( + String processInstanceId, + String taskId, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable table, + List columnDataList) { + Object dataId = onlineOperationService.saveNew(table, columnDataList); + Task task = flowApiService.getProcessInstanceActiveTask(processInstanceId, taskId); + flowApiService.setBusinessKeyForProcessInstance(processInstanceId, dataId); + Map variables = + flowApiService.initAndGetProcessInstanceVariables(task.getProcessDefinitionId()); + if (taskVariableData == null) { + taskVariableData = new JSONObject(); + } + taskVariableData.putAll(variables); + flowApiService.completeTask(task, flowTaskComment, taskVariableData); + ProcessInstance instance = flowApiService.getProcessInstance(processInstanceId); + flowWorkOrderService.saveNew(instance, dataId, table.getTableId()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewAndTakeTask( + String processInstanceId, + String taskId, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable masterTable, + List masterColumnDataList, + Map>> slaveColumnDataListMap) { + Object dataId = onlineOperationService.saveNewAndSlaveRelation( + masterTable, masterColumnDataList, slaveColumnDataListMap); + Task task = flowApiService.getProcessInstanceActiveTask(processInstanceId, taskId); + flowApiService.setBusinessKeyForProcessInstance(processInstanceId, dataId); + Map variables = + flowApiService.initAndGetProcessInstanceVariables(task.getProcessDefinitionId()); + if (taskVariableData == null) { + taskVariableData = new JSONObject(); + } + taskVariableData.putAll(variables); + flowApiService.completeTask(task, flowTaskComment, taskVariableData); + ProcessInstance instance = flowApiService.getProcessInstance(processInstanceId); + flowWorkOrderService.saveNew(instance, dataId, masterTable.getTableId()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateAndTakeTask( + Task task, + FlowTaskComment flowTaskComment, + JSONObject taskVariableData, + OnlineTable masterTable, + JSONObject masterData, + String masterDataId, + JSONObject slaveData, + Long datasourceId) { + int flowStatus = FlowTaskStatus.APPROVING; + if (flowTaskComment.getApprovalType().equals(FlowApprovalType.REFUSE)) { + flowStatus = FlowTaskStatus.REFUSED; + } + flowWorkOrderService.updateFlowStatusByProcessInstanceId(task.getProcessInstanceId(), flowStatus); + this.handleMasterTableData(masterTable, masterData, masterDataId); + if (slaveData != null) { + for (Map.Entry relationEntry : slaveData.entrySet()) { + Long relationId = Long.parseLong(relationEntry.getKey()); + this.handleSlaveTableData( + relationId, relationEntry.getValue(), datasourceId, masterTable, masterData, masterDataId); + } + } + flowApiService.completeTask(task, flowTaskComment, taskVariableData); + } + + private void handleMasterTableData(OnlineTable masterTable, JSONObject masterData, String dataId) { + // 如果存在主表数据,就执行主表数据的更新。 + if (masterData != null) { + Map originalMasterData = + onlineOperationService.getMasterData(masterTable, null, null, dataId); + for (Map.Entry entry : originalMasterData.entrySet()) { + masterData.putIfAbsent(entry.getKey(), entry.getValue()); + } + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(masterTable, masterData, true, null); + if (!columnDataListResult.isSuccess()) { + throw new FlowOperationException(columnDataListResult.getErrorMessage()); + } + if (!onlineOperationService.update(masterTable, columnDataListResult.getData())) { + throw new FlowOperationException("主表数据不存在!"); + } + } + } + + private void handleSlaveTableData( + Long relationId, + Object slaveData, + Long datasourceId, + OnlineTable masterTable, + Map masterData, + String masterDataId) { + ResponseResult relationResult = + onlineOperationHelper.verifyAndGetOneToManyRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + throw new FlowOperationException(relationResult.getErrorMessage()); + } + OnlineDatasourceRelation relation = relationResult.getData(); + OnlineTable slaveTable = relation.getSlaveTable(); + if (relation.getRelationType().equals(RelationType.ONE_TO_ONE)) { + String keyColumnName = slaveTable.getPrimaryKeyColumn().getColumnName(); + JSONObject relationData = (JSONObject) slaveData; + if (MapUtil.isEmpty(relationData)) { + return; + } + String slaveDataId = relationData.getString(keyColumnName); + if (slaveDataId == null) { + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(slaveTable, relationData, false, null); + if (!columnDataListResult.isSuccess()) { + throw new FlowOperationException(columnDataListResult.getErrorMessage()); + } + onlineOperationService.saveNew(slaveTable, columnDataListResult.getData()); + } else { + Map originalSlaveData = + onlineOperationService.getMasterData(slaveTable, null, null, slaveDataId); + for (Map.Entry entry : originalSlaveData.entrySet()) { + relationData.putIfAbsent(entry.getKey(), entry.getValue()); + } + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(slaveTable, relationData, true, null); + if (!columnDataListResult.isSuccess()) { + throw new FlowOperationException(columnDataListResult.getErrorMessage()); + } + if (!onlineOperationService.update(slaveTable, columnDataListResult.getData())) { + throw new FlowOperationException("关联从表 [" + slaveTable.getTableName() + "] 中的更新数据不存在"); + } + } + } else if (relation.getRelationType().equals(RelationType.ONE_TO_MANY)) { + JSONArray relationDataArray = (JSONArray) slaveData; + if (CollUtil.isEmpty(relationDataArray)) { + return; + } + JSONObject firstData = relationDataArray.getJSONObject(0); + Object key = firstData.get(slaveTable.getPrimaryKeyColumn().getColumnName()); + // 如果一对多关联数据中存在主键数据,则需要先批量删除。 + if (key != null) { + OnlineColumn slaveColumn = relation.getSlaveTable().getColumnMap().get(relation.getSlaveColumnId()); + Object relationSlaveColumnValue = firstData.get(slaveColumn.getColumnName()); + onlineOperationService.forceDelete( + relation.getSlaveTable(), slaveColumn, relationSlaveColumnValue.toString()); + } + if (masterData == null) { + masterData = onlineOperationService.getMasterData( + masterTable, null, null, masterDataId); + } + for (int i = 0; i < relationDataArray.size(); i++) { + JSONObject relationSlaveData = relationDataArray.getJSONObject(i); + // 自动补齐主表关联数据。 + OnlineColumn masterColumn = masterTable.getColumnMap().get(relation.getMasterColumnId()); + Object masterColumnValue = masterData.get(masterColumn.getColumnName()); + OnlineColumn slaveColumn = slaveTable.getColumnMap().get(relation.getSlaveColumnId()); + relationSlaveData.put(slaveColumn.getColumnName(), masterColumnValue); + // 拆解主表和一对多关联从表的输入参数,并构建出数据表的待插入数据列表。 + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(slaveTable, relationSlaveData, false, null); + if (!columnDataListResult.isSuccess()) { + throw new FlowOperationException(columnDataListResult.getErrorMessage()); + } + onlineOperationService.saveNew(slaveTable, columnDataListResult.getData()); + } + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/resources/META-INF/spring.factories b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..da4f864b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow-online/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.flow.demo.common.flow.online.config.FlowOnlineAutoConfig \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/pom.xml new file mode 100644 index 00000000..a02d892a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/pom.xml @@ -0,0 +1,58 @@ + + + + common + com.flow.demo + 1.0.0 + + 4.0.0 + + common-flow + 1.0.0 + common-flow + jar + + + + com.flow.demo + common-datafilter + 1.0.0 + + + com.flow.demo + common-sequence + 1.0.0 + + + com.flow.demo + common-log + 1.0.0 + + + org.flowable + flowable-spring-boot-starter-basic + ${flowable.version} + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/config/FlowAutoConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/config/FlowAutoConfig.java new file mode 100644 index 00000000..ab4b46e9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/config/FlowAutoConfig.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.flow.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-flow模块的自动配置引导类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EnableConfigurationProperties({FlowProperties.class}) +public class FlowAutoConfig { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/config/FlowProperties.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/config/FlowProperties.java new file mode 100644 index 00000000..e768876c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/config/FlowProperties.java @@ -0,0 +1,20 @@ +package com.flow.demo.common.flow.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 工作流的配置对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ConfigurationProperties(prefix = "common-flow") +public class FlowProperties { + + /** + * 工作落工单操作接口的URL前缀。 + */ + private String urlPrefix; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowApprovalType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowApprovalType.java new file mode 100644 index 00000000..a0e9d77d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowApprovalType.java @@ -0,0 +1,84 @@ +package com.flow.demo.common.flow.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 工作流任务触发BUTTON。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FlowApprovalType { + + /** + * 保存。 + */ + public static final String SAVE = "save"; + /** + * 同意。 + */ + public static final String AGREE = "agree"; + /** + * 拒绝。 + */ + public static final String REFUSE = "refuse"; + /** + * 指派。 + */ + public static final String TRANSFER = "transfer"; + /** + * 多实例会签。 + */ + public static final String MULTI_SIGN = "multi_sign"; + /** + * 会签同意。 + */ + public static final String MULTI_AGREE = "multi_agree"; + /** + * 会签拒绝。 + */ + public static final String MULTI_REFUSE = "multi_refuse"; + /** + * 会签弃权。 + */ + public static final String MULTI_ABSTAIN = "multi_abstain"; + /** + * 多实例加签。 + */ + public static final String MULTI_CONSIGN = "multi_consign"; + /** + * 中止。 + */ + public static final String STOP = "stop"; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(SAVE, "保存"); + DICT_MAP.put(AGREE, "同意"); + DICT_MAP.put(REFUSE, "拒绝"); + DICT_MAP.put(TRANSFER, "指派"); + DICT_MAP.put(MULTI_SIGN, "多实例会签"); + DICT_MAP.put(MULTI_AGREE, "会签同意"); + DICT_MAP.put(MULTI_REFUSE, "会签拒绝"); + DICT_MAP.put(MULTI_ABSTAIN, "会签弃权"); + DICT_MAP.put(MULTI_CONSIGN, "多实例加签"); + DICT_MAP.put(STOP, "中止"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FlowApprovalType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowConstant.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowConstant.java new file mode 100644 index 00000000..7a8bb44f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowConstant.java @@ -0,0 +1,85 @@ +package com.flow.demo.common.flow.constant; + +/** + * 工作流中的常量数据。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class FlowConstant { + + /** + * 标识流程实例启动用户的变量名。 + */ + public final static String START_USER_NAME_VAR = "${startUserName}"; + + /** + * 流程实例发起人变量名。 + */ + public final static String PROC_INSTANCE_INITIATOR_VAR = "initiator"; + + /** + * 流程实例中发起人用户的变量名。 + */ + public final static String PROC_INSTANCE_START_USER_NAME_VAR = "startUserName"; + + /** + * 操作类型变量。 + */ + public final static String OPERATION_TYPE_VAR = "operationType"; + + /** + * 多任务拒绝数量变量。 + */ + public final static String MULTI_REFUSE_COUNT_VAR = "multiRefuseCount"; + + /** + * 多任务同意数量变量。 + */ + public final static String MULTI_AGREE_COUNT_VAR = "multiAgreeCount"; + + /** + * 多任务弃权数量变量。 + */ + public final static String MULTI_ABSTAIN_COUNT_VAR = "multiAbstainCount"; + + /** + * 会签发起任务。 + */ + public final static String MULTI_SIGN_START_TASK_VAR = "multiSignStartTask"; + + /** + * 会签任务总数量。 + */ + public final static String MULTI_SIGN_NUM_OF_INSTANCES_VAR = "multiNumOfInstances"; + + /** + * 多实例实例数量变量。 + */ + public final static String NUMBER_OF_INSTANCES_VAR = "nrOfInstances"; + + /** + * 多任务指派人列表变量。 + */ + public final static String MULTI_ASSIGNEE_LIST_VAR = "assigneeList"; + + /** + * 上级部门领导审批变量 + */ + public final static String GROUP_TYPE_UP_DEPT_POST_LEADER_VAR = "upDeptPostLeader"; + + /** + * 上级部门领导审批变量 + */ + public final static String GROUP_TYPE_DEPT_POST_LEADER_VAR = "deptPostLeader"; + + /** + * 上级部门领导审批 + */ + public final static String GROUP_TYPE_UP_DEPT_POST_LEADER = "UP_DEPT_POST_LEADER"; + + /** + * 本部门岗位领导审批 + */ + public final static String GROUP_TYPE_DEPT_POST_LEADER = "DEPT_POST_LEADER"; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowTaskStatus.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowTaskStatus.java new file mode 100644 index 00000000..4573242a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowTaskStatus.java @@ -0,0 +1,64 @@ +package com.flow.demo.common.flow.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 工作流任务类型。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FlowTaskStatus { + + /** + * 已提交。 + */ + public static final int SUBMITTED = 0; + /** + * 审批中。 + */ + public static final int APPROVING = 1; + /** + * 被拒绝。 + */ + public static final int REFUSED = 2; + /** + * 已结束。 + */ + public static final int FINISHED = 3; + /** + * 提前停止。 + */ + public static final Integer STOPPED = 4; + /** + * 已取消。 + */ + public static final Integer CANCELLED = 5; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(SUBMITTED, "已提交"); + DICT_MAP.put(APPROVING, "审批中"); + DICT_MAP.put(REFUSED, "被拒绝"); + DICT_MAP.put(FINISHED, "已结束"); + DICT_MAP.put(STOPPED, "提前停止"); + DICT_MAP.put(CANCELLED, "已取消"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FlowTaskStatus() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowTaskType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowTaskType.java new file mode 100644 index 00000000..1f22e5f1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/constant/FlowTaskType.java @@ -0,0 +1,44 @@ +package com.flow.demo.common.flow.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 工作流任务类型。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FlowTaskType { + + /** + * 其他类型任务。 + */ + public static final int OTHER_TYPE = 0; + /** + * 用户任务。 + */ + public static final int USER_TYPE = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(OTHER_TYPE, "其他任务类型"); + DICT_MAP.put(USER_TYPE, "用户任务类型"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FlowTaskType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowCategoryController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowCategoryController.java new file mode 100644 index 00000000..5107c057 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowCategoryController.java @@ -0,0 +1,195 @@ +package com.flow.demo.common.flow.controller; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import cn.jimmyshi.beanquery.BeanQuery; +import com.github.pagehelper.page.PageMethod; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.flow.dto.*; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.flow.model.constant.FlowEntryStatus; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.flow.vo.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +/** + * 工作流分类操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-flow.urlPrefix}/flowCategory") +public class FlowCategoryController { + + @Autowired + private FlowCategoryService flowCategoryService; + @Autowired + private FlowEntryService flowEntryService; + + /** + * 新增FlowCategory数据。 + * + * @param flowCategoryDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody FlowCategoryDto flowCategoryDto) { + String errorMessage = MyCommonUtil.getModelValidationError(flowCategoryDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + FlowCategory flowCategory = MyModelUtil.copyTo(flowCategoryDto, FlowCategory.class); + flowCategory = flowCategoryService.saveNew(flowCategory); + return ResponseResult.success(flowCategory.getCategoryId()); + } + + /** + * 更新FlowCategory数据。 + * + * @param flowCategoryDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody FlowCategoryDto flowCategoryDto) { + String errorMessage = MyCommonUtil.getModelValidationError(flowCategoryDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + FlowCategory flowCategory = MyModelUtil.copyTo(flowCategoryDto, FlowCategory.class); + FlowCategory originalFlowCategory = flowCategoryService.getById(flowCategory.getCategoryId()); + if (originalFlowCategory == null) { + errorMessage = "数据验证失败,当前流程分类并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!StrUtil.equals(flowCategory.getCode(), originalFlowCategory.getCode())) { + FlowEntry filter = new FlowEntry(); + filter.setCategoryId(flowCategory.getCategoryId()); + filter.setStatus(FlowEntryStatus.PUBLISHED); + List flowEntryList = flowEntryService.getListByFilter(filter); + if (CollUtil.isNotEmpty(flowEntryList)) { + errorMessage = "数据验证失败,当前流程分类存在已经发布的流程数据,因此分类标识不能修改!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + if (!flowCategoryService.update(flowCategory, originalFlowCategory)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除FlowCategory数据。 + * + * @param categoryId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long categoryId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(categoryId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + FlowCategory originalFlowCategory = flowCategoryService.getById(categoryId); + if (originalFlowCategory == null) { + errorMessage = "数据验证失败,当前流程分类并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + FlowEntry filter = new FlowEntry(); + filter.setCategoryId(categoryId); + List flowEntryList = flowEntryService.getListByFilter(filter); + if (CollUtil.isNotEmpty(flowEntryList)) { + errorMessage = "数据验证失败,请先删除当前流程分类关联的流程数据!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!flowCategoryService.remove(categoryId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的FlowCategory列表。 + * + * @param flowCategoryDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody FlowCategoryDto flowCategoryDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + FlowCategory flowCategoryFilter = MyModelUtil.copyTo(flowCategoryDtoFilter, FlowCategory.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, FlowCategory.class); + List flowCategoryList = flowCategoryService.getFlowCategoryListWithRelation(flowCategoryFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(flowCategoryList, FlowCategory.INSTANCE)); + } + + /** + * 查看指定FlowCategory对象详情。 + * + * @param categoryId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long categoryId) { + if (MyCommonUtil.existBlankArgument(categoryId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + FlowCategory flowCategory = flowCategoryService.getByIdWithRelation(categoryId, MyRelationParam.full()); + if (flowCategory == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + FlowCategoryVo flowCategoryVo = FlowCategory.INSTANCE.fromModel(flowCategory); + return ResponseResult.success(flowCategoryVo); + } + + /** + * 以字典形式返回全部FlowCategory数据集合。字典的键值为[categoryId, name]。 + * 白名单接口,登录用户均可访问。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 + */ + @GetMapping("/listDict") + public ResponseResult>> listDict(FlowCategory filter) { + List resultList = flowCategoryService.getListByFilter(filter); + return ResponseResult.success(BeanQuery.select( + "categoryId as id", "name as name").executeFrom(resultList)); + } + + /** + * 根据字典Id集合,获取查询后的字典数据。 + * + * @param dictIds 字典Id集合。 + * @return 应答结果对象,包含字典形式的数据集合。 + */ + @PostMapping("/listDictByIds") + public ResponseResult>> listDictByIds( + @MyRequestBody(elementType = Long.class) List dictIds) { + List resultList = flowCategoryService.getInList(new HashSet<>(dictIds)); + return ResponseResult.success(BeanQuery.select( + "categoryId as id", "name as name").executeFrom(resultList)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowEntryController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowEntryController.java new file mode 100644 index 00000000..96df3500 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowEntryController.java @@ -0,0 +1,537 @@ +package com.flow.demo.common.flow.controller; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.jimmyshi.beanquery.BeanQuery; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.page.PageMethod; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.flow.constant.FlowTaskType; +import com.flow.demo.common.flow.dto.*; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.flow.model.constant.FlowEntryStatus; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.flow.vo.*; +import lombok.Cleanup; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.converter.BpmnXMLConverter; +import org.flowable.bpmn.model.*; +import org.flowable.bpmn.model.Process; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * 工作流操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-flow.urlPrefix}/flowEntry") +public class FlowEntryController { + + @Autowired + private FlowEntryService flowEntryService; + @Autowired + private FlowCategoryService flowCategoryService; + @Autowired + private FlowEntryVariableService flowEntryVariableService; + + /** + * 新增工作流对象数据。 + * + * @param flowEntryDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody FlowEntryDto flowEntryDto) { + String errorMessage = MyCommonUtil.getModelValidationError(flowEntryDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + FlowEntry flowEntry = MyModelUtil.copyTo(flowEntryDto, FlowEntry.class); + if (flowEntryService.existOne("processDefinitionKey", flowEntry.getProcessDefinitionKey())) { + errorMessage = "数据验证失败,该流程定义标识已存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + // 验证关联Id的数据合法性 + CallResult callResult = flowEntryService.verifyRelatedData(flowEntry, null); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + flowEntry = flowEntryService.saveNew(flowEntry); + return ResponseResult.success(flowEntry.getEntryId()); + } + + /** + * 更新工作流对象数据。 + * + * @param flowEntryDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody FlowEntryDto flowEntryDto) { + String errorMessage = MyCommonUtil.getModelValidationError(flowEntryDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + FlowEntry flowEntry = MyModelUtil.copyTo(flowEntryDto, FlowEntry.class); + FlowEntry originalFlowEntry = flowEntryService.getById(flowEntry.getEntryId()); + if (originalFlowEntry == null) { + errorMessage = "数据验证失败,当前流程并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (ObjectUtil.notEqual(flowEntry.getProcessDefinitionKey(), originalFlowEntry.getProcessDefinitionKey())) { + if (originalFlowEntry.getStatus().equals(FlowEntryStatus.PUBLISHED)) { + errorMessage = "数据验证失败,当前流程为发布状态,流程标识不能修改!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (flowEntryService.existOne("processDefinitionKey", flowEntry.getProcessDefinitionKey())) { + errorMessage = "数据验证失败,该流程定义标识已存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + if (ObjectUtil.notEqual(flowEntry.getCategoryId(), originalFlowEntry.getCategoryId())) { + if (originalFlowEntry.getStatus().equals(FlowEntryStatus.PUBLISHED)) { + errorMessage = "数据验证失败,当前流程为发布状态,流程分类不能修改!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + } + // 验证关联Id的数据合法性 + CallResult callResult = flowEntryService.verifyRelatedData(flowEntry, originalFlowEntry); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!flowEntryService.update(flowEntry, originalFlowEntry)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除工作流对象数据。 + * + * @param entryId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long entryId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(entryId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + FlowEntry originalFlowEntry = flowEntryService.getById(entryId); + if (originalFlowEntry == null) { + errorMessage = "数据验证失败,当前流程并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (originalFlowEntry.getStatus().equals(FlowEntryStatus.PUBLISHED)) { + errorMessage = "数据验证失败,当前流程为发布状态,不能删除!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!flowEntryService.remove(entryId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 发布工作流。 + * + * @param entryId 流程主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/publish") + public ResponseResult publish(@MyRequestBody(required = true) Long entryId) throws XMLStreamException { + String errorMessage; + FlowEntry flowEntry = flowEntryService.getById(entryId); + if (flowEntry == null) { + errorMessage = "数据验证失败,该流程并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (StrUtil.isBlank(flowEntry.getBpmnXml())) { + errorMessage = "数据验证失败,该流程没有流程图不能被发布!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + ResponseResult taskInfoResult = this.verifyAndGetInitialTaskInfo(flowEntry); + if (!taskInfoResult.isSuccess()) { + return ResponseResult.errorFrom(taskInfoResult); + } + List flowTaskExtList = this.buildTaskExtList(flowEntry); + String taskInfo = taskInfoResult.getData() == null ? null : JSON.toJSONString(taskInfoResult.getData()); + flowEntryService.publish(flowEntry, taskInfo, flowTaskExtList); + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的工作流列表。 + * + * @param flowEntryDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody FlowEntryDto flowEntryDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + FlowEntry flowEntryFilter = MyModelUtil.copyTo(flowEntryDtoFilter, FlowEntry.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, FlowEntry.class); + List flowEntryList = flowEntryService.getFlowEntryListWithRelation(flowEntryFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(flowEntryList, FlowEntry.INSTANCE)); + } + + /** + * 查看指定工作流对象详情。 + * + * @param entryId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long entryId) { + if (MyCommonUtil.existBlankArgument(entryId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + FlowEntry flowEntry = flowEntryService.getByIdWithRelation(entryId, MyRelationParam.full()); + if (flowEntry == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + FlowEntryVo flowEntryVo = FlowEntry.INSTANCE.fromModel(flowEntry); + return ResponseResult.success(flowEntryVo); + } + + /** + * 列出指定流程的发布版本列表。 + * + * @param entryId 流程主键Id。 + * @return 应答结果对象,包含流程发布列表数据。 + */ + @GetMapping("/listFlowEntryPublish") + public ResponseResult> listFlowEntryPublish(@RequestParam Long entryId) { + List flowEntryPublishList = flowEntryService.getFlowEntryPublishList(entryId); + return ResponseResult.success(MyModelUtil.copyCollectionTo(flowEntryPublishList, FlowEntryPublishVo.class)); + } + + /** + * 以字典形式返回全部FlowEntry数据集合。字典的键值为[entryId, procDefinitionName]。 + * 白名单接口,登录用户均可访问。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 + */ + @GetMapping("/listDict") + public ResponseResult>> listDict(FlowEntry filter) { + List resultList = flowEntryService.getListByFilter(filter); + return ResponseResult.success(BeanQuery.select( + "entryId as id", "processDefinitionName as name").executeFrom(resultList)); + } + + /** + * 白名单接口,根据流程Id,获取流程引擎需要的流程标识和流程名称。 + * + * @param entryId 流程Id。 + * @return 流程的部分数据。 + */ + @GetMapping("/viewDict") + public ResponseResult> viewDict(@RequestParam Long entryId) { + FlowEntry flowEntry = flowEntryService.getById(entryId); + if (flowEntry == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + Map resultMap = new HashMap<>(2); + resultMap.put("processDefinitionKey", flowEntry.getProcessDefinitionKey()); + resultMap.put("processDefinitionName", flowEntry.getProcessDefinitionName()); + return ResponseResult.success(resultMap); + } + + /** + * 切换指定工作的发布主版本。 + * + * @param entryId 工作流主键Id。 + * @param newEntryPublishId 新的工作流发布主版本对象的主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/updateMainVersion") + public ResponseResult updateMainVersion( + @MyRequestBody(required = true) Long entryId, + @MyRequestBody(required = true) Long newEntryPublishId) { + String errorMessage; + FlowEntryPublish flowEntryPublish = flowEntryService.getFlowEntryPublishById(newEntryPublishId); + if (flowEntryPublish == null) { + errorMessage = "数据验证失败,当前流程发布版本并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (ObjectUtil.notEqual(entryId, flowEntryPublish.getEntryId())) { + errorMessage = "数据验证失败,当前工作流并不包含该工作流发布版本数据,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (flowEntryPublish.getMainVersion()) { + errorMessage = "数据验证失败,该版本已经为当前工作流的发布主版本,不能重复设置!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + flowEntryService.updateFlowEntryMainVersion(flowEntryService.getById(entryId), flowEntryPublish); + return ResponseResult.success(); + } + + /** + * 挂起工作流的指定发布版本。 + * + * @param entryPublishId 工作发布Id。 + * @return 应答结果对象。 + */ + @PostMapping("/suspendFlowEntryPublish") + public ResponseResult suspendFlowEntryPublish(@MyRequestBody(required = true) Long entryPublishId) { + String errorMessage; + FlowEntryPublish flowEntryPublish = flowEntryService.getFlowEntryPublishById(entryPublishId); + if (flowEntryPublish == null) { + errorMessage = "数据验证失败,当前流程发布版本并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!flowEntryPublish.getActiveStatus()) { + errorMessage = "数据验证失败,当前流程发布版本已处于挂起状态!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + flowEntryService.suspendFlowEntryPublish(flowEntryPublish); + return ResponseResult.success(); + } + + /** + * 激活工作流的指定发布版本。 + * + * @param entryPublishId 工作发布Id。 + * @return 应答结果对象。 + */ + @PostMapping("/activateFlowEntryPublish") + public ResponseResult activateFlowEntryPublish(@MyRequestBody(required = true) Long entryPublishId) { + String errorMessage; + FlowEntryPublish flowEntryPublish = flowEntryService.getFlowEntryPublishById(entryPublishId); + if (flowEntryPublish == null) { + errorMessage = "数据验证失败,当前流程发布版本并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (flowEntryPublish.getActiveStatus()) { + errorMessage = "数据验证失败,当前流程发布版本已处于激活状态!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + flowEntryService.activateFlowEntryPublish(flowEntryPublish); + return ResponseResult.success(); + } + + private FlowTaskExt buildTaskExt(UserTask userTask) { + FlowTaskExt flowTaskExt = new FlowTaskExt(); + flowTaskExt.setTaskId(userTask.getId()); + String formKey = userTask.getFormKey(); + if (StrUtil.isNotBlank(formKey)) { + TaskInfoVo taskInfoVo = JSON.parseObject(formKey, TaskInfoVo.class); + flowTaskExt.setGroupType(taskInfoVo.getGroupType()); + } + Map> extensionMap = userTask.getExtensionElements(); + if (MapUtil.isNotEmpty(extensionMap)) { + List operationList = this.buildUserTaskOperationListExtensionElement(extensionMap); + if (CollUtil.isNotEmpty(operationList)) { + flowTaskExt.setOperationListJson(JSON.toJSONString(operationList)); + } + List variableList = this.buildUserTaskVariableListExtensionElement(extensionMap); + if (CollUtil.isNotEmpty(variableList)) { + flowTaskExt.setVariableListJson(JSON.toJSONString(variableList)); + } + JSONObject assigneeListObject = this.buildUserTaskAssigneeListExtensionElement(extensionMap); + if (assigneeListObject != null) { + flowTaskExt.setAssigneeListJson(JSON.toJSONString(assigneeListObject)); + } + } + return flowTaskExt; + } + + private List buildTaskExtList(FlowEntry flowEntry) throws XMLStreamException { + List flowTaskExtList = new LinkedList<>(); + BpmnModel bpmnModel = this.convertToBpmnModel(flowEntry.getBpmnXml()); + List processList = bpmnModel.getProcesses(); + for (Process process : processList) { + for (FlowElement element : process.getFlowElements()) { + if (element instanceof UserTask) { + FlowTaskExt flowTaskExt = this.buildTaskExt((UserTask) element); + flowTaskExtList.add(flowTaskExt); + } + } + } + return flowTaskExtList; + } + + private ResponseResult verifyAndGetInitialTaskInfo(FlowEntry flowEntry) throws XMLStreamException { + String errorMessage; + BpmnModel bpmnModel = this.convertToBpmnModel(flowEntry.getBpmnXml()); + Process process = bpmnModel.getMainProcess(); + if (process == null) { + errorMessage = "数据验证失败,当前流程标识 [" + flowEntry.getProcessDefinitionKey() + "] 关联的流程模型并不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + Collection elementList = process.getFlowElements(); + FlowElement startEvent = null; + FlowElement firstTask = null; + // 这里我们只定位流程模型中的第二个节点。 + for (FlowElement flowElement : elementList) { + if (flowElement instanceof StartEvent) { + startEvent = flowElement; + break; + } + } + if (startEvent == null) { + errorMessage = "数据验证失败,当前流程图没有包含 [开始事件] 节点,请修改流程图!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + for (FlowElement flowElement : elementList) { + if (flowElement instanceof SequenceFlow) { + SequenceFlow sequenceFlow = (SequenceFlow) flowElement; + if (sequenceFlow.getSourceFlowElement().equals(startEvent)) { + firstTask = sequenceFlow.getTargetFlowElement(); + break; + } + } + } + if (firstTask == null) { + errorMessage = "数据验证失败,当前流程图没有包含 [开始事件] 节点没有任何连线,请修改流程图!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + TaskInfoVo taskInfoVo; + if (firstTask instanceof UserTask) { + UserTask userTask = (UserTask) firstTask; + String formKey = userTask.getFormKey(); + if (StrUtil.isNotBlank(formKey)) { + taskInfoVo = JSON.parseObject(formKey, TaskInfoVo.class); + } else { + taskInfoVo = new TaskInfoVo(); + } + taskInfoVo.setAssignee(userTask.getAssignee()); + taskInfoVo.setTaskKey(userTask.getId()); + taskInfoVo.setTaskType(FlowTaskType.USER_TYPE); + Map> extensionMap = userTask.getExtensionElements(); + if (MapUtil.isNotEmpty(extensionMap)) { + taskInfoVo.setOperationList(this.buildUserTaskOperationListExtensionElement(extensionMap)); + taskInfoVo.setVariableList(this.buildUserTaskVariableListExtensionElement(extensionMap)); + } + } else { + taskInfoVo = new TaskInfoVo(); + taskInfoVo.setTaskType(FlowTaskType.OTHER_TYPE); + } + return ResponseResult.success(taskInfoVo); + } + + private JSONObject buildUserTaskAssigneeListExtensionElement( + Map> extensionMap) { + JSONObject jsonData = null; + List elementAssigneeList = extensionMap.get("assigneeList"); + if (CollUtil.isEmpty(elementAssigneeList)) { + return jsonData; + } + ExtensionElement ee = elementAssigneeList.get(0); + Map> childExtensionMap = ee.getChildElements(); + if (MapUtil.isEmpty(childExtensionMap)) { + return jsonData; + } + List assigneeElements = childExtensionMap.get("assignee"); + if (CollUtil.isEmpty(assigneeElements)) { + return jsonData; + } + JSONArray assigneeIdArray = new JSONArray(); + for (ExtensionElement e : assigneeElements) { + assigneeIdArray.add(e.getAttributeValue(null, "id")); + } + jsonData = new JSONObject(); + String assigneeType = ee.getAttributeValue(null, "type"); + jsonData.put("assigneeType", assigneeType); + jsonData.put("assigneeList", assigneeIdArray); + return jsonData; + } + + private List buildUserTaskOperationListExtensionElement( + Map> extensionMap) { + List resultList = null; + List elementOperationList = extensionMap.get("operationList"); + if (CollUtil.isEmpty(elementOperationList)) { + return resultList; + } + ExtensionElement ee = elementOperationList.get(0); + Map> childExtensionMap = ee.getChildElements(); + if (MapUtil.isEmpty(childExtensionMap)) { + return resultList; + } + List formOperationElements = childExtensionMap.get("formOperation"); + if (CollUtil.isEmpty(formOperationElements)) { + return resultList; + } + resultList = new LinkedList<>(); + for (ExtensionElement e : formOperationElements) { + JSONObject operationJsonData = new JSONObject(); + operationJsonData.put("id", e.getAttributeValue(null, "id")); + operationJsonData.put("label", e.getAttributeValue(null, "label")); + operationJsonData.put("type", e.getAttributeValue(null, "type")); + operationJsonData.put("showOrder", e.getAttributeValue(null, "showOrder")); + resultList.add(operationJsonData); + } + return resultList; + } + + private List buildUserTaskVariableListExtensionElement( + Map> extensionMap) { + List elementVariableList = extensionMap.get("variableList"); + if (CollUtil.isEmpty(elementVariableList)) { + return null; + } + ExtensionElement ee = elementVariableList.get(0); + Map> childExtensionMap = ee.getChildElements(); + if (MapUtil.isEmpty(childExtensionMap)) { + return null; + } + List formVariableElements = childExtensionMap.get("formVariable"); + if (CollUtil.isEmpty(formVariableElements)) { + return null; + } + Set variableIdSet = new HashSet<>(); + for (ExtensionElement e : formVariableElements) { + String id = e.getAttributeValue(null, "id"); + variableIdSet.add(Long.parseLong(id)); + } + List variableList = flowEntryVariableService.getInList(variableIdSet); + List resultList = new LinkedList<>(); + for (FlowEntryVariable variable : variableList) { + resultList.add((JSONObject) JSON.toJSON(variable)); + } + return resultList; + } + + private BpmnModel convertToBpmnModel(String bpmnXml) throws XMLStreamException { + BpmnXMLConverter converter = new BpmnXMLConverter(); + InputStream in = new ByteArrayInputStream(bpmnXml.getBytes(StandardCharsets.UTF_8)); + @Cleanup XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(in); + return converter.convertToBpmnModel(reader); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowEntryVariableController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowEntryVariableController.java new file mode 100644 index 00000000..1fd1b71e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowEntryVariableController.java @@ -0,0 +1,143 @@ +package com.flow.demo.common.flow.controller; + +import com.github.pagehelper.page.PageMethod; +import com.flow.demo.common.flow.vo.*; +import com.flow.demo.common.flow.dto.*; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.constant.*; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import javax.validation.groups.Default; + +/** + * 流程变量操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-flow.urlPrefix}/flowEntryVariable") +public class FlowEntryVariableController { + + @Autowired + private FlowEntryVariableService flowEntryVariableService; + + /** + * 新增流程变量数据。 + * + * @param flowEntryVariableDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody FlowEntryVariableDto flowEntryVariableDto) { + String errorMessage = MyCommonUtil.getModelValidationError(flowEntryVariableDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + FlowEntryVariable flowEntryVariable = MyModelUtil.copyTo(flowEntryVariableDto, FlowEntryVariable.class); + flowEntryVariable = flowEntryVariableService.saveNew(flowEntryVariable); + return ResponseResult.success(flowEntryVariable.getVariableId()); + } + + /** + * 更新流程变量数据。 + * + * @param flowEntryVariableDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody FlowEntryVariableDto flowEntryVariableDto) { + String errorMessage = MyCommonUtil.getModelValidationError(flowEntryVariableDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + FlowEntryVariable flowEntryVariable = MyModelUtil.copyTo(flowEntryVariableDto, FlowEntryVariable.class); + FlowEntryVariable originalFlowEntryVariable = flowEntryVariableService.getById(flowEntryVariable.getVariableId()); + if (originalFlowEntryVariable == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!flowEntryVariableService.update(flowEntryVariable, originalFlowEntryVariable)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除流程变量数据。 + * + * @param variableId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long variableId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(variableId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + FlowEntryVariable originalFlowEntryVariable = flowEntryVariableService.getById(variableId); + if (originalFlowEntryVariable == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!flowEntryVariableService.remove(variableId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的流程变量列表。 + * + * @param flowEntryVariableDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody FlowEntryVariableDto flowEntryVariableDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + FlowEntryVariable flowEntryVariableFilter = MyModelUtil.copyTo(flowEntryVariableDtoFilter, FlowEntryVariable.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, FlowEntryVariable.class); + List flowEntryVariableList = + flowEntryVariableService.getFlowEntryVariableListWithRelation(flowEntryVariableFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(flowEntryVariableList, FlowEntryVariable.INSTANCE)); + } + + /** + * 查看指定流程变量对象详情。 + * + * @param variableId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long variableId) { + if (MyCommonUtil.existBlankArgument(variableId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + FlowEntryVariable flowEntryVariable = flowEntryVariableService.getByIdWithRelation(variableId, MyRelationParam.full()); + if (flowEntryVariable == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + FlowEntryVariableVo flowEntryVariableVo = FlowEntryVariable.INSTANCE.fromModel(flowEntryVariable); + return ResponseResult.success(flowEntryVariableVo); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowOperationController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowOperationController.java new file mode 100644 index 00000000..c1fdb6e2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/controller/FlowOperationController.java @@ -0,0 +1,508 @@ +package com.flow.demo.common.flow.controller; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.flow.constant.FlowConstant; +import com.flow.demo.common.flow.constant.FlowTaskStatus; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.flow.util.FlowOperationHelper; +import com.flow.demo.common.flow.vo.FlowTaskCommentVo; +import com.flow.demo.common.flow.vo.FlowTaskVo; +import com.flow.demo.common.flow.vo.TaskInfoVo; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.converter.BpmnXMLConverter; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.Process; +import org.flowable.bpmn.model.SequenceFlow; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StreamUtils; +import org.springframework.web.bind.annotation.*; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.text.ParseException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 流程操作接口类 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-flow.urlPrefix}/flowOperation") +public class FlowOperationController { + + @Autowired + private FlowEntryService flowEntryService; + @Autowired + private FlowTaskCommentService flowTaskCommentService; + @Autowired + private FlowTaskExtService flowTaskExtService; + @Autowired + private FlowApiService flowApiService; + @Autowired + private FlowWorkOrderService flowWorkOrderService; + @Autowired + private FlowOperationHelper flowOperationHelper; + + /** + * 根据指定流程的主版本,发起一个流程实例。 + * + * @param processDefinitionKey 流程标识。 + * @return 应答结果对象。 + */ + @PostMapping("/startOnly") + public ResponseResult startOnly(@MyRequestBody(required = true) String processDefinitionKey) { + // 1. 验证流程数据的合法性。 + ResponseResult flowEntryResult = flowOperationHelper.verifyAndGetFlowEntry(processDefinitionKey); + if (!flowEntryResult.isSuccess()) { + return ResponseResult.errorFrom(flowEntryResult); + } + // 2. 验证流程一个用户任务的合法性。 + FlowEntryPublish flowEntryPublish = flowEntryResult.getData().getMainFlowEntryPublish(); + ResponseResult taskInfoResult = + flowOperationHelper.verifyAndGetInitialTaskInfo(flowEntryPublish, false); + if (!taskInfoResult.isSuccess()) { + return ResponseResult.errorFrom(taskInfoResult); + } + flowApiService.start(flowEntryPublish.getProcessDefinitionId()); + return ResponseResult.success(); + } + + /** + * 获取开始节点之后的第一个任务节点的数据。 + * + * @param processDefinitionKey 流程标识。 + * @return 任务节点的自定义对象数据。 + */ + @GetMapping("/viewInitialTaskInfo") + public ResponseResult viewInitialTaskInfo(@RequestParam String processDefinitionKey) { + ResponseResult flowEntryResult = flowOperationHelper.verifyAndGetFlowEntry(processDefinitionKey); + if (!flowEntryResult.isSuccess()) { + return ResponseResult.errorFrom(flowEntryResult); + } + FlowEntryPublish flowEntryPublish = flowEntryResult.getData().getMainFlowEntryPublish(); + String initTaskInfo = flowEntryPublish.getInitTaskInfo(); + TaskInfoVo taskInfo = StrUtil.isBlank(initTaskInfo) + ? null : JSON.parseObject(initTaskInfo, TaskInfoVo.class); + if (taskInfo != null) { + String loginName = TokenData.takeFromRequest().getLoginName(); + taskInfo.setAssignedMe(StrUtil.equalsAny( + taskInfo.getAssignee(), loginName, FlowConstant.START_USER_NAME_VAR)); + } + return ResponseResult.success(taskInfo); + } + + /** + * 获取流程运行时指定任务的信息。 + * + * @param processDefinitionId 流程引擎的定义Id。 + * @param processInstanceId 流程引擎的实例Id。 + * @param taskId 流程引擎的任务Id。 + * @return 任务节点的自定义对象数据。 + */ + @GetMapping("/viewRuntimeTaskInfo") + public ResponseResult viewRuntimeTaskInfo( + @RequestParam String processDefinitionId, + @RequestParam String processInstanceId, + @RequestParam String taskId) { + Task task = flowApiService.getProcessInstanceActiveTask(processInstanceId, taskId); + ResponseResult taskInfoResult = flowOperationHelper.verifyAndGetRuntimeTaskInfo(task); + if (!taskInfoResult.isSuccess()) { + return ResponseResult.errorFrom(taskInfoResult); + } + TaskInfoVo taskInfoVo = taskInfoResult.getData(); + FlowTaskExt flowTaskExt = + flowTaskExtService.getByProcessDefinitionIdAndTaskId(processDefinitionId, taskInfoVo.getTaskKey()); + if (flowTaskExt != null) { + if (StrUtil.isNotBlank(flowTaskExt.getOperationListJson())) { + taskInfoVo.setOperationList(JSON.parseArray(flowTaskExt.getOperationListJson(), JSONObject.class)); + } + if (StrUtil.isNotBlank(flowTaskExt.getVariableListJson())) { + taskInfoVo.setVariableList(JSON.parseArray(flowTaskExt.getVariableListJson(), JSONObject.class)); + } + } + return ResponseResult.success(taskInfoVo); + } + + /** + * 获取流程运行时指定任务的信息。 + * + * @param processDefinitionId 流程引擎的定义Id。 + * @param processInstanceId 流程引擎的实例Id。 + * @param taskId 流程引擎的任务Id。 + * @return 任务节点的自定义对象数据。 + */ + @GetMapping("/viewHistoricTaskInfo") + public ResponseResult viewHistoricTaskInfo( + @RequestParam String processDefinitionId, + @RequestParam String processInstanceId, + @RequestParam String taskId) { + String errorMessage; + HistoricTaskInstance taskInstance = flowApiService.getHistoricTaskInstance(processInstanceId, taskId); + String loginName = TokenData.takeFromRequest().getLoginName(); + if (!StrUtil.equals(taskInstance.getAssignee(), loginName)) { + errorMessage = "数据验证失败,当前用户不是指派人!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + TaskInfoVo taskInfoVo = JSON.parseObject(taskInstance.getFormKey(), TaskInfoVo.class); + FlowTaskExt flowTaskExt = + flowTaskExtService.getByProcessDefinitionIdAndTaskId(processDefinitionId, taskInstance.getTaskDefinitionKey()); + if (flowTaskExt != null) { + if (StrUtil.isNotBlank(flowTaskExt.getOperationListJson())) { + taskInfoVo.setOperationList(JSON.parseArray(flowTaskExt.getOperationListJson(), JSONObject.class)); + } + if (StrUtil.isNotBlank(flowTaskExt.getVariableListJson())) { + taskInfoVo.setVariableList(JSON.parseArray(flowTaskExt.getVariableListJson(), JSONObject.class)); + } + } + return ResponseResult.success(taskInfoVo); + } + + /** + * 获取第一个提交表单数据的任务信息。 + * + * @param processInstanceId 流程实例Id。 + * @return 任务节点的自定义对象数据。 + */ + @GetMapping("/viewInitialHistoricTaskInfo") + public ResponseResult viewInitialHistoricTaskInfo(@RequestParam String processInstanceId) { + String errorMessage; + List taskCommentList = + flowTaskCommentService.getFlowTaskCommentList(processInstanceId); + if (CollUtil.isEmpty(taskCommentList)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + FlowTaskComment taskComment = taskCommentList.get(0); + if (ObjectUtil.notEqual(taskComment.getCreateUserId(), TokenData.takeFromRequest().getUserId())) { + errorMessage = "数据验证失败,当前流程发起人与当前用户不匹配!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + HistoricTaskInstance task = flowApiService.getHistoricTaskInstance(processInstanceId, taskComment.getTaskId()); + if (StrUtil.isBlank(task.getFormKey())) { + errorMessage = "数据验证失败,指定任务的formKey属性不存在,请重新修改流程图!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + TaskInfoVo taskInfo = JSON.parseObject(task.getFormKey(), TaskInfoVo.class); + taskInfo.setTaskKey(task.getTaskDefinitionKey()); + return ResponseResult.success(taskInfo); + } + + /** + * 提交多实例加签。 + * + * @param processInstanceId 流程实例Id。 + * @param taskId 多实例任务的上一级任务Id。 + * @param newAssignees 新的加签人列表,多个指派人之间逗号分隔。 + * @return 应答结果。 + */ + @PostMapping("/submitConsign") + public ResponseResult submitConsign( + @MyRequestBody(required = true) String processInstanceId, + @MyRequestBody(required = true) String taskId, + @MyRequestBody(required = true) String newAssignees) { + String errorMessage; + if (!flowApiService.existActiveProcessInstance(processInstanceId)) { + errorMessage = "数据验证失败,当前流程实例已经结束,不能执行加签!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + HistoricTaskInstance taskInstance = flowApiService.getHistoricTaskInstance(processInstanceId, taskId); + if (taskInstance == null) { + errorMessage = "数据验证失败,当前任务不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!StrUtil.equals(taskInstance.getAssignee(), TokenData.takeFromRequest().getLoginName())) { + errorMessage = "数据验证失败,任务指派人与当前用户不匹配!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + List activeTaskList = flowApiService.getProcessInstanceActiveTaskList(processInstanceId); + Task activeMultiInstanceTask = null; + for (Task activeTask : activeTaskList) { + Object startTaskId = flowApiService.getTaskVariable( + activeTask.getId(), FlowConstant.MULTI_SIGN_START_TASK_VAR); + if (startTaskId != null && startTaskId.toString().equals(taskId)) { + activeMultiInstanceTask = activeTask; + break; + } + } + if (activeMultiInstanceTask == null) { + errorMessage = "数据验证失败,指定加签任务不存在或已审批完毕!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + flowApiService.submitConsign(taskInstance, activeMultiInstanceTask, newAssignees); + return ResponseResult.success(); + } + + /** + * 返回当前用户待办的任务列表。 + * + * @param processDefinitionKey 流程标识。 + * @param pageParam 分页对象。 + * @return 返回当前用户待办的任务列表。如果指定流程标识,则仅返回该流程的待办任务列表。 + */ + @PostMapping("/listRuntimeTask") + public ResponseResult> listRuntimeTask( + @MyRequestBody String processDefinitionKey, + @MyRequestBody(required = true) MyPageParam pageParam) { + String username = TokenData.takeFromRequest().getLoginName(); + MyPageData pageData = flowApiService.getTaskListByUserName(username, processDefinitionKey, pageParam); + List flowTaskVoList = flowApiService.convertToFlowTaskList(pageData.getDataList()); + return ResponseResult.success(MyPageUtil.makeResponseData(flowTaskVoList, pageData.getTotalCount())); + } + + /** + * 返回当前用户待办的任务数量。 + * + * @return 返回当前用户待办的任务数量。 + */ + @PostMapping("/countRuntimeTask") + public ResponseResult countRuntimeTask() { + String username = TokenData.takeFromRequest().getLoginName(); + long totalCount = flowApiService.getTaskCountByUserName(username); + return ResponseResult.success(totalCount); + } + + /** + * 获取当前流程任务的审批列表。 + * + * @param processInstanceId 当前运行时的流程实例Id。 + * @return 当前流程实例的详情数据。 + */ + @GetMapping("/listFlowTaskComment") + public ResponseResult> listFlowTaskComment(@RequestParam String processInstanceId) { + List flowTaskCommentList = + flowTaskCommentService.getFlowTaskCommentList(processInstanceId); + List resultList = FlowTaskComment.INSTANCE.fromModelList(flowTaskCommentList); + return ResponseResult.success(resultList); + } + + /** + * 获取指定流程定义的流程图。 + * + * @param processDefinitionId 流程定义Id。 + * @return 流程图。 + */ + @GetMapping("/viewProcessBpmn") + public ResponseResult viewProcessBpmn(@RequestParam String processDefinitionId) throws IOException { + BpmnXMLConverter converter = new BpmnXMLConverter(); + BpmnModel bpmnModel = flowApiService.getBpmnModelByDefinitionId(processDefinitionId); + byte[] xmlBytes = converter.convertToXML(bpmnModel); + InputStream in = new ByteArrayInputStream(xmlBytes); + return ResponseResult.success(StreamUtils.copyToString(in, StandardCharsets.UTF_8)); + } + + /** + * 获取流程图高亮数据。 + * + * @param processInstanceId 流程实例Id。 + * @return 流程图高亮数据。 + */ + @GetMapping("/viewHighlightFlowData") + public ResponseResult viewHighlightFlowData(@RequestParam String processInstanceId) { + HistoricProcessInstance hpi = flowApiService.getHistoricProcessInstance(processInstanceId); + BpmnModel bpmnModel = flowApiService.getBpmnModelByDefinitionId(hpi.getProcessDefinitionId()); + List processList = bpmnModel.getProcesses(); + List flowElementList = new LinkedList<>(); + processList.forEach(p -> flowElementList.addAll(p.getFlowElements())); + Map allSequenceFlowMap = new HashMap<>(16); + for (FlowElement flowElement : flowElementList) { + if (flowElement instanceof SequenceFlow) { + SequenceFlow sequenceFlow = (SequenceFlow) flowElement; + String ref = sequenceFlow.getSourceRef(); + String targetRef = sequenceFlow.getTargetRef(); + allSequenceFlowMap.put(ref + targetRef, sequenceFlow.getId()); + } + } + Set finishedTaskSet = new LinkedHashSet<>(); + //获取流程实例的历史节点(全部执行过的节点,被拒绝的任务节点将会出现多次) + List activityInstanceList = + flowApiService.getHistoricActivityInstanceList(processInstanceId); + Set finishedTaskSequenceSet = new LinkedHashSet<>(); + for (int i = 0; i < activityInstanceList.size(); i++) { + HistoricActivityInstance current = activityInstanceList.get(i); + if (i != activityInstanceList.size() - 1) { + HistoricActivityInstance next = activityInstanceList.get(i + 1); + finishedTaskSequenceSet.add(current.getActivityId() + next.getActivityId()); + } + finishedTaskSet.add(current.getActivityId()); + } + Set finishedSequenceFlowSet = new HashSet<>(); + finishedTaskSequenceSet.forEach(s -> finishedSequenceFlowSet.add(allSequenceFlowMap.get(s))); + //获取流程实例当前正在待办的节点 + List unfinishedInstanceList = + flowApiService.getHistoricUnfinishedInstanceList(processInstanceId); + Set unfinishedTaskSet = new LinkedHashSet<>(); + for (HistoricActivityInstance unfinishedActivity : unfinishedInstanceList) { + unfinishedTaskSet.add(unfinishedActivity.getActivityId()); + } + JSONObject jsonData = new JSONObject(); + jsonData.put("finishedTaskSet", finishedTaskSet); + jsonData.put("finishedSequenceFlowSet", finishedSequenceFlowSet); + jsonData.put("unfinishedTaskSet", unfinishedTaskSet); + return ResponseResult.success(jsonData); + } + + /** + * 获取当前用户的已办理的审批任务列表。 + * + * @param processDefinitionName 流程名。 + * @param beginDate 流程发起开始时间。 + * @param endDate 流程发起结束时间。 + * @param pageParam 分页对象。 + * @return 查询结果应答。 + */ + @PostMapping("/listHistoricTask") + public ResponseResult>> listHistoricTask( + @MyRequestBody String processDefinitionName, + @MyRequestBody String beginDate, + @MyRequestBody String endDate, + @MyRequestBody(required = true) MyPageParam pageParam) throws ParseException { + MyPageData pageData = + flowApiService.getHistoricTaskInstanceFinishedList(processDefinitionName, beginDate, endDate, pageParam); + List> resultList = new LinkedList<>(); + pageData.getDataList().forEach(instance -> resultList.add(BeanUtil.beanToMap(instance))); + List taskInstanceList = pageData.getDataList(); + if (CollUtil.isNotEmpty(taskInstanceList)) { + Set instanceIdSet = taskInstanceList.stream() + .map(HistoricTaskInstance::getProcessInstanceId).collect(Collectors.toSet()); + List instanceList = flowApiService.getHistoricProcessInstanceList(instanceIdSet); + Map instanceMap = + instanceList.stream().collect(Collectors.toMap(HistoricProcessInstance::getId, c -> c)); + resultList.forEach(result -> { + HistoricProcessInstance instance = instanceMap.get(result.get("processInstanceId").toString()); + result.put("processDefinitionKey", instance.getProcessDefinitionKey()); + result.put("processDefinitionName", instance.getProcessDefinitionName()); + result.put("startUser", instance.getStartUserId()); + }); + } + return ResponseResult.success(MyPageUtil.makeResponseData(resultList, pageData.getTotalCount())); + } + + /** + * 根据输入参数查询,当前用户的历史流程数据。 + * + * @param processDefinitionName 流程名。 + * @param beginDate 流程发起开始时间。 + * @param endDate 流程发起结束时间。 + * @param pageParam 分页对象。 + * @return 查询结果应答。 + */ + @PostMapping("/listHistoricProcessInstance") + public ResponseResult>> listHistoricProcessInstance( + @MyRequestBody String processDefinitionName, + @MyRequestBody String beginDate, + @MyRequestBody String endDate, + @MyRequestBody(required = true) MyPageParam pageParam) throws ParseException { + String loginName = TokenData.takeFromRequest().getLoginName(); + MyPageData pageData = flowApiService.getHistoricProcessInstanceList( + null, processDefinitionName, loginName, beginDate, endDate, pageParam, true); + List> resultList = new LinkedList<>(); + pageData.getDataList().forEach(instance -> resultList.add(BeanUtil.beanToMap(instance))); + return ResponseResult.success(MyPageUtil.makeResponseData(resultList, pageData.getTotalCount())); + } + + /** + * 根据输入参数查询,所有历史流程数据。 + * + * @param processDefinitionName 流程名。 + * @param startUser 流程发起用户。 + * @param beginDate 流程发起开始时间。 + * @param endDate 流程发起结束时间。 + * @param pageParam 分页对象。 + * @return 查询结果。 + */ + @PostMapping("/listAllHistoricProcessInstance") + public ResponseResult>> listAllHistoricProcessInstance( + @MyRequestBody String processDefinitionName, + @MyRequestBody String startUser, + @MyRequestBody String beginDate, + @MyRequestBody String endDate, + @MyRequestBody(required = true) MyPageParam pageParam) throws ParseException { + MyPageData pageData = flowApiService.getHistoricProcessInstanceList( + null, processDefinitionName, startUser, beginDate, endDate, pageParam, false); + List> resultList = new LinkedList<>(); + pageData.getDataList().forEach(instance -> resultList.add(BeanUtil.beanToMap(instance))); + return ResponseResult.success(MyPageUtil.makeResponseData(resultList, pageData.getTotalCount())); + } + + /** + * 取消工作流工单,仅当没有进入任何审批流程之前,才可以取消工单。 + * + * @param workOrderId 工单Id。 + * @param cancelReason 取消原因。 + * @return 应答结果。 + */ + @PostMapping("/cancelWorkOrder") + public ResponseResult cancelWorkOrder( + @MyRequestBody(required = true) Long workOrderId, + @MyRequestBody(required = true) String cancelReason) { + FlowWorkOrder flowWorkOrder = flowWorkOrderService.getById(workOrderId); + if (flowWorkOrder == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + String errorMessage; + if (!flowWorkOrder.getFlowStatus().equals(FlowTaskStatus.SUBMITTED)) { + errorMessage = "数据验证失败,当前流程已经进入审批状态,不能撤销工单!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!flowWorkOrder.getCreateUserId().equals(TokenData.takeFromRequest().getUserId())) { + errorMessage = "数据验证失败,当前用户不是工单所有者,不能撤销工单!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + CallResult result = flowApiService.stopProcessInstance( + flowWorkOrder.getProcessInstanceId(), cancelReason, true); + if (!result.isSuccess()) { + return ResponseResult.errorFrom(result); + } + return ResponseResult.success(); + } + + /** + * 终止流程实例,将任务从当前节点直接流转到主流程的结束事件。 + * + * @param processInstanceId 流程实例Id。 + * @param stopReason 停止原因。 + * @return 执行结果应答。 + */ + @PostMapping("/stopProcessInstance") + public ResponseResult stopProcessInstance( + @MyRequestBody(required = true) String processInstanceId, + @MyRequestBody(required = true) String stopReason) { + CallResult result = flowApiService.stopProcessInstance(processInstanceId, stopReason, false); + if (!result.isSuccess()) { + return ResponseResult.errorFrom(result); + } + return ResponseResult.success(); + } + + /** + * 删除流程实例。 + * + * @param processInstanceId 流程实例Id。 + * @return 执行结果应答。 + */ + @PostMapping("/deleteProcessInstance") + public ResponseResult deleteProcessInstance(@MyRequestBody(required = true) String processInstanceId) { + flowApiService.deleteProcessInstance(processInstanceId); + return ResponseResult.success(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowCategoryMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowCategoryMapper.java new file mode 100644 index 00000000..dc25d705 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowCategoryMapper.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.flow.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.flow.model.FlowCategory; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * FlowCategory数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowCategoryMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param flowCategoryFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getFlowCategoryList( + @Param("flowCategoryFilter") FlowCategory flowCategoryFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryMapper.java new file mode 100644 index 00000000..6e6ca9f3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryMapper.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.flow.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.flow.model.FlowEntry; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * FlowEntry数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowEntryMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param flowEntryFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getFlowEntryList( + @Param("flowEntryFilter") FlowEntry flowEntryFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryPublishMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryPublishMapper.java new file mode 100644 index 00000000..eacd4652 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryPublishMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.flow.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.flow.model.FlowEntryPublish; + +/** + * 数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowEntryPublishMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryPublishVariableMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryPublishVariableMapper.java new file mode 100644 index 00000000..5d714b81 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryPublishVariableMapper.java @@ -0,0 +1,22 @@ +package com.flow.demo.common.flow.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.flow.model.FlowEntryPublishVariable; + +import java.util.List; + +/** + * 数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowEntryPublishVariableMapper extends BaseDaoMapper { + + /** + * 批量插入流程发布的变量列表。 + * + * @param entryPublishVariableList 流程发布的变量列表。 + */ + void insertList(List entryPublishVariableList); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryVariableMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryVariableMapper.java new file mode 100644 index 00000000..2ca74e77 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowEntryVariableMapper.java @@ -0,0 +1,27 @@ +package com.flow.demo.common.flow.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.flow.model.FlowEntryVariable; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 流程变量数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowEntryVariableMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param flowEntryVariableFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getFlowEntryVariableList( + @Param("flowEntryVariableFilter") FlowEntryVariable flowEntryVariableFilter, + @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowTaskCommentMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowTaskCommentMapper.java new file mode 100644 index 00000000..b8e6bfd5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowTaskCommentMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.flow.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.flow.model.FlowTaskComment; + +/** + * 流程任务批注数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowTaskCommentMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowTaskExtMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowTaskExtMapper.java new file mode 100644 index 00000000..78daae81 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowTaskExtMapper.java @@ -0,0 +1,22 @@ +package com.flow.demo.common.flow.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.flow.model.FlowTaskExt; + +import java.util.List; + +/** + * 流程任务扩展数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowTaskExtMapper extends BaseDaoMapper { + + /** + * 批量插入流程任务扩展信息列表。 + * + * @param flowTaskExtList 流程任务扩展信息列表。 + */ + void insertList(List flowTaskExtList); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowWorkOrderMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowWorkOrderMapper.java new file mode 100644 index 00000000..e91b256b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/FlowWorkOrderMapper.java @@ -0,0 +1,28 @@ +package com.flow.demo.common.flow.dao; + +import com.flow.demo.common.core.annotation.EnableDataPerm; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.flow.model.FlowWorkOrder; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 工作流工单表数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EnableDataPerm +public interface FlowWorkOrderMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param flowWorkOrderFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getFlowWorkOrderList( + @Param("flowWorkOrderFilter") FlowWorkOrder flowWorkOrderFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowCategoryMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowCategoryMapper.xml new file mode 100644 index 00000000..dae5f2d0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowCategoryMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryMapper.xml new file mode 100644 index 00000000..99974c37 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryMapper.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_flow_entry.process_definition_name = #{flowEntryFilter.processDefinitionName} + + + AND zz_flow_entry.process_definition_key = #{flowEntryFilter.processDefinitionKey} + + + AND zz_flow_entry.category_id = #{flowEntryFilter.categoryId} + + + AND zz_flow_entry.status = #{flowEntryFilter.status} + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryPublishMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryPublishMapper.xml new file mode 100644 index 00000000..c90eba57 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryPublishMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryPublishVariableMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryPublishVariableMapper.xml new file mode 100644 index 00000000..7b864175 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryPublishVariableMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + INSERT INTO zz_flow_entry_publish_variable VALUES + + (#{item.variableId}, + #{item.entryPublishId}, + #{item.variableName}, + #{item.showName}, + #{item.variableType}, + #{item.bindDatasourceId}, + #{item.bindRelationId}, + #{item.bindColumnId}, + #{item.builtin}) + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryVariableMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryVariableMapper.xml new file mode 100644 index 00000000..a9910c5c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowEntryVariableMapper.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_flow_entry_variable.entry_id = #{flowEntryVariableFilter.entryId} + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowTaskCommentMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowTaskCommentMapper.xml new file mode 100644 index 00000000..61cfb2b9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowTaskCommentMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowTaskExtMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowTaskExtMapper.xml new file mode 100644 index 00000000..e2599500 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowTaskExtMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + INSERT INTO zz_flow_task_ext VALUES + + (#{item.processDefinitionId}, + #{item.taskId}, + #{item.operationListJson}, + #{item.variableListJson}, + #{item.assigneeListJson}, + #{item.groupType}) + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowWorkOrderMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowWorkOrderMapper.xml new file mode 100644 index 00000000..0b6f367a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dao/mapper/FlowWorkOrderMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_flow_work_order.deleted_flag = ${@com.flow.demo.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + AND zz_flow_work_order.process_definition_key = #{flowWorkOrderFilter.processDefinitionKey} + + + AND zz_flow_work_order.flow_status = #{flowWorkOrderFilter.flowStatus} + + + AND zz_flow_work_order.create_time >= #{flowWorkOrderFilter.createTimeStart} + + + AND zz_flow_work_order.create_time <= #{flowWorkOrderFilter.createTimeEnd} + + + AND zz_flow_work_order.create_user_id = #{flowWorkOrderFilter.createUserId} + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowCategoryDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowCategoryDto.java new file mode 100644 index 00000000..3a2dfca7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowCategoryDto.java @@ -0,0 +1,41 @@ +package com.flow.demo.common.flow.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 流程分类的Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowCategoryDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long categoryId; + + /** + * 显示名称。 + */ + @NotBlank(message = "数据验证失败,显示名称不能为空!") + private String name; + + /** + * 分类编码。 + */ + @NotBlank(message = "数据验证失败,分类编码不能为空!") + private String code; + + /** + * 实现顺序。 + */ + @NotNull(message = "数据验证失败,实现顺序不能为空!") + private Integer showOrder; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowEntryDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowEntryDto.java new file mode 100644 index 00000000..733be510 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowEntryDto.java @@ -0,0 +1,77 @@ +package com.flow.demo.common.flow.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.flow.model.constant.FlowBindFormType; +import com.flow.demo.common.flow.model.constant.FlowEntryStatus; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 流程的Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowEntryDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键不能为空!", groups = {UpdateGroup.class}) + private Long entryId; + + /** + * 流程名称。 + */ + @NotBlank(message = "数据验证失败,流程名称不能为空!") + private String processDefinitionName; + + /** + * 流程标识Key。 + */ + @NotBlank(message = "数据验证失败,流程标识Key不能为空!") + private String processDefinitionKey; + + /** + * 流程分类。 + */ + @NotNull(message = "数据验证失败,流程分类不能为空!") + private Long categoryId; + + /** + * 流程状态。 + */ + @ConstDictRef(constDictClass = FlowEntryStatus.class, message = "数据验证失败,工作流状态为无效值!") + private Integer status; + + /** + * 流程定义的xml。 + */ + private String bpmnXml; + + /** + * 绑定表单类型。 + */ + @ConstDictRef(constDictClass = FlowBindFormType.class, message = "数据验证失败,工作流绑定表单类型为无效值!") + @NotNull(message = "数据验证失败,工作流绑定表单类型不能为空!") + private Integer bindFormType; + + /** + * 在线表单的页面Id。 + */ + private Long pageId; + + /** + * 在线表单Id。 + */ + private Long defaultFormId; + + /** + * 在线表单的缺省路由名称。 + */ + private String defaultRouterName; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowEntryVariableDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowEntryVariableDto.java new file mode 100644 index 00000000..8913c1ed --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowEntryVariableDto.java @@ -0,0 +1,70 @@ +package com.flow.demo.common.flow.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.flow.model.constant.FlowVariableType; +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * 流程变量Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowEntryVariableDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long variableId; + + /** + * 流程Id。 + */ + @NotNull(message = "数据验证失败,流程Id不能为空!") + private Long entryId; + + /** + * 变量名。 + */ + @NotBlank(message = "数据验证失败,变量名不能为空!") + private String variableName; + + /** + * 显示名。 + */ + @NotBlank(message = "数据验证失败,显示名不能为空!") + private String showName; + + /** + * 流程变量类型。 + */ + @ConstDictRef(constDictClass = FlowVariableType.class, message = "数据验证失败,流程变量类型为无效值!") + @NotNull(message = "数据验证失败,流程变量类型不能为空!") + private Integer variableType; + + /** + * 绑定数据源Id。 + */ + private Long bindDatasourceId; + + /** + * 绑定数据源关联Id。 + */ + private Long bindRelationId; + + /** + * 绑定字段Id。 + */ + private Long bindColumnId; + + /** + * 是否内置。 + */ + @NotNull(message = "数据验证失败,是否内置不能为空!") + private Boolean builtin; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowTaskCommentDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowTaskCommentDto.java new file mode 100644 index 00000000..dcca41b7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowTaskCommentDto.java @@ -0,0 +1,33 @@ +package com.flow.demo.common.flow.dto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 流程任务的批注。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowTaskCommentDto { + + /** + * 流程任务触发按钮类型,内置值可参考FlowTaskButton。 + */ + @NotNull(message = "数据验证失败,任务的审批类型不能为空!") + private String approvalType; + + /** + * 流程任务的批注内容。 + */ + @NotBlank(message = "数据验证失败,任务审批内容不能为空!") + private String comment; + + /** + * 委托指定人,比如加签、转办等。 + */ + private String delegateAssginee; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowWorkOrderDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowWorkOrderDto.java new file mode 100644 index 00000000..ee9ecffa --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/dto/FlowWorkOrderDto.java @@ -0,0 +1,28 @@ +package com.flow.demo.common.flow.dto; + +import lombok.Data; + +/** + * 工作流工单Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowWorkOrderDto { + + /** + * 流程状态。 + */ + private Integer flowStatus; + + /** + * createTime 范围过滤起始值(>=)。 + */ + private String createTimeStart; + + /** + * createTime 范围过滤结束值(<=)。 + */ + private String createTimeEnd; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/exception/FlowOperationException.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/exception/FlowOperationException.java new file mode 100644 index 00000000..d615c2a9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/exception/FlowOperationException.java @@ -0,0 +1,35 @@ +package com.flow.demo.common.flow.exception; + +/** + * 流程操作异常。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class FlowOperationException extends RuntimeException { + + /** + * 构造函数。 + */ + public FlowOperationException() { + + } + + /** + * 构造函数。 + * + * @param throwable 引发异常对象。 + */ + public FlowOperationException(Throwable throwable) { + super(throwable); + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public FlowOperationException(String msg) { + super(msg); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/listener/DeptPostLeaderListener.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/listener/DeptPostLeaderListener.java new file mode 100644 index 00000000..cd517eb4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/listener/DeptPostLeaderListener.java @@ -0,0 +1,34 @@ +package com.flow.demo.common.flow.listener; + +import com.flow.demo.common.core.util.ApplicationContextHolder; +import com.flow.demo.common.flow.constant.FlowConstant; +import com.flow.demo.common.flow.service.FlowApiService; +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.task.service.delegate.DelegateTask; + +import java.util.Map; + +/** + * 当用户任务的候选组为本部门领导岗位时,该监听器会在任务创建时,获取当前流程实例发起人的部门领导。 + * 并将其指派为当前任务的候选组。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class DeptPostLeaderListener implements TaskListener { + + private final FlowApiService flowApiService = ApplicationContextHolder.getBean(FlowApiService.class); + + @Override + public void notify(DelegateTask delegateTask) { + HistoricProcessInstance instance = + flowApiService.getHistoricProcessInstance(delegateTask.getProcessInstanceId()); + Map variables = delegateTask.getVariables(); + if (variables.get(FlowConstant.GROUP_TYPE_DEPT_POST_LEADER_VAR) == null) { + delegateTask.setAssignee(variables.get(FlowConstant.PROC_INSTANCE_START_USER_NAME_VAR).toString()); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/listener/UpDeptPostLeaderListener.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/listener/UpDeptPostLeaderListener.java new file mode 100644 index 00000000..4be3035e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/listener/UpDeptPostLeaderListener.java @@ -0,0 +1,34 @@ +package com.flow.demo.common.flow.listener; + +import com.flow.demo.common.core.util.ApplicationContextHolder; +import com.flow.demo.common.flow.constant.FlowConstant; +import com.flow.demo.common.flow.service.FlowApiService; +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.task.service.delegate.DelegateTask; + +import java.util.Map; + +/** + * 当用户任务的候选组为上级部门领导岗位时,该监听器会在任务创建时,获取当前流程实例发起人的部门领导。 + * 并将其指派为当前任务的候选组。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class UpDeptPostLeaderListener implements TaskListener { + + private final FlowApiService flowApiService = ApplicationContextHolder.getBean(FlowApiService.class); + + @Override + public void notify(DelegateTask delegateTask) { + HistoricProcessInstance instance = + flowApiService.getHistoricProcessInstance(delegateTask.getProcessInstanceId()); + Map variables = delegateTask.getVariables(); + if (variables.get(FlowConstant.GROUP_TYPE_UP_DEPT_POST_LEADER_VAR) == null) { + delegateTask.setAssignee(variables.get(FlowConstant.PROC_INSTANCE_START_USER_NAME_VAR).toString()); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/listener/UpdateFlowStatusListener.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/listener/UpdateFlowStatusListener.java new file mode 100644 index 00000000..871248c4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/listener/UpdateFlowStatusListener.java @@ -0,0 +1,31 @@ +package com.flow.demo.common.flow.listener; + +import cn.hutool.core.util.StrUtil; +import com.flow.demo.common.core.util.ApplicationContextHolder; +import com.flow.demo.common.flow.service.FlowWorkOrderService; +import com.flow.demo.common.flow.constant.FlowTaskStatus; +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.ExecutionListener; + +/** + * 流程实例监听器,在流程实例结束的时候更新流程工单表的审批状态字段。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class UpdateFlowStatusListener implements ExecutionListener { + + private final FlowWorkOrderService flowWorkOrderService = + ApplicationContextHolder.getBean(FlowWorkOrderService.class); + + @Override + public void notify(DelegateExecution execution) { + if (!StrUtil.equals("end", execution.getEventName())) { + return; + } + String processInstanceId = execution.getProcessInstanceId(); + flowWorkOrderService.updateFlowStatusByProcessInstanceId(processInstanceId, FlowTaskStatus.FINISHED); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowCategory.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowCategory.java new file mode 100644 index 00000000..f5114eca --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowCategory.java @@ -0,0 +1,74 @@ +package com.flow.demo.common.flow.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.flow.vo.FlowCategoryVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.Date; + +/** + * 流程分类的实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_flow_category") +public class FlowCategory { + + /** + * 主键Id。 + */ + @TableId(value = "category_id") + private Long categoryId; + + /** + * 显示名称。 + */ + @TableField(value = "name") + private String name; + + /** + * 分类编码。 + */ + @TableField(value = "code") + private String code; + + /** + * 实现顺序。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + @Mapper + public interface FlowCategoryModelMapper extends BaseModelMapper { + } + public static final FlowCategoryModelMapper INSTANCE = Mappers.getMapper(FlowCategoryModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntry.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntry.java new file mode 100644 index 00000000..342747a4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntry.java @@ -0,0 +1,155 @@ +package com.flow.demo.common.flow.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationOneToOne; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.flow.vo.FlowEntryVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.Date; + +/** + * 流程的实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_flow_entry") +public class FlowEntry { + + /** + * 主键。 + */ + @TableId(value = "entry_id") + private Long entryId; + + /** + * 流程名称。 + */ + @TableField(value = "process_definition_name") + private String processDefinitionName; + + /** + * 流程标识Key。 + */ + @TableField(value = "process_definition_key") + private String processDefinitionKey; + + /** + * 流程分类。 + */ + @TableField(value = "category_id") + private Long categoryId; + + /** + * 工作流部署的发布主版本Id。 + */ + @TableField(value = "main_entry_publish_id") + private Long mainEntryPublishId; + + /** + * 最新发布时间。 + */ + @TableField(value = "lastest_publish_time") + private Date lastestPublishTime; + + /** + * 流程状态。 + */ + @TableField(value = "status") + private Integer status; + + /** + * 流程定义的xml。 + */ + @TableField(value = "bpmn_xml") + private String bpmnXml; + + /** + * 绑定表单类型。 + */ + @TableField(value = "bind_form_type") + private Integer bindFormType; + + /** + * 在线表单的页面Id。 + */ + @TableField(value = "page_id") + private Long pageId; + + /** + * 在线表单Id。 + */ + @TableField(value = "default_form_id") + private Long defaultFormId; + + /** + * 静态表单的缺省路由名称。 + */ + @TableField(value = "default_router_name") + private String defaultRouterName; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + @TableField(exist = false) + private FlowEntryPublish mainFlowEntryPublish; + + @RelationOneToOne( + masterIdField = "categoryId", + slaveServiceName = "flowCategoryService", + slaveModelClass = FlowCategory.class, + slaveIdField = "categoryId") + @TableField(exist = false) + private FlowCategory flowCategory; + + @Mapper + public interface FlowEntryModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param flowEntryVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "mainFlowEntryPublish", expression = "java(mapToBean(flowEntryVo.getMainFlowEntryPublish(), com.flow.demo.common.flow.model.FlowEntryPublish.class))") + @Mapping(target = "flowCategory", expression = "java(mapToBean(flowEntryVo.getFlowCategory(), com.flow.demo.common.flow.model.FlowCategory.class))") + @Override + FlowEntry toModel(FlowEntryVo flowEntryVo); + /** + * 转换实体对象到VO对象。 + * + * @param flowEntry 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "mainFlowEntryPublish", expression = "java(beanToMap(flowEntry.getMainFlowEntryPublish(), false))") + @Mapping(target = "flowCategory", expression = "java(beanToMap(flowEntry.getFlowCategory(), false))") + @Override + FlowEntryVo fromModel(FlowEntry flowEntry); + } + public static final FlowEntryModelMapper INSTANCE = Mappers.getMapper(FlowEntryModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntryPublish.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntryPublish.java new file mode 100644 index 00000000..41d621e0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntryPublish.java @@ -0,0 +1,77 @@ +package com.flow.demo.common.flow.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * 流程发布数据的实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_flow_entry_publish") +public class FlowEntryPublish { + + /** + * 主键Id。 + */ + @TableId(value = "entry_publish_id") + private Long entryPublishId; + + /** + * 流程Id。 + */ + @TableField(value = "entry_id") + private Long entryId; + + /** + * 流程引擎的部署Id。 + */ + @TableField(value = "deploy_id") + private String deployId; + + /** + * 流程引擎中的流程定义Id。 + */ + @TableField(value = "process_definition_id") + private String processDefinitionId; + + /** + * 发布版本。 + */ + @TableField(value = "publish_version") + private Integer publishVersion; + + /** + * 激活状态。 + */ + @TableField(value = "active_status") + private Boolean activeStatus; + + /** + * 是否为主版本。 + */ + @TableField(value = "main_version") + private Boolean mainVersion; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 发布时间。 + */ + @TableField(value = "publish_time") + private Date publishTime; + + /** + * 第一个非开始节点任务的附加信息。 + */ + @TableField(value = "init_task_info") + private String initTaskInfo; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntryPublishVariable.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntryPublishVariable.java new file mode 100644 index 00000000..5b7ef76b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntryPublishVariable.java @@ -0,0 +1,69 @@ +package com.flow.demo.common.flow.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * FlowEntryPublishVariable实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_flow_entry_publish_variable") +public class FlowEntryPublishVariable { + + /** + * 主键Id。 + */ + @TableId(value = "variable_id") + private Long variableId; + + /** + * 流程Id。 + */ + @TableField(value = "entry_publish_id") + private Long entryPublishId; + + /** + * 变量名。 + */ + @TableField(value = "variable_name") + private String variableName; + + /** + * 显示名。 + */ + @TableField(value = "show_name") + private String showName; + + /** + * 变量类型。 + */ + @TableField(value = "variable_type") + private Integer variableType; + + /** + * 绑定数据源Id。 + */ + @TableField(value = "bind_datasource_id") + private Long bindDatasourceId; + + /** + * 绑定数据源关联Id。 + */ + @TableField(value = "bind_relation_id") + private Long bindRelationId; + + /** + * 绑定字段Id。 + */ + @TableField(value = "bind_column_id") + private Long bindColumnId; + + /** + * 是否内置。 + */ + @TableField(value = "builtin") + private Boolean builtin; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntryVariable.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntryVariable.java new file mode 100644 index 00000000..5c43391f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowEntryVariable.java @@ -0,0 +1,86 @@ +package com.flow.demo.common.flow.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.flow.vo.FlowEntryVariableVo; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; + +/** + * 流程变量实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_flow_entry_variable") +public class FlowEntryVariable { + + /** + * 主键Id。 + */ + @TableId(value = "variable_id") + private Long variableId; + + /** + * 流程Id。 + */ + @TableField(value = "entry_id") + private Long entryId; + + /** + * 变量名。 + */ + @TableField(value = "variable_name") + private String variableName; + + /** + * 显示名。 + */ + @TableField(value = "show_name") + private String showName; + + /** + * 流程变量类型。 + */ + @TableField(value = "variable_type") + private Integer variableType; + + /** + * 绑定数据源Id。 + */ + @TableField(value = "bind_datasource_id") + private Long bindDatasourceId; + + /** + * 绑定数据源关联Id。 + */ + @TableField(value = "bind_relation_id") + private Long bindRelationId; + + /** + * 绑定字段Id。 + */ + @TableField(value = "bind_column_id") + private Long bindColumnId; + + /** + * 是否内置。 + */ + @TableField(value = "builtin") + private Boolean builtin; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + @Mapper + public interface FlowEntryVariableModelMapper extends BaseModelMapper { + } + public static final FlowEntryVariableModelMapper INSTANCE = Mappers.getMapper(FlowEntryVariableModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowTaskComment.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowTaskComment.java new file mode 100644 index 00000000..0ddcff3e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowTaskComment.java @@ -0,0 +1,106 @@ +package com.flow.demo.common.flow.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.flow.vo.FlowTaskCommentVo; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.flowable.task.api.TaskInfo; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; + +/** + * FlowTaskComment实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@NoArgsConstructor +@TableName(value = "zz_flow_task_comment") +public class FlowTaskComment { + + /** + * 主键Id。 + */ + @TableId(value = "id") + private Long id; + + /** + * 流程实例Id。 + */ + @TableField(value = "process_instance_id") + private String processInstanceId; + + /** + * 任务Id。 + */ + @TableField(value = "task_id") + private String taskId; + + /** + * 任务标识。 + */ + @TableField(value = "task_key") + private String taskKey; + + /** + * 任务名称。 + */ + @TableField(value = "task_name") + private String taskName; + + /** + * 审批类型。 + */ + @TableField(value = "approval_type") + private String approvalType; + + /** + * 批注内容。 + */ + @TableField(value = "comment") + private String comment; + + /** + * 委托指定人,比如加签、转办等。 + */ + @TableField(value = "delegate_assignee") + private String delegateAssginee; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建者显示名。 + */ + @TableField(value = "create_username") + private String createUsername; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + public FlowTaskComment(TaskInfo task) { + this.fillWith(task); + } + + public void fillWith(TaskInfo task) { + this.taskId = task.getId(); + this.taskKey = task.getTaskDefinitionKey(); + this.taskName = task.getName(); + this.processInstanceId = task.getProcessInstanceId(); + } + + @Mapper + public interface FlowTaskCommentModelMapper extends BaseModelMapper { + } + public static final FlowTaskCommentModelMapper INSTANCE = Mappers.getMapper(FlowTaskCommentModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowTaskExt.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowTaskExt.java new file mode 100644 index 00000000..5b7791b6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowTaskExt.java @@ -0,0 +1,51 @@ +package com.flow.demo.common.flow.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 流程任务扩展实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_flow_task_ext") +public class FlowTaskExt { + + /** + * 流程引擎的定义Id。 + */ + @TableField(value = "process_definition_id") + private String processDefinitionId; + + /** + * 流程引擎任务Id。 + */ + @TableField(value = "task_id") + private String taskId; + + /** + * 操作列表JSON。 + */ + @TableField(value = "operation_list_json") + private String operationListJson; + + /** + * 变量列表JSON。 + */ + @TableField(value = "variable_list_json") + private String variableListJson; + + /** + * 存储多实例的assigneeList的JSON。 + */ + @TableField(value = "assignee_list_json") + private String assigneeListJson; + + /** + * 分组类型。 + */ + @TableField(value = "group_type") + private String groupType; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowWorkOrder.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowWorkOrder.java new file mode 100644 index 00000000..27114899 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/FlowWorkOrder.java @@ -0,0 +1,140 @@ +package com.flow.demo.common.flow.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.DeptFilterColumn; +import com.flow.demo.common.core.annotation.RelationConstDict; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.flow.constant.FlowTaskStatus; +import com.flow.demo.common.flow.vo.FlowWorkOrderVo; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * 工作流工单实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_flow_work_order") +public class FlowWorkOrder { + + /** + * 主键Id。 + */ + @TableId(value = "work_order_id") + private Long workOrderId; + + /** + * 流程定义标识。 + */ + @TableField(value = "process_definition_key") + private String processDefinitionKey; + + /** + * 流程名称。 + */ + @TableField(value = "process_definition_name") + private String processDefinitionName; + + /** + * 流程引擎的定义Id。 + */ + @TableField(value = "process_definition_id") + private String processDefinitionId; + + /** + * 流程实例Id。 + */ + @TableField(value = "process_instance_id") + private String processInstanceId; + + /** + * 在线表单的主表Id。 + */ + @TableField(value = "online_table_id") + private Long onlineTableId; + + /** + * 业务主键值。 + */ + @TableField(value = "business_key") + private String businessKey; + + /** + * 流程状态。 + */ + @TableField(value = "flow_status") + private Integer flowStatus; + + /** + * 提交用户登录名称。 + */ + @TableField(value = "submit_username") + private String submitUsername; + + /** + * 提交用户所在部门Id。 + */ + @DeptFilterColumn + @TableField(value = "dept_id") + private Long deptId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** + * createTime 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String createTimeStart; + + /** + * createTime 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String createTimeEnd; + + @RelationConstDict( + masterIdField = "flowStatus", + constantDictClass = FlowTaskStatus.class) + @TableField(exist = false) + private Map flowStatusDictMap; + + @Mapper + public interface FlowWorkOrderModelMapper extends BaseModelMapper { + } + public static final FlowWorkOrderModelMapper INSTANCE = Mappers.getMapper(FlowWorkOrderModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/constant/FlowBindFormType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/constant/FlowBindFormType.java new file mode 100644 index 00000000..b9f13da9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/constant/FlowBindFormType.java @@ -0,0 +1,44 @@ +package com.flow.demo.common.flow.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 工作流绑定表单类型。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FlowBindFormType { + + /** + * 在线表单。 + */ + public static final int ONLINE_FORM = 0; + /** + * 路由表单。 + */ + public static final int ROUTER_FORM = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(ONLINE_FORM, "在线表单"); + DICT_MAP.put(ROUTER_FORM, "路由表单"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FlowBindFormType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/constant/FlowEntryStatus.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/constant/FlowEntryStatus.java new file mode 100644 index 00000000..b33e4858 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/constant/FlowEntryStatus.java @@ -0,0 +1,44 @@ +package com.flow.demo.common.flow.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 工作流状态。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FlowEntryStatus { + + /** + * 未发布。 + */ + public static final int UNPUBLISHED = 0; + /** + * 已发布。 + */ + public static final int PUBLISHED = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(UNPUBLISHED, "未发布"); + DICT_MAP.put(PUBLISHED, "已发布"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FlowEntryStatus() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/constant/FlowVariableType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/constant/FlowVariableType.java new file mode 100644 index 00000000..d54fa2f9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/model/constant/FlowVariableType.java @@ -0,0 +1,44 @@ +package com.flow.demo.common.flow.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 流程变量类型。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FlowVariableType { + + /** + * 流程实例变量。 + */ + public static final int INSTANCE = 0; + /** + * 任务变量。 + */ + public static final int TASK = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(INSTANCE, "流程实例变量"); + DICT_MAP.put(TASK, "任务变量"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FlowVariableType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/object/FlowTaskExtMultiInstance.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/object/FlowTaskExtMultiInstance.java new file mode 100644 index 00000000..0566206c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/object/FlowTaskExtMultiInstance.java @@ -0,0 +1,29 @@ +package com.flow.demo.common.flow.object; + +import lombok.Data; + +import java.util.List; + + +/** + * 流程任务扩展属性中,表示多实例任务的扩展对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowTaskExtMultiInstance { + + public static final String ASSIGNEE_TYPE_ASSIGNEE = "assignee"; + public static final String ASSIGNEE_TYPE_GROUPID = "groupId"; + + /** + * 指派人类型。目前支持 assignee、groupId。 + */ + private String assigneeType; + + /** + * 指派人登录名列表。 + */ + private List assigneeList; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowApiService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowApiService.java new file mode 100644 index 00000000..c7312f0c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowApiService.java @@ -0,0 +1,354 @@ +package com.flow.demo.common.flow.service; + +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.object.MyPageData; +import com.flow.demo.common.core.object.MyPageParam; +import com.flow.demo.common.flow.model.FlowTaskComment; +import com.flow.demo.common.flow.vo.FlowTaskVo; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.UserTask; +import org.flowable.engine.delegate.ExecutionListener; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.flowable.task.api.TaskInfo; +import org.flowable.task.api.history.HistoricTaskInstance; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 流程引擎API的接口封装服务。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowApiService { + + /** + * 启动流程实例。 + * + * @param processDefinitionId 流程定义Id。 + */ + void start(String processDefinitionId); + + /** + * 启动流程实例,如果当前登录用户为第一个用户任务的指派者,或者Assginee为流程启动人变量时, + * 则自动完成第一个用户任务。 + * + * @param processDefinitionId 流程定义Id。 + * @param dataId 当前流程主表的主键数据。 + * @param flowTaskComment 审批对象。 + * @param taskVariableData 流程任务的变量数据。 + * @return 新启动的流程实例。 + */ + ProcessInstance startAndTakeFirst( + String processDefinitionId, Object dataId, FlowTaskComment flowTaskComment, JSONObject taskVariableData); + + /** + * 多实例加签。 + * + * @param startTaskInstance 会签对象的发起任务实例。 + * @param multiInstanceActiveTask 正在执行的多实例任务对象。 + * @param newAssignees 新指派人,多个指派人之间逗号分隔。 + */ + void submitConsign(HistoricTaskInstance startTaskInstance, Task multiInstanceActiveTask, String newAssignees); + + /** + * 完成任务,同时提交审批数据。 + * + * @param task 工作流任务对象。 + * @param flowTaskComment 审批对象。 + * @param taskVariableData 流程任务的变量数据。 + */ + void completeTask(Task task, FlowTaskComment flowTaskComment, JSONObject taskVariableData); + + /** + * 判断当前登录用户是否为流程实例中的用户任务的指派人。或是候选人之一,如果是候选人则拾取该任务并成为指派人。 + * 如果都不是,就会返回具体的错误信息。 + * + * @param task 流程实例中的用户任务。 + * @return 调用结果。 + */ + CallResult verifyAssigneeOrCandidateAndClaim(Task task); + + /** + * 初始化并返回流程实例的变量Map。 + * @param processDefinitionId 流程定义Id。 + * @return 初始化后的流程实例变量Map。 + */ + Map initAndGetProcessInstanceVariables(String processDefinitionId); + + /** + * 判断当前登录用户是否为流程实例中的用户任务的指派人。或是候选人之一。 + * + * @param task 流程实例中的用户任务。 + * @return 是返回true,否则false。 + */ + boolean isAssigneeOrCandidate(TaskInfo task); + + /** + * 判断当前登录用户是否为流程实例的发起人。 + * + * @param processInstanceId 流程实例Id。 + * @return 是返回true,否则false。 + */ + boolean isProcessInstanceStarter(String processInstanceId); + + /** + * 为流程实例设置BusinessKey。 + * + * @param processInstanceId 流程实例Id。 + * @param dataId 通常为主表的主键Id。 + */ + void setBusinessKeyForProcessInstance(String processInstanceId, Object dataId); + + /** + * 判断指定的流程实例Id是否存在。 + * + * @param processInstanceId 流程实例Id。 + * @return 存在返回true,否则false。 + */ + boolean existActiveProcessInstance(String processInstanceId); + + /** + * 获取指定的流程实例对象。 + * + * @param processInstanceId 流程实例Id。 + * @return 流程实例对象。 + */ + ProcessInstance getProcessInstance(String processInstanceId); + + /** + * 获取流程实例的列表。 + * + * @param processInstanceIdSet 流程实例Id集合。 + * @return 流程实例列表。 + */ + List getProcessInstanceList(Set processInstanceIdSet); + + /** + * 根据流程部署Id查询流程定义对象。 + * + * @param deployId 流程部署Id。 + * @return 流程定义对象。 + */ + ProcessDefinition getProcessDefinitionByDeployId(String deployId); + + /** + * 获取流程定义的列表。 + * + * @param processDefinitionIdSet 流程定义Id集合。 + * @return 流程定义列表。 + */ + List getProcessDefinitionList(Set processDefinitionIdSet); + + /** + * 挂起流程定义对象。 + * + * @param processDefinitionId 流程定义Id。 + */ + void suspendProcessDefinition(String processDefinitionId); + + /** + * 激活流程定义对象。 + * + * @param processDefinitionId 流程定义Id。 + */ + void activateProcessDefinition(String processDefinitionId); + + /** + * 获取指定流程定义的BpmnModel。 + * + * @param processDefinitionId 流程定义Id。 + * @return 关联的BpmnModel。 + */ + BpmnModel getBpmnModelByDefinitionId(String processDefinitionId); + + /** + * 获取流程实例的变量。 + * + * @param processInstanceId 流程实例Id。 + * @param variableName 变量名。 + * @return 变量值。 + */ + Object getProcessInstanceVariable(String processInstanceId, String variableName); + + /** + * 获取指定流程实例和任务Id的当前活动任务。 + * + * @param processInstanceId 流程实例Id。 + * @param taskId 流程任务Id。 + * @return 当前流程实例的活动任务。 + */ + Task getProcessInstanceActiveTask(String processInstanceId, String taskId); + + /** + * 获取指定流程实例的当前活动任务列表。 + * + * @param processInstanceId 流程实例Id。 + * @return 当前流程实例的活动任务。 + */ + List getProcessInstanceActiveTaskList(String processInstanceId); + + /** + * 获取用户的任务列表。这其中包括当前用户作为指派人和候选人。 + * + * @param username 指派人。 + * @param definitionKey 流程定义的标识。 + * @param pageParam 分页对象。 + * @return 用户的任务列表。 + */ + MyPageData getTaskListByUserName(String username, String definitionKey, MyPageParam pageParam); + + /** + * 获取用户的任务数量。这其中包括当前用户作为指派人和候选人。 + * + * @param username 指派人。 + * @return 用户的任务数量。 + */ + long getTaskCountByUserName(String username); + + /** + * 获取流程实例Id集合的运行时任务列表。 + * + * @param processInstanceIdSet 流程实例Id集合。 + * @return 运行时任务列表。 + */ + List getTaskListByProcessInstanceIds(List processInstanceIdSet); + + /** + * 将流程任务列表数据,转换为前端可以显示的流程对象。 + * + * @param taskList 流程引擎中的任务列表。 + * @return 前端可以显示的流程任务列表。 + */ + List convertToFlowTaskList(List taskList); + + /** + * 添加流程实例结束的监听器。 + * + * @param bpmnModel 流程模型。 + * @param listenerClazz 流程监听器的Class对象。 + */ + void addProcessInstanceEndListener(BpmnModel bpmnModel, Class listenerClazz); + + /** + * 添加流程任务创建的任务监听器。 + * + * @param userTask 用户任务。 + * @param listenerClazz 任务监听器。 + */ + void addTaskCreateListener(UserTask userTask, Class listenerClazz); + + /** + * 获取流程实例的历史流程实例。 + * + * @param processInstanceId 流程实例Id。 + * @return 历史流程实例。 + */ + HistoricProcessInstance getHistoricProcessInstance(String processInstanceId); + + /** + * 获取流程实例的历史流程实例列表。 + * + * @param processInstanceIdSet 流程实例Id集合。 + * @return 历史流程实例列表。 + */ + List getHistoricProcessInstanceList(Set processInstanceIdSet); + + /** + * 查询历史流程实例的列表。 + * + * @param processDefinitionKey 流程标识名。 + * @param processDefinitionName 流程名。 + * @param startUser 流程发起用户。 + * @param beginDate 流程发起开始时间。 + * @param endDate 流程发起结束时间。 + * @param pageParam 分页对象。 + * @param finishedOnly 仅仅返回已经结束的流程。 + * @return 分页后的查询列表对象。 + * @throws ParseException 日期参数解析失败。 + */ + MyPageData getHistoricProcessInstanceList( + String processDefinitionKey, + String processDefinitionName, + String startUser, + String beginDate, + String endDate, + MyPageParam pageParam, + boolean finishedOnly) throws ParseException; + + /** + * 获取流程实例的已完成历史任务列表。 + * + * @param processInstanceId 流程实例Id。 + * @return 流程实例已完成的历史任务列表。 + */ + List getHistoricActivityInstanceList(String processInstanceId); + + /** + * 获取当前用户的历史已办理任务列表。 + * + * @param processDefinitionName 流程名。 + * @param beginDate 流程发起开始时间。 + * @param endDate 流程发起结束时间。 + * @param pageParam 分页对象。 + * @return 分页后的查询列表对象。 + * @throws ParseException 日期参数解析失败。 + */ + MyPageData getHistoricTaskInstanceFinishedList( + String processDefinitionName, + String beginDate, + String endDate, + MyPageParam pageParam) throws ParseException; + + /** + * 获取指定的历史任务实例。 + * + * @param processInstanceId 流程实例Id。 + * @param taskId 任务Id。 + * @return 历史任务实例。 + */ + HistoricTaskInstance getHistoricTaskInstance(String processInstanceId, String taskId); + + /** + * 获取流程实例的待完成任务列表。 + * + * @param processInstanceId 流程实例Id。 + * @return 流程实例待完成的任务列表。 + */ + List getHistoricUnfinishedInstanceList(String processInstanceId); + + /** + * 终止流程实例,将任务从当前节点直接流转到主流程的结束事件。 + * + * @param processInstanceId 流程实例Id。 + * @param stopReason 停止原因。 + * @param forCancel 是否由取消工单触发。 + * @return 执行结果。 + */ + CallResult stopProcessInstance(String processInstanceId, String stopReason, boolean forCancel); + + /** + * 删除流程实例。 + * + * @param processInstanceId 流程实例Id。 + */ + void deleteProcessInstance(String processInstanceId); + + /** + * 获取任务的指定本地变量。 + * + * @param taskId 任务Id。 + * @param variableName 变量名。 + * @return 变量值。 + */ + Object getTaskVariable(String taskId, String variableName); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowCategoryService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowCategoryService.java new file mode 100644 index 00000000..c9e6e3bd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowCategoryService.java @@ -0,0 +1,61 @@ +package com.flow.demo.common.flow.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.flow.model.*; + +import java.util.List; + +/** + * FlowCategory数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowCategoryService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param flowCategory 新增对象。 + * @return 返回新增对象。 + */ + FlowCategory saveNew(FlowCategory flowCategory); + + /** + * 更新数据对象。 + * + * @param flowCategory 更新的对象。 + * @param originalFlowCategory 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(FlowCategory flowCategory, FlowCategory originalFlowCategory); + + /** + * 删除指定数据。 + * + * @param categoryId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long categoryId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getFlowCategoryListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getFlowCategoryList(FlowCategory filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getFlowCategoryList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getFlowCategoryListWithRelation(FlowCategory filter, String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowEntryService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowEntryService.java new file mode 100644 index 00000000..d5650880 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowEntryService.java @@ -0,0 +1,145 @@ +package com.flow.demo.common.flow.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.flow.model.*; + +import javax.xml.stream.XMLStreamException; +import java.util.List; +import java.util.Set; + +/** + * FlowEntry数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowEntryService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param flowEntry 新增工作流对象。 + * @return 返回新增对象。 + */ + FlowEntry saveNew(FlowEntry flowEntry); + + /** + * 发布指定流程。 + * + * @param flowEntry 待发布的流程对象。 + * @param initTaskInfo 第一个非开始节点任务的附加信息。 + * @param flowTaskExtList 所有用户任务的自定义扩展数据列表。 + * @throws XMLStreamException 解析bpmn.xml的异常。 + */ + void publish(FlowEntry flowEntry, String initTaskInfo, List flowTaskExtList) throws XMLStreamException; + + /** + * 更新数据对象。 + * + * @param flowEntry 更新的对象。 + * @param originalFlowEntry 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(FlowEntry flowEntry, FlowEntry originalFlowEntry); + + /** + * 删除指定数据。 + * + * @param entryId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long entryId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getFlowEntryListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getFlowEntryList(FlowEntry filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getFlowEntryList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getFlowEntryListWithRelation(FlowEntry filter, String orderBy); + + /** + * 根据流程定义标识获取流程对象。 + * + * @param processDefinitionKey 流程定义标识。 + * @return 流程对象。 + */ + FlowEntry getFlowEntryByProcessDefinitionKey(String processDefinitionKey); + + /** + * 根据流程Id获取流程发布列表数据。 + * + * @param entryId 流程Id。 + * @return 流程关联的发布列表数据。 + */ + List getFlowEntryPublishList(Long entryId); + + /** + * 根据流程引擎中的流程定义Id集合,查询流程发布对象。 + * + * @param processDefinitionIdSet 流程引擎中的流程定义Id集合。 + * @return 查询结果。 + */ + List getFlowEntryPublishList(Set processDefinitionIdSet); + + /** + * 获取指定工作流发布版本对象。 + * + * @param entryPublishId 工作流发布对象Id。 + * @return 查询后的对象。 + */ + FlowEntryPublish getFlowEntryPublishById(Long entryPublishId); + + /** + * 获取指定流程定义Id对应的流程发布对象。 + * + * @param processDefinitionId 流程定义Id。 + * @return 流程发布对象。 + */ + FlowEntryPublish getFlowEntryPublishByDefinitionId(String processDefinitionId); + + /** + * 为指定工作流更新发布的主版本。 + * + * @param flowEntry 工作流对象。 + * @param newMainFlowEntryPublish 工作流新的发布主版本对象。 + */ + void updateFlowEntryMainVersion(FlowEntry flowEntry, FlowEntryPublish newMainFlowEntryPublish); + + /** + * 挂起指定的工作流发布对象。 + * + * @param flowEntryPublish 待挂起的工作流发布对象。 + */ + void suspendFlowEntryPublish(FlowEntryPublish flowEntryPublish); + + /** + * 激活指定的工作流发布对象。 + * + * @param flowEntryPublish 待恢复的工作流发布对象。 + */ + void activateFlowEntryPublish(FlowEntryPublish flowEntryPublish); + + /** + * 主表的关联数据验证。 + * + * @param flowEntry 最新数据对象。 + * @param originalFlowEntry 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + CallResult verifyRelatedData(FlowEntry flowEntry, FlowEntry originalFlowEntry); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowEntryVariableService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowEntryVariableService.java new file mode 100644 index 00000000..27b778a4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowEntryVariableService.java @@ -0,0 +1,68 @@ +package com.flow.demo.common.flow.service; + +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 流程变量数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowEntryVariableService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param flowEntryVariable 新增对象。 + * @return 返回新增对象。 + */ + FlowEntryVariable saveNew(FlowEntryVariable flowEntryVariable); + + /** + * 更新数据对象。 + * + * @param flowEntryVariable 更新的对象。 + * @param originalFlowEntryVariable 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(FlowEntryVariable flowEntryVariable, FlowEntryVariable originalFlowEntryVariable); + + /** + * 删除指定数据。 + * + * @param variableId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long variableId); + + /** + * 删除指定流程Id的所有变量。 + * + * @param entryId 流程Id。 + */ + void removeByEntryId(Long entryId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getFlowEntryVariableListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getFlowEntryVariableList(FlowEntryVariable filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getFlowEntryVariableList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getFlowEntryVariableListWithRelation(FlowEntryVariable filter, String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowTaskCommentService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowTaskCommentService.java new file mode 100644 index 00000000..86ab12f9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowTaskCommentService.java @@ -0,0 +1,31 @@ +package com.flow.demo.common.flow.service; + +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 流程任务批注数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowTaskCommentService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param flowTaskComment 新增对象。 + * @return 返回新增对象。 + */ + FlowTaskComment saveNew(FlowTaskComment flowTaskComment); + + /** + * 查询指定流程实例Id下的所有审批任务的批注。 + * + * @param processInstanceId 流程实例Id。 + * @return 查询结果集。 + */ + List getFlowTaskCommentList(String processInstanceId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowTaskExtService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowTaskExtService.java new file mode 100644 index 00000000..b2f749de --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowTaskExtService.java @@ -0,0 +1,38 @@ +package com.flow.demo.common.flow.service; + +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.core.base.service.IBaseService; + +import java.util.List; + +/** + * 流程任务扩展数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowTaskExtService extends IBaseService { + + /** + * 批量插入流程任务扩展信息列表。 + * + * @param flowTaskExtList 流程任务扩展信息列表。 + */ + void saveBatch(List flowTaskExtList); + + /** + * 查询指定的流程任务扩展对象。 + * @param processDefinitionId 流程引擎的定义Id。 + * @param taskId 流程引擎的任务Id。 + * @return 查询结果。 + */ + FlowTaskExt getByProcessDefinitionIdAndTaskId(String processDefinitionId, String taskId); + + /** + * 查询指定的流程定义的任务扩展对象。 + * + * @param processDefinitionId 流程引擎的定义Id。 + * @return 查询结果。 + */ + List getByProcessDefinitionId(String processDefinitionId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowWorkOrderService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowWorkOrderService.java new file mode 100644 index 00000000..4a023270 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/FlowWorkOrderService.java @@ -0,0 +1,76 @@ +package com.flow.demo.common.flow.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.flow.model.FlowWorkOrder; +import org.flowable.engine.runtime.ProcessInstance; + +import java.util.*; + +/** + * 工作流工单表数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface FlowWorkOrderService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param instance 流程实例对象。 + * @param dataId 流程实例的BusinessKey。 + * @param onlineTableId 在线数据表的主键Id。 + * @return 新增的工作流工单对象。 + */ + FlowWorkOrder saveNew(ProcessInstance instance, Object dataId, Long onlineTableId); + + /** + * 删除指定数据。 + * + * @param workOrderId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long workOrderId); + + /** + * 删除指定流程实例Id的关联工单。 + * + * @param processInstanceId 流程实例Id。 + */ + void removeByProcessInstanceId(String processInstanceId); + + /** + * 获取工作流工单单表查询结果。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getFlowWorkOrderList(FlowWorkOrder filter, String orderBy); + + /** + * 获取工作流工单列表及其关联字典数据。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getFlowWorkOrderListWithRelation(FlowWorkOrder filter, String orderBy); + + /** + * 根据业务主键,查询是否存在指定的工单。 + * + * @param businessKey 业务数据主键Id。 + * @param unfinished 是否为没有结束工单。 + * @return 存在返回true,否则false。 + */ + boolean existByBusinessKey(Object businessKey, boolean unfinished); + + /** + * 根据流程实例Id,更新流程状态。 + * + * @param processInstanceId 流程实例Id。 + * @param flowStatus 新的流程状态值。 + */ + void updateFlowStatusByProcessInstanceId(String processInstanceId, int flowStatus); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowApiServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowApiServiceImpl.java new file mode 100644 index 00000000..3ea338db --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowApiServiceImpl.java @@ -0,0 +1,615 @@ +package com.flow.demo.common.flow.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.object.MyPageData; +import com.flow.demo.common.core.object.MyPageParam; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.flow.constant.FlowConstant; +import com.flow.demo.common.flow.constant.FlowApprovalType; +import com.flow.demo.common.flow.constant.FlowTaskStatus; +import com.flow.demo.common.flow.model.FlowEntryPublish; +import com.flow.demo.common.flow.model.FlowTaskComment; +import com.flow.demo.common.flow.model.FlowTaskExt; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.flow.util.BaseFlowDeptPostExtHelper; +import com.flow.demo.common.flow.util.FlowCustomExtFactory; +import com.flow.demo.common.flow.vo.FlowTaskVo; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.*; +import org.flowable.bpmn.model.Process; +import org.flowable.common.engine.impl.identity.Authentication; +import org.flowable.engine.*; +import org.flowable.engine.delegate.ExecutionListener; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.engine.history.*; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.flowable.task.api.TaskInfo; +import org.flowable.task.api.TaskQuery; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.flowable.task.api.history.HistoricTaskInstanceQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@Service("flowApiService") +public class FlowApiServiceImpl implements FlowApiService { + + @Autowired + private RepositoryService repositoryService; + @Autowired + private RuntimeService runtimeService; + @Autowired + private TaskService taskService; + @Autowired + private HistoryService historyService; + @Autowired + private FlowEntryService flowEntryService; + @Autowired + private FlowTaskCommentService flowTaskCommentService; + @Autowired + private FlowTaskExtService flowTaskExtService; + @Autowired + private FlowWorkOrderService flowWorkOrderService; + @Autowired + private FlowCustomExtFactory flowCustomExtFactory; + + @Transactional(rollbackFor = Exception.class) + @Override + public void start(String processDefinitionId) { + String loginName = TokenData.takeFromRequest().getLoginName(); + Map variableMap = new HashMap<>(4); + variableMap.put(FlowConstant.PROC_INSTANCE_INITIATOR_VAR, loginName); + variableMap.put(FlowConstant.PROC_INSTANCE_START_USER_NAME_VAR, loginName); + Authentication.setAuthenticatedUserId(loginName); + runtimeService.startProcessInstanceById(processDefinitionId, null, variableMap); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public ProcessInstance startAndTakeFirst( + String processDefinitionId, Object dataId, FlowTaskComment flowTaskComment, JSONObject taskVariableData) { + String loginName = TokenData.takeFromRequest().getLoginName(); + Authentication.setAuthenticatedUserId(loginName); + // 设置流程变量。 + Map variableMap = this.initAndGetProcessInstanceVariables(processDefinitionId); + // 根据当前流程的主版本,启动一个流程实例,同时将businessKey参数设置为主表主键值。 + ProcessInstance instance = runtimeService.startProcessInstanceById( + processDefinitionId, dataId.toString(), variableMap); + // 获取流程启动后的第一个任务。 + Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).active().singleResult(); + if (StrUtil.equalsAny(task.getAssignee(), loginName, FlowConstant.START_USER_NAME_VAR)) { + // 按照规则,调用该方法的用户,就是第一个任务的assignee,因此默认会自动执行complete。 + flowTaskComment.fillWith(task); + this.completeTask(task, flowTaskComment, taskVariableData); + } + return instance; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void submitConsign(HistoricTaskInstance startTaskInstance, Task multiInstanceActiveTask, String newAssignees) { + JSONArray assigneeArray = JSON.parseArray(newAssignees); + for (int i = 0; i < assigneeArray.size(); i++) { + Map variables = new HashMap<>(2); + variables.put("assignee", assigneeArray.getString(i)); + variables.put(FlowConstant.MULTI_SIGN_START_TASK_VAR, startTaskInstance.getId()); + runtimeService.addMultiInstanceExecution( + multiInstanceActiveTask.getTaskDefinitionKey(), multiInstanceActiveTask.getProcessInstanceId(), variables); + } + FlowTaskComment flowTaskComment = new FlowTaskComment(); + flowTaskComment.fillWith(startTaskInstance); + flowTaskComment.setApprovalType(FlowApprovalType.MULTI_CONSIGN); + String loginName = TokenData.takeFromRequest().getLoginName(); + String comment = String.format("用户 [%s] 加签 [%s]。", loginName, newAssignees); + flowTaskComment.setComment(comment); + flowTaskCommentService.saveNew(flowTaskComment); + return; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void completeTask(Task task, FlowTaskComment flowTaskComment, JSONObject taskVariableData) { + if (flowTaskComment != null) { + // 这里处理多实例会签逻辑。 + if (flowTaskComment.getApprovalType().equals(FlowApprovalType.MULTI_SIGN)) { + String loginName = TokenData.takeFromRequest().getLoginName(); + String assigneeList = taskVariableData.getString(FlowConstant.MULTI_ASSIGNEE_LIST_VAR); + Assert.notNull(taskVariableData); + Assert.notNull(assigneeList); + taskVariableData.put(FlowConstant.MULTI_AGREE_COUNT_VAR, 0); + taskVariableData.put(FlowConstant.MULTI_REFUSE_COUNT_VAR, 0); + taskVariableData.put(FlowConstant.MULTI_ABSTAIN_COUNT_VAR, 0); + taskVariableData.put(FlowConstant.MULTI_SIGN_NUM_OF_INSTANCES_VAR, 0); + taskVariableData.put(FlowConstant.MULTI_SIGN_START_TASK_VAR, task.getId()); + String comment = String.format("用户 [%s] 会签 [%s]。", loginName, assigneeList); + flowTaskComment.setComment(comment); + } + // 处理转办。 + if (FlowApprovalType.TRANSFER.equals(flowTaskComment.getApprovalType())) { + taskService.setAssignee(task.getId(), flowTaskComment.getDelegateAssginee()); + flowTaskComment.fillWith(task); + flowTaskCommentService.saveNew(flowTaskComment); + return; + } + if (taskVariableData == null) { + taskVariableData = new JSONObject(); + } + this.handleMultiInstanceApprovalType( + task.getExecutionId(), flowTaskComment.getApprovalType(), taskVariableData); + taskVariableData.put(FlowConstant.OPERATION_TYPE_VAR, flowTaskComment.getApprovalType()); + taskService.complete(task.getId(), taskVariableData); + flowTaskComment.fillWith(task); + flowTaskCommentService.saveNew(flowTaskComment); + } else { + taskService.complete(task.getId(), taskVariableData); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public CallResult verifyAssigneeOrCandidateAndClaim(Task task) { + String errorMessage; + String loginName = TokenData.takeFromRequest().getLoginName(); + // 这里必须先执行拾取操作,如果当前用户是候选人,特别是对于分布式场景,更是要先完成候选人的拾取。 + if (task.getAssignee() == null) { + // 没有指派人 + if (!this.isAssigneeOrCandidate(task)) { + errorMessage = "数据验证失败,当前用户不是该待办任务的候选人,请刷新后重试!"; + return CallResult.error(errorMessage); + } + // 作为候选人主动拾取任务。 + taskService.claim(task.getId(), loginName); + } else { + if (!task.getAssignee().equals(loginName)) { + errorMessage = "数据验证失败,当前用户不是该待办任务的指派人,请刷新后重试!"; + return CallResult.error(errorMessage); + } + } + return CallResult.ok(); + } + + @Override + public Map initAndGetProcessInstanceVariables(String processDefinitionId) { + TokenData tokenData = TokenData.takeFromRequest(); + String loginName = tokenData.getLoginName(); + // 设置流程变量。 + Map variableMap = new HashMap<>(4); + variableMap.put(FlowConstant.PROC_INSTANCE_INITIATOR_VAR, loginName); + variableMap.put(FlowConstant.PROC_INSTANCE_START_USER_NAME_VAR, loginName); + List flowTaskExtList = flowTaskExtService.getByProcessDefinitionId(processDefinitionId); + boolean hasDeptPostLeader = false; + boolean hasUpDeptPostLeader = false; + for (FlowTaskExt flowTaskExt : flowTaskExtList) { + if (StrUtil.equals(flowTaskExt.getGroupType(), FlowConstant.GROUP_TYPE_UP_DEPT_POST_LEADER)) { + hasUpDeptPostLeader = true; + } else if (StrUtil.equals(flowTaskExt.getGroupType(), FlowConstant.GROUP_TYPE_DEPT_POST_LEADER)) { + hasDeptPostLeader = true; + } + } + // 如果流程图的配置中包含部门岗位相关的变量(如:部门领导和上级领导审批),flowDeptPostExtHelper就不能为null。 + // 这个需要子类去实现 BaseFlowDeptPostExtHelper 接口,并注册到FlowCustomExtFactory的工厂中。 + BaseFlowDeptPostExtHelper flowDeptPostExtHelper = flowCustomExtFactory.getFlowDeptPostExtHelper(); + if (hasUpDeptPostLeader) { + Assert.notNull(flowDeptPostExtHelper); + Long upLeaderDeptPostId = flowDeptPostExtHelper.getUpLeaderDeptPostId(tokenData.getDeptId()); + variableMap.put(FlowConstant.GROUP_TYPE_UP_DEPT_POST_LEADER_VAR, upLeaderDeptPostId); + } + if (hasDeptPostLeader) { + Assert.notNull(flowDeptPostExtHelper); + Long leaderDeptPostId = flowDeptPostExtHelper.getLeaderDeptPostId(tokenData.getDeptId()); + variableMap.put(FlowConstant.GROUP_TYPE_DEPT_POST_LEADER_VAR, leaderDeptPostId); + } + return variableMap; + } + + @Override + public boolean isAssigneeOrCandidate(TaskInfo task) { + String loginName = TokenData.takeFromRequest().getLoginName(); + if (StrUtil.isNotBlank(task.getAssignee())) { + return StrUtil.equals(loginName, task.getAssignee()); + } + TaskQuery query = taskService.createTaskQuery(); + this.buildCandidateCondition(query, loginName); + return query.active().count() != 0; + } + + @Override + public boolean isProcessInstanceStarter(String processInstanceId) { + String loginName = TokenData.takeFromRequest().getLoginName(); + return historyService.createHistoricProcessInstanceQuery() + .processInstanceId(processInstanceId).startedBy(loginName).count() != 0; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void setBusinessKeyForProcessInstance(String processInstanceId, Object dataId) { + runtimeService.updateBusinessKey(processInstanceId, dataId.toString()); + } + + @Override + public boolean existActiveProcessInstance(String processInstanceId) { + return runtimeService.createProcessInstanceQuery() + .processInstanceId(processInstanceId).active().count() != 0; + } + + @Override + public ProcessInstance getProcessInstance(String processInstanceId) { + return runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + } + + @Override + public Task getProcessInstanceActiveTask(String processInstanceId, String taskId) { + TaskQuery query = taskService.createTaskQuery().processInstanceId(processInstanceId); + if (StrUtil.isNotBlank(taskId)) { + query.taskId(taskId); + } + return query.active().singleResult(); + } + + @Override + public List getProcessInstanceActiveTaskList(String processInstanceId) { + return taskService.createTaskQuery().processInstanceId(processInstanceId).list(); + } + + @Override + public MyPageData getTaskListByUserName(String username, String definitionKey, MyPageParam pageParam) { + TaskQuery query = taskService.createTaskQuery().active(); + if (StrUtil.isNotBlank(definitionKey)) { + query.processDefinitionKey(definitionKey); + } + this.buildCandidateCondition(query, username); + query.orderByTaskCreateTime().desc(); + long totalCount = query.count(); + int firstResult = (pageParam.getPageNum() - 1) * pageParam.getPageSize(); + List taskList = query.listPage(firstResult, pageParam.getPageSize()); + return new MyPageData<>(taskList, totalCount); + } + + @Override + public long getTaskCountByUserName(String username) { + return taskService.createTaskQuery().taskCandidateOrAssigned(username).active().count(); + } + + @Override + public List getTaskListByProcessInstanceIds(List processInstanceIdSet) { + return taskService.createTaskQuery().processInstanceIdIn(processInstanceIdSet).active().list(); + } + + @Override + public List getProcessInstanceList(Set processInstanceIdSet) { + return runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIdSet).list(); + } + + @Override + public List getProcessDefinitionList(Set processDefinitionIdSet) { + return repositoryService.createProcessDefinitionQuery().processDefinitionIds(processDefinitionIdSet).list(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void suspendProcessDefinition(String processDefinitionId) { + repositoryService.suspendProcessDefinitionById(processDefinitionId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void activateProcessDefinition(String processDefinitionId) { + repositoryService.activateProcessDefinitionById(processDefinitionId); + } + + @Override + public BpmnModel getBpmnModelByDefinitionId(String processDefinitionId) { + return repositoryService.getBpmnModel(processDefinitionId); + } + + @Override + public ProcessDefinition getProcessDefinitionByDeployId(String deployId) { + return repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + } + + @Override + public Object getProcessInstanceVariable(String processInstanceId, String variableName) { + return runtimeService.getVariable(processInstanceId, variableName); + } + + @Override + public List convertToFlowTaskList(List taskList) { + List flowTaskVoList = new LinkedList<>(); + if (CollUtil.isEmpty(taskList)) { + return flowTaskVoList; + } + Set processDefinitionIdSet = taskList.stream() + .map(Task::getProcessDefinitionId).collect(Collectors.toSet()); + Set procInstanceIdSet = taskList.stream() + .map(Task::getProcessInstanceId).collect(Collectors.toSet()); + List flowEntryPublishList = + flowEntryService.getFlowEntryPublishList(processDefinitionIdSet); + Map flowEntryPublishMap = + flowEntryPublishList.stream().collect(Collectors.toMap(FlowEntryPublish::getProcessDefinitionId, c -> c)); + List instanceList = this.getProcessInstanceList(procInstanceIdSet); + Map instanceMap = + instanceList.stream().collect(Collectors.toMap(ProcessInstance::getId, c -> c)); + List definitionList = this.getProcessDefinitionList(processDefinitionIdSet); + Map definitionMap = + definitionList.stream().collect(Collectors.toMap(ProcessDefinition::getId, c -> c)); + for (Task task : taskList) { + FlowTaskVo flowTaskVo = new FlowTaskVo(); + flowTaskVo.setTaskId(task.getId()); + flowTaskVo.setTaskName(task.getName()); + flowTaskVo.setTaskKey(task.getTaskDefinitionKey()); + flowTaskVo.setTaskFormKey(task.getFormKey()); + flowTaskVo.setEntryId(flowEntryPublishMap.get(task.getProcessDefinitionId()).getEntryId()); + ProcessDefinition processDefinition = definitionMap.get(task.getProcessDefinitionId()); + flowTaskVo.setProcessDefinitionId(processDefinition.getId()); + flowTaskVo.setProcessDefinitionName(processDefinition.getName()); + flowTaskVo.setProcessDefinitionKey(processDefinition.getKey()); + flowTaskVo.setProcessDefinitionVersion(processDefinition.getVersion()); + ProcessInstance processInstance = instanceMap.get(task.getProcessInstanceId()); + flowTaskVo.setProcessInstanceId(processInstance.getId()); + Object initiator = this.getProcessInstanceVariable( + processInstance.getId(), FlowConstant.PROC_INSTANCE_INITIATOR_VAR); + flowTaskVo.setProcessInstanceInitiator(initiator.toString()); + flowTaskVo.setProcessInstanceStartTime(processInstance.getStartTime()); + flowTaskVoList.add(flowTaskVo); + } + return flowTaskVoList; + } + + @Override + public void addProcessInstanceEndListener(BpmnModel bpmnModel, Class listenerClazz) { + Assert.notNull(listenerClazz); + Process process = bpmnModel.getMainProcess(); + FlowableListener activitiListener = new FlowableListener(); + activitiListener.setEvent("end"); + activitiListener.setImplementationType("class"); + activitiListener.setImplementation(listenerClazz.getName()); + process.getExecutionListeners().add(activitiListener); + } + + @Override + public void addTaskCreateListener(UserTask userTask, Class listenerClazz) { + Assert.notNull(listenerClazz); + FlowableListener activitiListener = new FlowableListener(); + activitiListener.setEvent("create"); + activitiListener.setImplementationType("class"); + activitiListener.setImplementation(listenerClazz.getName()); + userTask.getTaskListeners().add(activitiListener); + } + + @Override + public HistoricProcessInstance getHistoricProcessInstance(String processInstanceId) { + return historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + } + + @Override + public List getHistoricProcessInstanceList(Set processInstanceIdSet) { + return historyService.createHistoricProcessInstanceQuery().processInstanceIds(processInstanceIdSet).list(); + } + + @Override + public MyPageData getHistoricProcessInstanceList( + String processDefinitionKey, + String processDefinitionName, + String startUser, + String beginDate, + String endDate, + MyPageParam pageParam, + boolean finishedOnly) throws ParseException { + HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery(); + if (StrUtil.isNotBlank(processDefinitionKey)) { + query.processDefinitionKey(processDefinitionKey); + } + if (StrUtil.isNotBlank(processDefinitionName)) { + query.processDefinitionName(processDefinitionName); + } + if (StrUtil.isNotBlank(startUser)) { + query.startedBy(startUser); + } + if (StrUtil.isNotBlank(beginDate)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + query.startedAfter(sdf.parse(beginDate)); + } + if (StrUtil.isNotBlank(endDate)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + query.startedBefore(sdf.parse(endDate)); + } + if (finishedOnly) { + query.finished(); + } + query.orderByProcessInstanceStartTime().desc(); + long totalCount = query.count(); + int firstResult = (pageParam.getPageNum() - 1) * pageParam.getPageSize(); + List instanceList = query.listPage(firstResult, pageParam.getPageSize()); + return new MyPageData<>(instanceList, totalCount); + } + + @Override + public MyPageData getHistoricTaskInstanceFinishedList( + String processDefinitionName, + String beginDate, + String endDate, + MyPageParam pageParam) throws ParseException { + String loginName = TokenData.takeFromRequest().getLoginName(); + HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() + .taskAssignee(loginName) + .finished(); + if (StrUtil.isNotBlank(processDefinitionName)) { + query.processDefinitionName(processDefinitionName); + } + if (StrUtil.isNotBlank(beginDate)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + query.taskCompletedAfter(sdf.parse(beginDate)); + } + if (StrUtil.isNotBlank(endDate)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + query.taskCompletedBefore(sdf.parse(endDate)); + } + query.orderByHistoricTaskInstanceEndTime().desc(); + long totalCount = query.count(); + int firstResult = (pageParam.getPageNum() - 1) * pageParam.getPageSize(); + List instanceList = query.listPage(firstResult, pageParam.getPageSize()); + return new MyPageData<>(instanceList, totalCount); + } + + @Override + public List getHistoricActivityInstanceList(String processInstanceId) { + return historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).list(); + } + + @Override + public HistoricTaskInstance getHistoricTaskInstance(String processInstanceId, String taskId) { + return historyService.createHistoricTaskInstanceQuery() + .processInstanceId(processInstanceId).taskId(taskId).singleResult(); + } + + @Override + public List getHistoricUnfinishedInstanceList(String processInstanceId) { + return historyService.createHistoricActivityInstanceQuery() + .processInstanceId(processInstanceId).unfinished().list(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public CallResult stopProcessInstance(String processInstanceId, String stopReason, boolean forCancel) { + List taskList = taskService.createTaskQuery().processInstanceId(processInstanceId).active().list(); + if (CollUtil.isEmpty(taskList)) { + return CallResult.error("数据验证失败,当前流程尚未开始或已经结束!"); + } + for (Task task : taskList) { + String currActivityId = task.getTaskDefinitionKey(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); + FlowNode currFlow = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currActivityId); + if (currFlow == null) { + List subProcessList = + bpmnModel.getMainProcess().findFlowElementsOfType(SubProcess.class); + for (SubProcess subProcess : subProcessList) { + FlowElement flowElement = subProcess.getFlowElement(currActivityId); + if (flowElement != null) { + currFlow = (FlowNode) flowElement; + break; + } + } + } + EndEvent endEvent = + bpmnModel.getMainProcess().findFlowElementsOfType(EndEvent.class, false).get(0); + if (!(currFlow.getParentContainer().equals(endEvent.getParentContainer()))) { + return CallResult.error("数据验证失败,不能从子流程直接中止!"); + } + // 保存原有的输出方向。 + List oriSequenceFlows = Lists.newArrayList(); + oriSequenceFlows.addAll(currFlow.getOutgoingFlows()); + // 清空原有方向。 + currFlow.getOutgoingFlows().clear(); + // 建立新方向。 + SequenceFlow newSequenceFlow = new SequenceFlow(); + String uuid = UUID.randomUUID().toString().replace("-", ""); + newSequenceFlow.setId(uuid); + newSequenceFlow.setSourceFlowElement(currFlow); + newSequenceFlow.setTargetFlowElement(endEvent); + currFlow.setOutgoingFlows(CollUtil.newArrayList(newSequenceFlow)); + // 完成任务并跳转到新方向。 + taskService.complete(task.getId()); + FlowTaskComment taskComment = new FlowTaskComment(task); + taskComment.setApprovalType(FlowApprovalType.STOP); + taskComment.setComment(stopReason); + flowTaskCommentService.saveNew(taskComment); + // 回复原有输出方向。 + currFlow.setOutgoingFlows(oriSequenceFlows); + } + int status = FlowTaskStatus.STOPPED; + if (forCancel) { + status = FlowTaskStatus.CANCELLED; + } + flowWorkOrderService.updateFlowStatusByProcessInstanceId(processInstanceId, status); + return CallResult.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteProcessInstance(String processInstanceId) { + historyService.deleteHistoricProcessInstance(processInstanceId); + flowWorkOrderService.removeByProcessInstanceId(processInstanceId); + } + + @Override + public Object getTaskVariable(String taskId, String variableName) { + return taskService.getVariable(taskId, variableName); + } + + private void handleMultiInstanceApprovalType(String executionId, String approvalType, JSONObject taskVariableData) { + if (StrUtil.isBlank(approvalType)) { + return; + } + if (StrUtil.equalsAny(approvalType, + FlowApprovalType.MULTI_AGREE, + FlowApprovalType.MULTI_REFUSE, + FlowApprovalType.MULTI_ABSTAIN)) { + Map variables = runtimeService.getVariables(executionId); + Integer agreeCount = (Integer) variables.get(FlowConstant.MULTI_AGREE_COUNT_VAR); + Integer refuseCount = (Integer) variables.get(FlowConstant.MULTI_REFUSE_COUNT_VAR); + Integer abstainCount = (Integer) variables.get(FlowConstant.MULTI_ABSTAIN_COUNT_VAR); + Integer nrOfInstances = (Integer) variables.get(FlowConstant.NUMBER_OF_INSTANCES_VAR); + taskVariableData.put(FlowConstant.MULTI_AGREE_COUNT_VAR, agreeCount); + taskVariableData.put(FlowConstant.MULTI_REFUSE_COUNT_VAR, refuseCount); + taskVariableData.put(FlowConstant.MULTI_ABSTAIN_COUNT_VAR, abstainCount); + taskVariableData.put(FlowConstant.MULTI_SIGN_NUM_OF_INSTANCES_VAR, nrOfInstances); + switch (approvalType) { + case FlowApprovalType.MULTI_AGREE: + if (agreeCount == null) { + agreeCount = 0; + } + taskVariableData.put(FlowConstant.MULTI_AGREE_COUNT_VAR, agreeCount + 1); + break; + case FlowApprovalType.MULTI_REFUSE: + if (refuseCount == null) { + refuseCount = 0; + } + taskVariableData.put(FlowConstant.MULTI_REFUSE_COUNT_VAR, refuseCount + 1); + break; + case FlowApprovalType.MULTI_ABSTAIN: + if (abstainCount == null) { + abstainCount = 0; + } + taskVariableData.put(FlowConstant.MULTI_ABSTAIN_COUNT_VAR, abstainCount + 1); + break; + default: + break; + } + } + } + + private void buildCandidateCondition(TaskQuery query, String loginName) { + Set groupIdSet = new HashSet<>(); + // NOTE: 目前已经支持部门和岗位,如果今后需要支持角色,可将角色Id也加到groupIdSet中即可。 + // 需要注意的是,部门Id、部门岗位Id,或者其他类型的分组Id,他们之间一定不能重复。 + TokenData tokenData = TokenData.takeFromRequest(); + Object deptId = tokenData.getDeptId(); + if (deptId != null) { + groupIdSet.add(deptId.toString()); + } + String deptPostIds = tokenData.getDeptPostIds(); + if (StrUtil.isNotBlank(deptPostIds)) { + groupIdSet.addAll(Arrays.asList(StrUtil.split(deptPostIds, ","))); + } + if (CollUtil.isNotEmpty(groupIdSet)) { + query.or().taskCandidateGroupIn(groupIdSet).taskCandidateOrAssigned(loginName).endOr(); + } else { + query.taskCandidateOrAssigned(loginName); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowCategoryServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowCategoryServiceImpl.java new file mode 100644 index 00000000..549d29ce --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowCategoryServiceImpl.java @@ -0,0 +1,129 @@ +package com.flow.demo.common.flow.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.github.pagehelper.Page; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.flow.dao.*; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.flow.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +/** + * FlowCategory数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("flowCategoryService") +public class FlowCategoryServiceImpl extends BaseService implements FlowCategoryService { + + @Autowired + private FlowCategoryMapper flowCategoryMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return flowCategoryMapper; + } + + /** + * 保存新增对象。 + * + * @param flowCategory 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public FlowCategory saveNew(FlowCategory flowCategory) { + flowCategory.setCategoryId(idGenerator.nextLongId()); + TokenData tokenData = TokenData.takeFromRequest(); + flowCategory.setUpdateUserId(tokenData.getUserId()); + flowCategory.setCreateUserId(tokenData.getUserId()); + Date now = new Date(); + flowCategory.setUpdateTime(now); + flowCategory.setCreateTime(now); + flowCategoryMapper.insert(flowCategory); + return flowCategory; + } + + /** + * 更新数据对象。 + * + * @param flowCategory 更新的对象。 + * @param originalFlowCategory 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(FlowCategory flowCategory, FlowCategory originalFlowCategory) { + flowCategory.setUpdateUserId(TokenData.takeFromRequest().getUserId()); + flowCategory.setCreateUserId(originalFlowCategory.getCreateUserId()); + flowCategory.setUpdateTime(new Date()); + flowCategory.setCreateTime(originalFlowCategory.getCreateTime()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = + this.createUpdateQueryForNullValue(flowCategory, flowCategory.getCategoryId()); + return flowCategoryMapper.update(flowCategory, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param categoryId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long categoryId) { + return flowCategoryMapper.deleteById(categoryId) == 1; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getFlowCategoryListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getFlowCategoryList(FlowCategory filter, String orderBy) { + return flowCategoryMapper.getFlowCategoryList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getFlowCategoryList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getFlowCategoryListWithRelation(FlowCategory filter, String orderBy) { + List resultList = flowCategoryMapper.getFlowCategoryList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowEntryServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowEntryServiceImpl.java new file mode 100644 index 00000000..e70b4c65 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowEntryServiceImpl.java @@ -0,0 +1,422 @@ +package com.flow.demo.common.flow.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.pagehelper.Page; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.flow.util.BaseFlowDeptPostExtHelper; +import com.flow.demo.common.flow.util.FlowCustomExtFactory; +import com.flow.demo.common.flow.constant.FlowConstant; +import com.flow.demo.common.flow.dao.*; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.flow.model.constant.FlowEntryStatus; +import com.flow.demo.common.flow.model.constant.FlowVariableType; +import com.flow.demo.common.flow.listener.UpdateFlowStatusListener; +import lombok.Cleanup; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.converter.BpmnXMLConverter; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.UserTask; +import org.flowable.engine.RepositoryService; +import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.ProcessDefinition; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; + +/** + * FlowEntry数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("flowEntryService") +public class FlowEntryServiceImpl extends BaseService implements FlowEntryService { + + @Autowired + private FlowEntryMapper flowEntryMapper; + @Autowired + private FlowEntryPublishMapper flowEntryPublishMapper; + @Autowired + private FlowEntryPublishVariableMapper flowEntryPublishVariableMapper; + @Autowired + private FlowEntryVariableService flowEntryVariableService; + @Autowired + private FlowCategoryService flowCategoryService; + @Autowired + private FlowTaskExtService flowTaskExtService; + @Autowired + private FlowApiService flowApiService; + @Autowired + private FlowCustomExtFactory flowCustomExtFactory; + @Autowired + private RepositoryService repositoryService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return flowEntryMapper; + } + + /** + * 保存新增对象。 + * + * @param flowEntry 新增工作流对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public FlowEntry saveNew(FlowEntry flowEntry) { + flowEntry.setEntryId(idGenerator.nextLongId()); + flowEntry.setStatus(FlowEntryStatus.UNPUBLISHED); + TokenData tokenData = TokenData.takeFromRequest(); + flowEntry.setUpdateUserId(tokenData.getUserId()); + flowEntry.setCreateUserId(tokenData.getUserId()); + Date now = new Date(); + flowEntry.setUpdateTime(now); + flowEntry.setCreateTime(now); + flowEntryMapper.insert(flowEntry); + this.insertBuiltinEntryVariables(flowEntry.getEntryId()); + return flowEntry; + } + + /** + * 发布指定流程。 + * + * @param flowEntry 待发布的流程对象。 + * @param initTaskInfo 第一个非开始节点任务的附加信息。 + * @param flowTaskExtList 所有用户任务的自定义扩展数据列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void publish(FlowEntry flowEntry, String initTaskInfo, List flowTaskExtList) throws XMLStreamException { + FlowCategory flowCategory = flowCategoryService.getById(flowEntry.getCategoryId()); + InputStream xmlStream = new ByteArrayInputStream( + flowEntry.getBpmnXml().getBytes(StandardCharsets.UTF_8)); + @Cleanup XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(xmlStream); + BpmnXMLConverter converter = new BpmnXMLConverter(); + BpmnModel bpmnModel = converter.convertToBpmnModel(reader); + flowApiService.addProcessInstanceEndListener(bpmnModel, UpdateFlowStatusListener.class); + Collection elementList = bpmnModel.getMainProcess().getFlowElements(); + Map elementMap = + elementList.stream().filter(e -> e instanceof UserTask).collect(Collectors.toMap(FlowElement::getId, c -> c)); + if (CollUtil.isNotEmpty(flowTaskExtList)) { + BaseFlowDeptPostExtHelper flowDeptPostExtHelper = flowCustomExtFactory.getFlowDeptPostExtHelper(); + for (FlowTaskExt t : flowTaskExtList) { + UserTask userTask = (UserTask) elementMap.get(t.getTaskId()); + // 如果流程图中包含部门领导审批和上级部门领导审批的选项,就需要注册 FlowCustomExtFactory 工厂中的 + // BaseFlowDeptPostExtHelper 对象,该注册操作需要业务模块中实现。 + if (StrUtil.equals(t.getGroupType(), FlowConstant.GROUP_TYPE_UP_DEPT_POST_LEADER)) { + userTask.setCandidateGroups( + CollUtil.newArrayList("${" + FlowConstant.GROUP_TYPE_UP_DEPT_POST_LEADER_VAR + "}")); + Assert.notNull(flowDeptPostExtHelper); + flowApiService.addTaskCreateListener(userTask, flowDeptPostExtHelper.getUpDeptPostLeaderListener()); + } else if (StrUtil.equals(t.getGroupType(), FlowConstant.GROUP_TYPE_DEPT_POST_LEADER)) { + userTask.setCandidateGroups( + CollUtil.newArrayList("${" + FlowConstant.GROUP_TYPE_DEPT_POST_LEADER_VAR + "}")); + Assert.notNull(flowDeptPostExtHelper); + flowApiService.addTaskCreateListener(userTask, flowDeptPostExtHelper.getDeptPostLeaderListener()); + } + } + } + Deployment deploy = repositoryService.createDeployment() + .addBpmnModel(flowEntry.getProcessDefinitionKey() + ".bpmn", bpmnModel) + .name(flowEntry.getProcessDefinitionName()) + .key(flowEntry.getProcessDefinitionKey()) + .category(flowCategory.getCode()) + .deploy(); + ProcessDefinition processDefinition = flowApiService.getProcessDefinitionByDeployId(deploy.getId()); + FlowEntryPublish flowEntryPublish = new FlowEntryPublish(); + flowEntryPublish.setEntryPublishId(idGenerator.nextLongId()); + flowEntryPublish.setEntryId(flowEntry.getEntryId()); + flowEntryPublish.setProcessDefinitionId(processDefinition.getId()); + flowEntryPublish.setDeployId(processDefinition.getDeploymentId()); + flowEntryPublish.setPublishVersion(processDefinition.getVersion()); + flowEntryPublish.setActiveStatus(true); + flowEntryPublish.setMainVersion(flowEntry.getStatus().equals(FlowEntryStatus.UNPUBLISHED)); + flowEntryPublish.setCreateUserId(TokenData.takeFromRequest().getUserId()); + flowEntryPublish.setPublishTime(new Date()); + flowEntryPublish.setInitTaskInfo(initTaskInfo); + flowEntryPublishMapper.insert(flowEntryPublish); + FlowEntry updatedFlowEntry = new FlowEntry(); + updatedFlowEntry.setEntryId(flowEntry.getEntryId()); + updatedFlowEntry.setStatus(FlowEntryStatus.PUBLISHED); + updatedFlowEntry.setLastestPublishTime(new Date()); + // 对于从未发布过的工作,第一次发布的时候会将本地发布置位主版本。 + if (flowEntry.getStatus().equals(FlowEntryStatus.UNPUBLISHED)) { + updatedFlowEntry.setMainEntryPublishId(flowEntryPublish.getEntryPublishId()); + } + flowEntryMapper.updateById(updatedFlowEntry); + FlowEntryVariable flowEntryVariableFilter = new FlowEntryVariable(); + flowEntryVariableFilter.setEntryId(flowEntry.getEntryId()); + List flowEntryVariableList = + flowEntryVariableService.getFlowEntryVariableList(flowEntryVariableFilter, null); + if (CollUtil.isNotEmpty(flowTaskExtList)) { + flowTaskExtList.forEach(t -> t.setProcessDefinitionId(processDefinition.getId())); + flowTaskExtService.saveBatch(flowTaskExtList); + } + this.insertEntryPublishVariables(flowEntryVariableList, flowEntryPublish.getEntryPublishId()); + } + + /** + * 更新数据对象。 + * + * @param flowEntry 更新的对象。 + * @param originalFlowEntry 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(FlowEntry flowEntry, FlowEntry originalFlowEntry) { + flowEntry.setUpdateUserId(TokenData.takeFromRequest().getUserId()); + flowEntry.setCreateUserId(originalFlowEntry.getCreateUserId()); + flowEntry.setUpdateTime(new Date()); + flowEntry.setCreateTime(originalFlowEntry.getCreateTime()); + flowEntry.setPageId(originalFlowEntry.getPageId()); + return flowEntryMapper.updateById(flowEntry) == 1; + } + + /** + * 删除指定数据。 + * + * @param entryId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long entryId) { + if (flowEntryMapper.deleteById(entryId) != 1) { + return false; + } + flowEntryVariableService.removeByEntryId(entryId); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getFlowEntryListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getFlowEntryList(FlowEntry filter, String orderBy) { + return flowEntryMapper.getFlowEntryList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getFlowEntryList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getFlowEntryListWithRelation(FlowEntry filter, String orderBy) { + List resultList = flowEntryMapper.getFlowEntryList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + Set mainEntryPublishIdSet = resultList.stream().filter(e -> e.getMainEntryPublishId() != null) + .map(FlowEntry::getMainEntryPublishId).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(mainEntryPublishIdSet)) { + List mainEntryPublishList = + flowEntryPublishMapper.selectBatchIds(mainEntryPublishIdSet); + MyModelUtil.makeOneToOneRelation(FlowEntry.class, resultList, FlowEntry::getMainEntryPublishId, + mainEntryPublishList, FlowEntryPublish::getEntryPublishId, "mainFlowEntryPublish"); + } + return resultList; + } + + @Override + public FlowEntry getFlowEntryByProcessDefinitionKey(String processDefinitionKey) { + FlowEntry filter = new FlowEntry(); + filter.setProcessDefinitionKey(processDefinitionKey); + return flowEntryMapper.selectOne(new LambdaQueryWrapper<>(filter)); + } + + /** + * 根据流程Id获取流程发布列表数据。 + * + * @param entryId 流程Id。 + * @return 流程关联的发布列表数据。 + */ + @Override + public List getFlowEntryPublishList(Long entryId) { + FlowEntryPublish filter = new FlowEntryPublish(); + filter.setEntryId(entryId); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(filter); + queryWrapper.orderByDesc(FlowEntryPublish::getEntryPublishId); + return flowEntryPublishMapper.selectList(queryWrapper); + } + + /** + * 根据流程引擎中的流程定义Id集合,查询流程发布对象。 + * + * @param processDefinitionIdSet 流程引擎中的流程定义Id集合。 + * @return 查询结果。 + */ + @Override + public List getFlowEntryPublishList(Set processDefinitionIdSet) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(FlowEntryPublish::getProcessDefinitionId, processDefinitionIdSet); + return flowEntryPublishMapper.selectList(queryWrapper); + } + + /** + * 获取指定工作流发布版本对象。同时同步修改工作流对象中冗余状态字段。 + * + * @param entryPublishId 工作流发布对象Id。 + * @return 查询后的对象。 + */ + @Override + public FlowEntryPublish getFlowEntryPublishById(Long entryPublishId) { + return flowEntryPublishMapper.selectById(entryPublishId); + } + + /** + * 获取指定流程定义Id对应的流程发布对象。 + * + * @param processDefinitionId 流程定义Id。 + * @return 流程发布对象。 + */ + @Override + public FlowEntryPublish getFlowEntryPublishByDefinitionId(String processDefinitionId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(FlowEntryPublish::getProcessDefinitionId, processDefinitionId); + return flowEntryPublishMapper.selectOne(queryWrapper); + } + + /** + * 为指定工作流切换发布的主版本。 + * + * @param flowEntry 工作流对象。 + * @param newMainFlowEntryPublish 工作流新的发布主版本对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void updateFlowEntryMainVersion(FlowEntry flowEntry, FlowEntryPublish newMainFlowEntryPublish) { + FlowEntryPublish oldMainFlowEntryPublish = + flowEntryPublishMapper.selectById(flowEntry.getMainEntryPublishId()); + oldMainFlowEntryPublish.setMainVersion(false); + flowEntryPublishMapper.updateById(oldMainFlowEntryPublish); + newMainFlowEntryPublish.setMainVersion(true); + flowEntryPublishMapper.updateById(newMainFlowEntryPublish); + FlowEntry updatedEntry = new FlowEntry(); + updatedEntry.setEntryId(flowEntry.getEntryId()); + updatedEntry.setMainEntryPublishId(newMainFlowEntryPublish.getEntryPublishId()); + flowEntryMapper.updateById(updatedEntry); + } + + /** + * 挂起指定的工作流发布对象。同时同步修改工作流对象中冗余状态字段。 + * + * @param flowEntryPublish 待挂起的工作流发布对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void suspendFlowEntryPublish(FlowEntryPublish flowEntryPublish) { + FlowEntryPublish updatedEntryPublish = new FlowEntryPublish(); + updatedEntryPublish.setEntryPublishId(flowEntryPublish.getEntryPublishId()); + updatedEntryPublish.setActiveStatus(false); + flowEntryPublishMapper.updateById(updatedEntryPublish); + flowApiService.suspendProcessDefinition(flowEntryPublish.getProcessDefinitionId()); + } + + /** + * 激活指定的工作流发布对象。 + * + * @param flowEntryPublish 待恢复的工作流发布对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void activateFlowEntryPublish(FlowEntryPublish flowEntryPublish) { + FlowEntryPublish updatedEntryPublish = new FlowEntryPublish(); + updatedEntryPublish.setEntryPublishId(flowEntryPublish.getEntryPublishId()); + updatedEntryPublish.setActiveStatus(true); + flowEntryPublishMapper.updateById(updatedEntryPublish); + flowApiService.activateProcessDefinition(flowEntryPublish.getProcessDefinitionId()); + } + + /** + * 主表的关联数据验证。 + * + * @param flowEntry 最新数据对象。 + * @param originalFlowEntry 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + @Override + public CallResult verifyRelatedData(FlowEntry flowEntry, FlowEntry originalFlowEntry) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + if (this.needToVerify(flowEntry, originalFlowEntry, FlowEntry::getCategoryId) + && !flowCategoryService.existId(flowEntry.getCategoryId())) { + return CallResult.error(String.format(errorMessageFormat, "流程类别Id")); + } + return CallResult.ok(); + } + + private void insertBuiltinEntryVariables(Long entryId) { + Date now = new Date(); + FlowEntryVariable operationTypeVariable = new FlowEntryVariable(); + operationTypeVariable.setVariableId(idGenerator.nextLongId()); + operationTypeVariable.setEntryId(entryId); + operationTypeVariable.setVariableName(FlowConstant.OPERATION_TYPE_VAR); + operationTypeVariable.setShowName("审批类型"); + operationTypeVariable.setVariableType(FlowVariableType.TASK); + operationTypeVariable.setBuiltin(true); + operationTypeVariable.setCreateTime(now); + flowEntryVariableService.saveNew(operationTypeVariable); + FlowEntryVariable startUserNameVariable = new FlowEntryVariable(); + startUserNameVariable.setVariableId(idGenerator.nextLongId()); + startUserNameVariable.setEntryId(entryId); + startUserNameVariable.setVariableName("startUserName"); + startUserNameVariable.setShowName("流程启动用户"); + startUserNameVariable.setVariableType(FlowVariableType.INSTANCE); + startUserNameVariable.setBuiltin(true); + startUserNameVariable.setCreateTime(now); + flowEntryVariableService.saveNew(startUserNameVariable); + } + + private void insertEntryPublishVariables(List entryVariableList, Long entryPublishId) { + if (CollUtil.isEmpty(entryVariableList)) { + return; + } + List entryPublishVariableList = + MyModelUtil.copyCollectionTo(entryVariableList, FlowEntryPublishVariable.class); + for (FlowEntryPublishVariable variable : entryPublishVariableList) { + variable.setVariableId(idGenerator.nextLongId()); + variable.setEntryPublishId(entryPublishId); + } + flowEntryPublishVariableMapper.insertList(entryPublishVariableList); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowEntryVariableServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowEntryVariableServiceImpl.java new file mode 100644 index 00000000..744e49b7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowEntryVariableServiceImpl.java @@ -0,0 +1,131 @@ +package com.flow.demo.common.flow.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.flow.dao.*; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 流程变量数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("flowEntryVariableService") +public class FlowEntryVariableServiceImpl extends BaseService implements FlowEntryVariableService { + + @Autowired + private FlowEntryVariableMapper flowEntryVariableMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return flowEntryVariableMapper; + } + + /** + * 保存新增对象。 + * + * @param flowEntryVariable 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public FlowEntryVariable saveNew(FlowEntryVariable flowEntryVariable) { + flowEntryVariable.setVariableId(idGenerator.nextLongId()); + flowEntryVariable.setCreateTime(new Date()); + flowEntryVariableMapper.insert(flowEntryVariable); + return flowEntryVariable; + } + + /** + * 更新数据对象。 + * + * @param flowEntryVariable 更新的对象。 + * @param originalFlowEntryVariable 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(FlowEntryVariable flowEntryVariable, FlowEntryVariable originalFlowEntryVariable) { + flowEntryVariable.setCreateTime(originalFlowEntryVariable.getCreateTime()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(flowEntryVariable, flowEntryVariable.getVariableId()); + return flowEntryVariableMapper.update(flowEntryVariable, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param variableId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long variableId) { + return flowEntryVariableMapper.deleteById(variableId) == 1; + } + + /** + * 删除指定流程Id的所有变量。 + * + * @param entryId 流程Id。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void removeByEntryId(Long entryId) { + flowEntryVariableMapper.delete( + new LambdaQueryWrapper().eq(FlowEntryVariable::getEntryId, entryId)); + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getFlowEntryVariableListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getFlowEntryVariableList(FlowEntryVariable filter, String orderBy) { + return flowEntryVariableMapper.getFlowEntryVariableList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getFlowEntryVariableList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getFlowEntryVariableListWithRelation(FlowEntryVariable filter, String orderBy) { + List resultList = flowEntryVariableMapper.getFlowEntryVariableList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowTaskCommentServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowTaskCommentServiceImpl.java new file mode 100644 index 00000000..9bc99f6b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowTaskCommentServiceImpl.java @@ -0,0 +1,74 @@ +package com.flow.demo.common.flow.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.flow.dao.*; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 流程任务批注数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("flowTaskCommentService") +public class FlowTaskCommentServiceImpl extends BaseService implements FlowTaskCommentService { + + @Autowired + private FlowTaskCommentMapper flowTaskCommentMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return flowTaskCommentMapper; + } + + /** + * 保存新增对象。 + * + * @param flowTaskComment 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public FlowTaskComment saveNew(FlowTaskComment flowTaskComment) { + flowTaskComment.setId(idGenerator.nextLongId()); + TokenData tokenData = TokenData.takeFromRequest(); + flowTaskComment.setCreateUserId(tokenData.getUserId()); + flowTaskComment.setCreateUsername(tokenData.getShowName()); + flowTaskComment.setCreateTime(new Date()); + flowTaskCommentMapper.insert(flowTaskComment); + return flowTaskComment; + } + + /** + * 查询指定流程实例Id下的所有审批任务的批注。 + * + * @param processInstanceId 流程实例Id。 + * @return 查询结果集。 + */ + @Override + public List getFlowTaskCommentList(String processInstanceId) { + LambdaQueryWrapper queryWrapper = + new LambdaQueryWrapper().eq(FlowTaskComment::getProcessInstanceId, processInstanceId); + queryWrapper.orderByAsc(FlowTaskComment::getId); + return flowTaskCommentMapper.selectList(queryWrapper); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowTaskExtServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowTaskExtServiceImpl.java new file mode 100644 index 00000000..0085c27d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowTaskExtServiceImpl.java @@ -0,0 +1,62 @@ +package com.flow.demo.common.flow.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.flow.demo.common.flow.service.*; +import com.flow.demo.common.flow.dao.*; +import com.flow.demo.common.flow.model.*; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 流程任务扩展数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("flowTaskExtService") +public class FlowTaskExtServiceImpl extends BaseService implements FlowTaskExtService { + + @Autowired + private FlowTaskExtMapper flowTaskExtMapper; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return flowTaskExtMapper; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveBatch(List flowTaskExtList) { + if (CollUtil.isNotEmpty(flowTaskExtList)) { + flowTaskExtMapper.insertList(flowTaskExtList); + } + } + + @Override + public FlowTaskExt getByProcessDefinitionIdAndTaskId(String processDefinitionId, String taskId) { + FlowTaskExt filter = new FlowTaskExt(); + filter.setProcessDefinitionId(processDefinitionId); + filter.setTaskId(taskId); + return flowTaskExtMapper.selectOne(new QueryWrapper<>(filter)); + } + + @Override + public List getByProcessDefinitionId(String processDefinitionId) { + FlowTaskExt filter = new FlowTaskExt(); + filter.setProcessDefinitionId(processDefinitionId); + return flowTaskExtMapper.selectList(new QueryWrapper<>(filter)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowWorkOrderServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowWorkOrderServiceImpl.java new file mode 100644 index 00000000..8e83db58 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/service/impl/FlowWorkOrderServiceImpl.java @@ -0,0 +1,136 @@ +package com.flow.demo.common.flow.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.flow.constant.FlowTaskStatus; +import com.flow.demo.common.flow.dao.FlowWorkOrderMapper; +import com.flow.demo.common.flow.model.FlowWorkOrder; +import com.flow.demo.common.flow.service.FlowWorkOrderService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.runtime.ProcessInstance; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 工作流工单表数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("flowWorkOrderService") +public class FlowWorkOrderServiceImpl extends BaseService implements FlowWorkOrderService { + + @Autowired + private FlowWorkOrderMapper flowWorkOrderMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return flowWorkOrderMapper; + } + + /** + * 保存新增对象。 + * + * @param instance 流程实例对象。 + * @param dataId 流程实例的BusinessKey。 + * @param onlineTableId 在线数据表的主键Id。 + * @return 新增的工作流工单对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public FlowWorkOrder saveNew(ProcessInstance instance, Object dataId, Long onlineTableId) { + TokenData tokenData = TokenData.takeFromRequest(); + Date now = new Date(); + FlowWorkOrder flowWorkOrder = new FlowWorkOrder(); + flowWorkOrder.setWorkOrderId(idGenerator.nextLongId()); + flowWorkOrder.setProcessDefinitionKey(instance.getProcessDefinitionKey()); + flowWorkOrder.setProcessDefinitionName(instance.getProcessDefinitionName()); + flowWorkOrder.setProcessDefinitionId(instance.getProcessDefinitionId()); + flowWorkOrder.setProcessInstanceId(instance.getId()); + flowWorkOrder.setBusinessKey(dataId.toString()); + flowWorkOrder.setOnlineTableId(onlineTableId); + flowWorkOrder.setFlowStatus(FlowTaskStatus.SUBMITTED); + flowWorkOrder.setSubmitUsername(tokenData.getLoginName()); + flowWorkOrder.setDeptId(tokenData.getDeptId()); + flowWorkOrder.setCreateUserId(tokenData.getUserId()); + flowWorkOrder.setUpdateUserId(tokenData.getUserId()); + flowWorkOrder.setCreateTime(now); + flowWorkOrder.setUpdateTime(now); + flowWorkOrder.setDeletedFlag(GlobalDeletedFlag.NORMAL); + flowWorkOrderMapper.insert(flowWorkOrder); + return flowWorkOrder; + } + + /** + * 删除指定数据。 + * + * @param workOrderId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long workOrderId) { + return flowWorkOrderMapper.deleteById(workOrderId) == 1; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void removeByProcessInstanceId(String processInstanceId) { + FlowWorkOrder filter = new FlowWorkOrder(); + filter.setProcessInstanceId(processInstanceId); + super.removeBy(filter); + } + + @Override + public List getFlowWorkOrderList(FlowWorkOrder filter, String orderBy) { + return flowWorkOrderMapper.getFlowWorkOrderList(filter, orderBy); + } + + @Override + public List getFlowWorkOrderListWithRelation(FlowWorkOrder filter, String orderBy) { + List resultList = flowWorkOrderMapper.getFlowWorkOrderList(filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + @Override + public boolean existByBusinessKey(Object businessKey, boolean unfinished) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(FlowWorkOrder::getBusinessKey, businessKey.toString()); + if (unfinished) { + queryWrapper.notIn(FlowWorkOrder::getFlowStatus, + FlowTaskStatus.FINISHED, FlowTaskStatus.CANCELLED, FlowTaskStatus.STOPPED); + } + return flowWorkOrderMapper.selectCount(queryWrapper) > 0; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateFlowStatusByProcessInstanceId(String processInstanceId, int flowStatus) { + FlowWorkOrder flowWorkOrder = new FlowWorkOrder(); + flowWorkOrder.setFlowStatus(flowStatus); + if (FlowTaskStatus.FINISHED != flowStatus) { + flowWorkOrder.setUpdateTime(new Date()); + flowWorkOrder.setUpdateUserId(TokenData.takeFromRequest().getUserId()); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(FlowWorkOrder::getProcessInstanceId, processInstanceId); + flowWorkOrderMapper.update(flowWorkOrder, queryWrapper); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/util/BaseFlowDeptPostExtHelper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/util/BaseFlowDeptPostExtHelper.java new file mode 100644 index 00000000..0aeae641 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/util/BaseFlowDeptPostExtHelper.java @@ -0,0 +1,75 @@ +package com.flow.demo.common.flow.util; + +import com.flow.demo.common.flow.listener.DeptPostLeaderListener; +import com.flow.demo.common.flow.listener.UpDeptPostLeaderListener; +import org.flowable.engine.delegate.TaskListener; + +/** + * 工作流与部门岗位相关的自定义扩展接口,需要业务模块自行实现该接口。也可以根据实际需求扩展该接口的方法。 + * 目前支持的主键类型为字符型和长整型,所以这里提供了两套实现接口。可根据实际情况实现其中一套即可。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface BaseFlowDeptPostExtHelper { + + /** + * 根据(字符型)部门Id,获取当前用户部门领导所有的部门岗位Id。 + * + * @param deptId 用户所在部门Id。 + * @return 当前用户部门领导所有的部门岗位Id。 + */ + default String getLeaderDeptPostId(String deptId) { + return null; + } + + /** + * 根据(字符型)部门Id,获取当前用户上级部门领导所有的部门岗位Id。 + * + * @param deptId 用户所在部门Id。 + * @return 当前用户上级部门领导所有的部门岗位Id。 + */ + default String getUpLeaderDeptPostId(String deptId) { + return null; + } + + /** + * 根据(长整型)部门Id,获取当前用户部门领导所有的部门岗位Id。 + * + * @param deptId 用户所在部门Id。 + * @return 当前用户部门领导所有的部门岗位Id。 + */ + default Long getLeaderDeptPostId(Long deptId) { + return null; + } + + /** + * 根据(长整型)部门Id,获取当前用户上级部门领导所有的部门岗位Id。 + * + * @param deptId 用户所在部门Id。 + * @return 当前用户上级部门领导所有的部门岗位Id。 + */ + default Long getUpLeaderDeptPostId(Long deptId) { + return null; + } + + /** + * 获取任务执行人是当前部门领导岗位的任务监听器。 + * 通常会在没有找到领导部门岗位Id的时候,为当前任务指定其他的指派人、候选人或候选组。 + * + * @return 任务监听器。 + */ + default Class getDeptPostLeaderListener() { + return DeptPostLeaderListener.class; + } + + /** + * 获取任务执行人是上级部门领导岗位的任务监听器。 + * 通常会在没有找到领导部门岗位Id的时候,为当前任务指定其他的指派人、候选人或候选组。 + * + * @return 任务监听器。 + */ + default Class getUpDeptPostLeaderListener() { + return UpDeptPostLeaderListener.class; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/util/FlowCustomExtFactory.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/util/FlowCustomExtFactory.java new file mode 100644 index 00000000..3fed4503 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/util/FlowCustomExtFactory.java @@ -0,0 +1,33 @@ +package com.flow.demo.common.flow.util; + +import org.springframework.stereotype.Component; + +/** + * 工作流自定义扩展工厂类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Component +public class FlowCustomExtFactory { + + private BaseFlowDeptPostExtHelper flowDeptPostExtHelper; + + /** + * 获取业务模块自行实现的部门岗位扩展帮助实现类。 + * + * @return 业务模块自行实现的部门岗位扩展帮助实现类。 + */ + public BaseFlowDeptPostExtHelper getFlowDeptPostExtHelper() { + return flowDeptPostExtHelper; + } + + /** + * 注册业务模块自行实现的部门岗位扩展帮助实现类。 + * + * @param helper 业务模块自行实现的部门岗位扩展帮助实现类。 + */ + public void registerFlowDeptPostExtHelper(BaseFlowDeptPostExtHelper helper) { + this.flowDeptPostExtHelper = helper; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/util/FlowOperationHelper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/util/FlowOperationHelper.java new file mode 100644 index 00000000..dc793f5b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/util/FlowOperationHelper.java @@ -0,0 +1,248 @@ +package com.flow.demo.common.flow.util; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.ResponseResult; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.flow.constant.FlowConstant; +import com.flow.demo.common.flow.constant.FlowTaskStatus; +import com.flow.demo.common.flow.dto.FlowWorkOrderDto; +import com.flow.demo.common.flow.model.FlowEntry; +import com.flow.demo.common.flow.model.FlowEntryPublish; +import com.flow.demo.common.flow.model.FlowWorkOrder; +import com.flow.demo.common.flow.model.constant.FlowEntryStatus; +import com.flow.demo.common.flow.service.FlowApiService; +import com.flow.demo.common.flow.service.FlowEntryService; +import com.flow.demo.common.flow.vo.FlowWorkOrderVo; +import com.flow.demo.common.flow.vo.TaskInfoVo; +import lombok.extern.slf4j.Slf4j; +import org.flowable.task.api.Task; +import org.flowable.task.api.TaskInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 工作流操作的通用帮助对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Component +public class FlowOperationHelper { + + @Autowired + private FlowEntryService flowEntryService; + @Autowired + private FlowApiService flowApiService; + + /** + * 验证并获取流程对象。 + * + * @param processDefinitionKey 流程引擎的流程定义标识。 + * @return 流程对象。 + */ + public ResponseResult verifyAndGetFlowEntry(String processDefinitionKey) { + String errorMessage; + FlowEntry flowEntry = flowEntryService.getFlowEntryByProcessDefinitionKey(processDefinitionKey); + if (flowEntry == null) { + errorMessage = "数据验证失败,该流程并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!flowEntry.getStatus().equals(FlowEntryStatus.PUBLISHED)) { + errorMessage = "数据验证失败,该流程尚未发布,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + FlowEntryPublish flowEntryPublish = + flowEntryService.getFlowEntryPublishById(flowEntry.getMainEntryPublishId()); + flowEntry.setMainFlowEntryPublish(flowEntryPublish); + return ResponseResult.success(flowEntry); + } + + /** + * 验证并获取流程的实时任务信息。 + * + * @param task 流程引擎的任务对象。 + * @return 任务信息对象。 + */ + public ResponseResult verifyAndGetRuntimeTaskInfo(Task task) { + String errorMessage; + if (task == null) { + errorMessage = "数据验证失败,指定的任务Id,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!flowApiService.isAssigneeOrCandidate(task)) { + errorMessage = "数据验证失败,当前用户不是指派人也不是候选人之一!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (StrUtil.isBlank(task.getFormKey())) { + errorMessage = "数据验证失败,指定任务的formKey属性不存在,请重新修改流程图!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + TaskInfoVo taskInfo = JSON.parseObject(task.getFormKey(), TaskInfoVo.class); + taskInfo.setTaskKey(task.getTaskDefinitionKey()); + return ResponseResult.success(taskInfo); + } + + /** + * 验证并获取启动任务的对象信息。 + * + * @param flowEntryPublish 流程发布对象。 + * @param checkStarter 是否检查发起用户。 + * @return 第一个可执行的任务信息。 + */ + public ResponseResult verifyAndGetInitialTaskInfo( + FlowEntryPublish flowEntryPublish, boolean checkStarter) { + String errorMessage; + if (StrUtil.isBlank(flowEntryPublish.getInitTaskInfo())) { + errorMessage = "数据验证失败,当前流程发布的数据中,没有包含初始任务信息!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + TaskInfoVo taskInfo = JSON.parseObject(flowEntryPublish.getInitTaskInfo(), TaskInfoVo.class); + if (checkStarter) { + String loginName = TokenData.takeFromRequest().getLoginName(); + if (!StrUtil.equalsAny(taskInfo.getAssignee(), loginName, FlowConstant.START_USER_NAME_VAR)) { + errorMessage = "数据验证失败,该工作流第一个用户任务的指派人并非当前用户,不能执行该操作!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + return ResponseResult.success(taskInfo); + } + + /** + * 判断当前用户是否有当前流程实例的数据上传或下载权限。 + * 如果taskId为空,则验证当前用户是否为当前流程实例的发起人,否则判断是否为当前任务的指派人或候选人。 + * + * @param processInstanceId 流程实例Id。 + * @param taskId 流程任务Id。 + * @return 验证结果。 + */ + public ResponseResult verifyUploadOrDownloadPermission(String processInstanceId, String taskId) { + String errorMessage; + if (StrUtil.isBlank(taskId)) { + if (!flowApiService.isProcessInstanceStarter(processInstanceId)) { + errorMessage = "数据验证失败,当前用户并非指派人或候选人,因此没有权限下载!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + } else { + TaskInfo task = flowApiService.getProcessInstanceActiveTask(processInstanceId, taskId); + if (task == null) { + task = flowApiService.getHistoricTaskInstance(processInstanceId, taskId); + if (task == null) { + errorMessage = "数据验证失败,指定任务Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + } + if (!flowApiService.isAssigneeOrCandidate(task)) { + errorMessage = "数据验证失败,当前用户并非指派人或候选人,因此没有权限下载!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + } + return ResponseResult.success(); + } + + /** + * 根据已有的过滤对象,补充添加缺省过滤条件。如流程标识、创建用户等。 + * + * @param filterDto 工单过滤对象。 + * @param processDefinitionKey 流程标识。 + * @return 创建并转换后的流程工单过滤对象。 + */ + public FlowWorkOrder makeWorkOrderFilter(FlowWorkOrderDto filterDto, String processDefinitionKey) { + FlowWorkOrder filter = MyModelUtil.copyTo(filterDto, FlowWorkOrder.class); + if (filter == null) { + filter = new FlowWorkOrder(); + } + filter.setProcessDefinitionKey(processDefinitionKey); + filter.setCreateUserId(TokenData.takeFromRequest().getUserId()); + return filter; + } + + /** + * 组装工作流工单列表中的流程任务数据。 + * + * @param flowWorkOrderVoList 工作流工单列表。 + */ + public void buildWorkOrderTaskInfo(List flowWorkOrderVoList) { + if (CollUtil.isEmpty(flowWorkOrderVoList)) { + return; + } + Set definitionIdSet = + flowWorkOrderVoList.stream().map(FlowWorkOrderVo::getProcessDefinitionId).collect(Collectors.toSet()); + List flowEntryPublishList = flowEntryService.getFlowEntryPublishList(definitionIdSet); + Map flowEntryPublishMap = + flowEntryPublishList.stream().collect(Collectors.toMap(FlowEntryPublish::getProcessDefinitionId, c -> c)); + for (FlowWorkOrderVo flowWorkOrderVo : flowWorkOrderVoList) { + FlowEntryPublish flowEntryPublish = flowEntryPublishMap.get(flowWorkOrderVo.getProcessDefinitionId()); + flowWorkOrderVo.setInitTaskInfo(flowEntryPublish.getInitTaskInfo()); + } + List unfinishedProcessInstanceIds = flowWorkOrderVoList.stream() + .filter(c -> !c.getFlowStatus().equals(FlowTaskStatus.FINISHED)) + .map(FlowWorkOrderVo::getProcessInstanceId) + .collect(Collectors.toList()); + if (CollUtil.isEmpty(unfinishedProcessInstanceIds)) { + return; + } + List taskList = flowApiService.getTaskListByProcessInstanceIds(unfinishedProcessInstanceIds); + Map> taskMap = + taskList.stream().collect(Collectors.groupingBy(Task::getProcessInstanceId)); + for (FlowWorkOrderVo flowWorkOrderVo : flowWorkOrderVoList) { + List instanceTaskList = taskMap.get(flowWorkOrderVo.getProcessInstanceId()); + if (instanceTaskList == null) { + continue; + } + JSONArray taskArray = new JSONArray(); + for (Task task : instanceTaskList) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("taskId", task.getId()); + jsonObject.put("taskName", task.getName()); + jsonObject.put("taskKey", task.getTaskDefinitionKey()); + jsonObject.put("assignee", task.getAssignee()); + taskArray.add(jsonObject); + } + flowWorkOrderVo.setRuntimeTaskInfoList(taskArray); + } + } + + /** + * 组装工作流工单中的业务数据。 + * + * @param workOrderVoList 工单列表。 + * @param dataList 业务数据列表。 + * @param idGetter 获取业务对象主键字段的返回方法。 + * @param 业务主对象类型。 + * @param 业务主对象的主键字段类型。 + */ + public void buildWorkOrderBusinessData( + List workOrderVoList, List dataList, Function idGetter) { + if (CollUtil.isEmpty(dataList)) { + return; + } + Map dataMap = dataList.stream().collect(Collectors.toMap(idGetter, c -> c)); + K id = idGetter.apply(dataList.get(0)); + for (FlowWorkOrderVo flowWorkOrderVo : workOrderVoList) { + Object dataId = flowWorkOrderVo.getBusinessKey(); + if (id instanceof Long) { + dataId = Long.valueOf(flowWorkOrderVo.getBusinessKey()); + } else if (id instanceof Integer) { + dataId = Integer.valueOf(flowWorkOrderVo.getBusinessKey()); + } + T data = dataMap.get(dataId); + if (data != null) { + flowWorkOrderVo.setMasterData(BeanUtil.beanToMap(data)); + } + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowCategoryVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowCategoryVo.java new file mode 100644 index 00000000..9c36f2bd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowCategoryVo.java @@ -0,0 +1,55 @@ +package com.flow.demo.common.flow.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * 流程分类的Vo对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowCategoryVo { + + /** + * 主键Id。 + */ + private Long categoryId; + + /** + * 显示名称。 + */ + private String name; + + /** + * 分类编码。 + */ + private String code; + + /** + * 实现顺序。 + */ + private Integer showOrder; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 创建者Id。 + */ + private Long createUserId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowEntryPublishVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowEntryPublishVo.java new file mode 100644 index 00000000..7bf65df9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowEntryPublishVo.java @@ -0,0 +1,50 @@ +package com.flow.demo.common.flow.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * 流程发布信息的Vo对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowEntryPublishVo { + + /** + * 主键Id。 + */ + private Long entryPublishId; + + /** + * 发布版本。 + */ + private Integer publishVersion; + + /** + * 流程引擎中的流程定义Id。 + */ + private String processDefinitionId; + + /** + * 激活状态。 + */ + private Boolean activeStatus; + + /** + * 是否为主版本。 + */ + private Boolean mainVersion; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 发布时间。 + */ + private Date publishTime; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowEntryVariableVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowEntryVariableVo.java new file mode 100644 index 00000000..2e33adfc --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowEntryVariableVo.java @@ -0,0 +1,65 @@ +package com.flow.demo.common.flow.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * 流程变量Vo对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowEntryVariableVo { + + /** + * 主键Id。 + */ + private Long variableId; + + /** + * 流程Id。 + */ + private Long entryId; + + /** + * 变量名。 + */ + private String variableName; + + /** + * 显示名。 + */ + private String showName; + + /** + * 变量类型。 + */ + private Integer variableType; + + /** + * 绑定数据源Id。 + */ + private Long bindDatasourceId; + + /** + * 绑定数据源关联Id。 + */ + private Long bindRelationId; + + /** + * 绑定字段Id。 + */ + private Long bindColumnId; + + /** + * 是否内置。 + */ + private Boolean builtin; + + /** + * 创建时间。 + */ + private Date createTime; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowEntryVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowEntryVo.java new file mode 100644 index 00000000..f9f893a6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowEntryVo.java @@ -0,0 +1,112 @@ +package com.flow.demo.common.flow.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 流程的Vo对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowEntryVo { + + /** + * 主键Id。 + */ + private Long entryId; + + /** + * 流程名称。 + */ + private String processDefinitionName; + + /** + * 流程标识Key。 + */ + private String processDefinitionKey; + + /** + * 流程分类。 + */ + private Long categoryId; + + /** + * 工作流部署的发布主版本Id。 + */ + private Long mainEntryPublishId; + + /** + * 最新发布时间。 + */ + private Date lastestPublishTime; + + /** + * 流程状态。 + */ + private Integer status; + + /** + * 流程定义的xml。 + */ + private String bpmnXml; + + /** + * 绑定表单类型。 + */ + private Integer bindFormType; + + /** + * 在线表单的页面Id。 + */ + private Long pageId; + + /** + * 在线表单Id。 + */ + private Long defaultFormId; + + /** + * 在线表单的缺省路由名称。 + */ + private String defaultRouterName; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * categoryId 的一对一关联数据对象,数据对应类型为FlowCategoryVo。 + */ + private Map flowCategory; + + /** + * mainEntryPublishId 的一对一关联数据对象,数据对应类型为FlowEntryPublishVo。 + */ + private Map mainFlowEntryPublish; + + /** + * 关联的在线表单列表。 + */ + private List> formList; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowTaskCommentVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowTaskCommentVo.java new file mode 100644 index 00000000..d73f0fb5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowTaskCommentVo.java @@ -0,0 +1,70 @@ +package com.flow.demo.common.flow.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * FlowTaskCommentVO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowTaskCommentVo { + + /** + * 主键Id。 + */ + private Long id; + + /** + * 流程实例Id。 + */ + private String processInstanceId; + + /** + * 任务Id。 + */ + private String taskId; + + /** + * 任务标识。 + */ + private String taskKey; + + /** + * 任务名称。 + */ + private String taskName; + + /** + * 审批类型。 + */ + private String approvalType; + + /** + * 批注内容。 + */ + private String comment; + + /** + * 委托指定人,比如加签、转办等。 + */ + private String delegateAssginee; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * 创建者显示名。 + */ + private String createUsername; + + /** + * 创建时间。 + */ + private Date createTime; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowTaskVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowTaskVo.java new file mode 100644 index 00000000..9818892f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowTaskVo.java @@ -0,0 +1,75 @@ +package com.flow.demo.common.flow.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * 流程任务Vo对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowTaskVo { + + /** + * 流程任务Id。 + */ + private String taskId; + + /** + * 流程任务名称。 + */ + private String taskName; + + /** + * 流程任务标识。 + */ + private String taskKey; + + /** + * 任务的表单信息。 + */ + private String taskFormKey; + + /** + * 流程Id。 + */ + private Long entryId; + + /** + * 流程定义Id。 + */ + private String processDefinitionId; + + /** + * 流程定义名称。 + */ + private String processDefinitionName; + + /** + * 流程定义标识。 + */ + private String processDefinitionKey; + + /** + * 流程定义版本。 + */ + private Integer processDefinitionVersion; + + /** + * 流程实例Id。 + */ + private String processInstanceId; + + /** + * 流程实例发起人。 + */ + private String processInstanceInitiator; + + /** + * 流程实例创建时间。 + */ + private Date processInstanceStartTime; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowWorkOrderVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowWorkOrderVo.java new file mode 100644 index 00000000..6d213db5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/FlowWorkOrderVo.java @@ -0,0 +1,108 @@ +package com.flow.demo.common.flow.vo; + +import com.alibaba.fastjson.JSONArray; +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * 工作流工单VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class FlowWorkOrderVo { + + /** + * 主键Id。 + */ + private Long workOrderId; + + /** + * 流程定义标识。 + */ + private String processDefinitionKey; + + /** + * 流程名称。 + */ + private String processDefinitionName; + + /** + * 流程引擎的定义Id。 + */ + private String processDefinitionId; + + /** + * 流程实例Id。 + */ + private String processInstanceId; + + /** + * 在线表单的主表Id。 + */ + private Long onlineTableId; + + /** + * 业务主键值。 + */ + private String businessKey; + + /** + * 流程状态。 + */ + private Integer flowStatus; + + /** + * 提交用户登录名称。 + */ + private String submitUsername; + + /** + * 提交用户所在部门Id。 + */ + private Long deptId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 更新者Id。 + */ + private Long updateUserId; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 创建者Id。 + */ + private Long createUserId; + + /** + * flowStatus 常量字典关联数据。 + */ + private Map flowStatusDictMap; + + /** + * FlowEntryPublish对象中的同名字段。 + */ + private String initTaskInfo; + + /** + * 当前实例的运行时任务列表。 + * 正常情况下只有一个,在并行网关下可能存在多个。 + */ + private JSONArray runtimeTaskInfoList; + + /** + * 业务主表数据。 + */ + private Map masterData; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/TaskInfoVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/TaskInfoVo.java new file mode 100644 index 00000000..585ff88e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/java/com/flow/demo/common/flow/vo/TaskInfoVo.java @@ -0,0 +1,67 @@ +package com.flow.demo.common.flow.vo; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +import java.util.List; + +/** + * 流程任务信息Vo对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class TaskInfoVo { + + /** + * 流程节点任务类型。具体值可参考FlowTaskType常量值。 + */ + private Integer taskType; + + /** + * 指定人。 + */ + private String assignee; + + /** + * 任务标识。 + */ + private String taskKey; + + /** + * 是否分配给当前登录用户的标记。 + * 当该值为true时,登录用户启动流程时,就自动完成了第一个用户任务。 + */ + private Boolean assignedMe; + + /** + * 动态表单Id。 + */ + private Long formId; + + /** + * 静态表单路由。 + */ + private String routerName; + + /** + * 候选组类型。 + */ + private String groupType; + + /** + * 只读标记。 + */ + private Boolean readOnly; + + /** + * 前端所需的操作列表。 + */ + List operationList; + + /** + * 任务节点的自定义变量列表。 + */ + List variableList; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/resources/META-INF/spring.factories b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..b6a8bca9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-flow/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.flow.demo.common.flow.config.FlowAutoConfig \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/pom.xml new file mode 100644 index 00000000..f942612c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/pom.xml @@ -0,0 +1,43 @@ + + + + common + com.flow.demo + 1.0.0 + + 4.0.0 + + common-log + 1.0.0 + common-log + jar + + + + com.flow.demo + common-sequence + 1.0.0 + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/annotation/OperationLog.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/annotation/OperationLog.java new file mode 100644 index 00000000..7be072a4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/annotation/OperationLog.java @@ -0,0 +1,33 @@ +package com.flow.demo.common.log.annotation; + +import com.flow.demo.common.log.model.constant.SysOperationLogType; + +import java.lang.annotation.*; + +/** + * 操作日志记录注解。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface OperationLog { + + /** + * 描述。 + */ + String description() default ""; + + /** + * 操作类型。 + */ + int type() default SysOperationLogType.OTHER; + + /** + * 是否保存应答结果。 + * 对于类似导出和文件下载之类的接口,该参与应该设置为false。 + */ + boolean saveResponse() default true; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/aop/OperationLogAspect.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/aop/OperationLogAspect.java new file mode 100644 index 00000000..32b2d492 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/aop/OperationLogAspect.java @@ -0,0 +1,251 @@ +package com.flow.demo.common.log.aop; + +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.constant.ApplicationConstant; +import com.flow.demo.common.core.object.ResponseResult; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.core.util.ContextUtil; +import com.flow.demo.common.core.util.IpUtil; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.log.annotation.OperationLog; +import com.flow.demo.common.log.config.OperationLogProperties; +import com.flow.demo.common.log.model.SysOperationLog; +import com.flow.demo.common.log.model.constant.SysOperationLogType; +import com.flow.demo.common.log.service.SysOperationLogService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.*; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.util.*; + +/** + * 操作日志记录处理AOP对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Aspect +@Component +@Order(1) +@Slf4j +public class OperationLogAspect { + + @Value("${spring.application.name}") + private String serviceName; + @Autowired + private SysOperationLogService operationLogService; + @Autowired + private OperationLogProperties properties; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 错误信息、请求参数和应答结果字符串的最大长度。 + */ + private final static int MAX_LENGTH = 2000; + + /** + * 所有controller方法。 + */ + @Pointcut("execution(public * com.flow.demo..controller..*(..))") + public void operationLogPointCut() { + // 空注释,避免sonar警告 + } + + @Around("operationLogPointCut()") + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + // 计时。 + long start = System.currentTimeMillis(); + HttpServletRequest request = ContextUtil.getHttpRequest(); + HttpServletResponse response = ContextUtil.getHttpResponse(); + String traceId = this.getTraceId(request); + request.setAttribute(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + // 将流水号通过应答头返回给前端,便于问题精确定位。 + response.setHeader(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + MDC.put(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + TokenData tokenData = TokenData.takeFromRequest(); + // 为log4j2日志设定变量,使日志可以输出更多有价值的信息。 + if (tokenData != null) { + MDC.put("sessionId", tokenData.getSessionId()); + MDC.put("userId", tokenData.getUserId().toString()); + } + String[] parameterNames = this.getParameterNames(joinPoint); + Object[] args = joinPoint.getArgs(); + JSONObject jsonArgs = new JSONObject(); + for (int i = 0; i < args.length; i++) { + Object arg = args[i]; + if (this.isNormalArgs(arg)) { + String parameterName = parameterNames[i]; + jsonArgs.put(parameterName, arg); + } + } + String params = jsonArgs.toJSONString(); + SysOperationLog operationLog = null; + OperationLog operationLogAnnotation = null; + boolean saveOperationLog = properties.isEnabled(); + if (saveOperationLog) { + operationLogAnnotation = getOperationLogAnnotation(joinPoint); + saveOperationLog = (operationLogAnnotation != null); + } + if (saveOperationLog) { + operationLog = this.buildSysOperationLog(operationLogAnnotation, joinPoint, params, traceId, tokenData); + } + Object result; + log.info("开始请求,url={}, reqData={}", request.getRequestURI(), params); + try { + // 调用原来的方法 + result = joinPoint.proceed(); + String respData = result == null ? "null" : JSON.toJSONString(result); + Long elapse = System.currentTimeMillis() - start; + if (saveOperationLog) { + this.operationLogPostProcess(operationLogAnnotation, respData, operationLog, result); + } + log.info("请求完成, url={},elapse={}ms, respData={}", request.getRequestURI(), elapse, respData); + } catch (Exception e) { + if (saveOperationLog) { + operationLog.setSuccess(false); + operationLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, MAX_LENGTH)); + } + log.error("请求报错,url={}, reqData={}, error={}", request.getRequestURI(), params, e.getMessage()); + throw e; + } finally { + if (saveOperationLog) { + operationLog.setElapse(System.currentTimeMillis() - start); + operationLogService.saveNewAsync(operationLog); + } + } + return result; + } + + private SysOperationLog buildSysOperationLog( + OperationLog operationLogAnnotation, + ProceedingJoinPoint joinPoint, + String params, + String traceId, + TokenData tokenData) { + HttpServletRequest request = ContextUtil.getHttpRequest(); + SysOperationLog operationLog = new SysOperationLog(); + operationLog.setLogId(idGenerator.nextLongId()); + operationLog.setTraceId(traceId); + operationLog.setDescription(operationLogAnnotation.description()); + operationLog.setOperationType(operationLogAnnotation.type()); + operationLog.setServiceName(this.serviceName); + operationLog.setApiClass(joinPoint.getTarget().getClass().getName()); + operationLog.setApiMethod(operationLog.getApiClass() + "." + joinPoint.getSignature().getName()); + operationLog.setRequestMethod(request.getMethod()); + operationLog.setRequestUrl(request.getRequestURI()); + if (tokenData != null) { + operationLog.setRequestIp(tokenData.getLoginIp()); + } else { + operationLog.setRequestIp(IpUtil.getRemoteIpAddress(request)); + } + operationLog.setOperationTime(new Date()); + if (params != null) { + if (params.length() <= MAX_LENGTH) { + operationLog.setRequestArguments(params); + } else { + operationLog.setRequestArguments(StringUtils.substring(params, 0, MAX_LENGTH)); + } + } + if (tokenData != null) { + // 对于非多租户系统,该值为空可以忽略。 + operationLog.setTenantId(tokenData.getTenantId()); + operationLog.setSessionId(tokenData.getSessionId()); + operationLog.setOperatorId(tokenData.getUserId()); + operationLog.setOperatorName(tokenData.getLoginName()); + } + return operationLog; + } + + private void operationLogPostProcess( + OperationLog operationLogAnnotation, String respData, SysOperationLog operationLog, Object result) { + if (operationLogAnnotation.saveResponse()) { + if (respData.length() <= MAX_LENGTH) { + operationLog.setResponseResult(respData); + } else { + operationLog.setResponseResult(StringUtils.substring(respData, 0, MAX_LENGTH)); + } + } + // 处理大部分返回ResponseResult的接口。 + if (!(result instanceof ResponseResult)) { + if (ContextUtil.hasRequestContext()) { + operationLog.setSuccess(ContextUtil.getHttpResponse().getStatus() == HttpServletResponse.SC_OK); + } + return; + } + ResponseResult responseResult = (ResponseResult) result; + operationLog.setSuccess(responseResult.isSuccess()); + if (!responseResult.isSuccess()) { + operationLog.setErrorMsg(responseResult.getErrorMessage()); + } + if (operationLog.getOperationType().equals(SysOperationLogType.LOGIN)) { + // 对于登录操作,由于在调用登录方法之前,没有可用的TokenData。 + // 因此如果登录成功,可再次通过TokenData.takeFromRequest()获取TokenData。 + if (operationLog.getSuccess()) { + // 这里为了保证LoginController.doLogin方法,一定将TokenData存入Request.Attribute之中, + // 我们将不做空值判断,一旦出错,开发者可在调试时立刻发现异常,并根据这里的注释进行修复。 + TokenData tokenData = TokenData.takeFromRequest(); + // 对于非多租户系统,为了保证代码一致性,仍可保留对tenantId的赋值代码。 + operationLog.setTenantId(tokenData.getTenantId()); + operationLog.setSessionId(tokenData.getSessionId()); + operationLog.setOperatorId(tokenData.getUserId()); + operationLog.setOperatorName(tokenData.getLoginName()); + } else { + HttpServletRequest request = ContextUtil.getHttpRequest(); + // 登录操作需要特殊处理,无论是登录成功还是失败,都要记录operator_name字段。 + operationLog.setOperatorName(request.getParameter("loginName")); + } + } + } + + private String[] getParameterNames(ProceedingJoinPoint joinPoint) { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + return methodSignature.getParameterNames(); + } + + private OperationLog getOperationLogAnnotation(JoinPoint joinPoint) throws Exception { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + return method.getAnnotation(OperationLog.class); + } + + private String getTraceId(HttpServletRequest request) { + // 获取请求流水号。 + // 对于微服务系统,为了保证traceId在全调用链的唯一性,因此在网关的过滤器中创建了该值。 + String traceId = request.getHeader(ApplicationConstant.HTTP_HEADER_TRACE_ID); + if (StringUtils.isBlank(traceId)) { + traceId = MyCommonUtil.generateUuid(); + } + return traceId; + } + + private boolean isNormalArgs(Object o) { + if (o instanceof List) { + List list = (List) o; + if (CollUtil.isNotEmpty(list)) { + return !(list.get(0) instanceof MultipartFile); + } + } + return !(o instanceof HttpServletRequest) + && !(o instanceof HttpServletResponse) + && !(o instanceof MultipartFile); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/config/CommonLogAutoConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/config/CommonLogAutoConfig.java new file mode 100644 index 00000000..ca0eab7f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/config/CommonLogAutoConfig.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.log.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-log模块的自动配置引导类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EnableConfigurationProperties({OperationLogProperties.class}) +public class CommonLogAutoConfig { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/config/OperationLogProperties.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/config/OperationLogProperties.java new file mode 100644 index 00000000..f7c08276 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/config/OperationLogProperties.java @@ -0,0 +1,20 @@ +package com.flow.demo.common.log.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 操作日志的配置类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ConfigurationProperties(prefix = "common-log.operation-log") +public class OperationLogProperties { + + /** + * 是否采集操作日志。 + */ + private boolean enabled = true; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/dao/SysOperationLogMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/dao/SysOperationLogMapper.java new file mode 100644 index 00000000..ab3a0ac2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/dao/SysOperationLogMapper.java @@ -0,0 +1,34 @@ +package com.flow.demo.common.log.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.log.model.SysOperationLog; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 系统操作日志对应的数据访问对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysOperationLogMapper extends BaseDaoMapper { + + /** + * 批量插入。 + * + * @param operationLogList 操作日志列表。 + */ + void insertList(List operationLogList); + + /** + * 根据过滤条件和排序规则,查询操作日志。 + * + * @param sysOperationLogFilter 操作日志的过滤对象。 + * @param orderBy 排序规则。 + * @return 查询列表。 + */ + List getSysOperationLogList( + @Param("sysOperationLogFilter") SysOperationLog sysOperationLogFilter, + @Param("orderBy") String orderBy); +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/dao/mapper/SysOperationLogMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/dao/mapper/SysOperationLogMapper.xml new file mode 100644 index 00000000..3ed7752d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/dao/mapper/SysOperationLogMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_sys_operation_log.operation_type = #{sysOperationLogFilter.operationType} + + + + AND zz_sys_operation_log.request_url LIKE #{safeRequestUrl} + + + AND zz_sys_operation_log.trace_id = #{sysOperationLogFilter.traceId} + + + AND zz_sys_operation_log.success = #{sysOperationLogFilter.success} + + + + AND zz_sys_operation_log.operator_name LIKE #{safeOperatorName} + + + AND zz_sys_operation_log.elapse >= #{sysOperationLogFilter.elapseMin} + + + AND zz_sys_operation_log.elapse <= #{sysOperationLogFilter.elapseMax} + + + AND zz_sys_operation_log.operation_time >= #{sysOperationLogFilter.operationTimeStart} + + + AND zz_sys_operation_log.operation_time <= #{sysOperationLogFilter.operationTimeEnd} + + + + + + INSERT INTO zz_sys_operation_log VALUES + + ( + #{item.logId}, + #{item.description}, + #{item.operationType}, + #{item.serviceName}, + #{item.apiClass}, + #{item.apiMethod}, + #{item.sessionId}, + #{item.traceId}, + #{item.elapse}, + #{item.requestMethod}, + #{item.requestUrl}, + #{item.requestArguments}, + #{item.responseResult}, + #{item.requestIp}, + #{item.success}, + #{item.errorMsg}, + #{item.tenantId}, + #{item.operatorId}, + #{item.operatorName}, + #{item.operationTime} + ) + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/model/SysOperationLog.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/model/SysOperationLog.java new file mode 100644 index 00000000..bf382eca --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/model/SysOperationLog.java @@ -0,0 +1,170 @@ +package com.flow.demo.common.log.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.TenantFilterColumn; +import lombok.Data; + +import java.util.Date; + +/** + * 操作日志记录表 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName("zz_sys_operation_log") +public class SysOperationLog { + + /** + * 主键Id。 + */ + @TableId(value = "log_id") + private Long logId; + + /** + * 日志描述。 + */ + @TableField(value = "description") + private String description; + + /** + * 操作类型。 + * 常量值定义可参考SysOperationLogType对象。 + */ + @TableField(value = "operation_type") + private Integer operationType; + + /** + * 接口所在服务名称。 + * 通常为spring.application.name配置项的值。 + */ + @TableField(value = "service_name") + private String serviceName; + + /** + * 调用的controller全类名。 + * 之所以为独立字段,是为了便于查询和统计接口的调用频度。 + */ + @TableField(value = "api_class") + private String apiClass; + + /** + * 调用的controller中的方法。 + * 格式为:接口类名 + "." + 方法名。 + */ + @TableField(value = "api_method") + private String apiMethod; + + /** + * 用户会话sessionId。 + * 主要是为了便于统计,以及跟踪查询定位问题。 + */ + @TableField(value = "session_id") + private String sessionId; + + /** + * 每次请求的Id。 + * 对于微服务之间的调用,在同一个请求的调用链中,该值是相同的。 + */ + @TableField(value = "trace_id") + private String traceId; + + /** + * 调用时长。 + */ + @TableField(value = "elapse") + private Long elapse; + + /** + * HTTP 请求方法,如GET。 + */ + @TableField(value = "request_method") + private String requestMethod; + + /** + * HTTP 请求地址。 + */ + @TableField(value = "request_url") + private String requestUrl; + + /** + * controller接口参数。 + */ + @TableField(value = "request_arguments") + private String requestArguments; + + /** + * controller应答结果。 + */ + @TableField(value = "response_result") + private String responseResult; + + /** + * 请求IP。 + */ + @TableField(value = "request_ip") + private String requestIp; + + /** + * 应答状态。 + */ + @TableField(value = "success") + private Boolean success; + + /** + * 错误信息。 + */ + @TableField(value = "error_msg") + private String errorMsg; + + /** + * 租户Id。 + * 仅用于多租户系统,是便于进行对租户的操作查询和统计分析。 + */ + @TenantFilterColumn + @TableField(value = "tenant_id") + private Long tenantId; + + /** + * 操作员Id。 + */ + @TableField(value = "operator_id") + private Long operatorId; + + /** + * 操作员名称。 + */ + @TableField(value = "operator_name") + private String operatorName; + + /** + * 操作时间。 + */ + @TableField(value = "operation_time") + private Date operationTime; + + /** + * 调用时长最小值。 + */ + @TableField(exist = false) + private Long elapseMin; + + /** + * 调用时长最大值。 + */ + @TableField(exist = false) + private Long elapseMax; + + /** + * 操作开始时间。 + */ + @TableField(exist = false) + private String operationTimeStart; + + /** + * 操作结束时间。 + */ + @TableField(exist = false) + private String operationTimeEnd; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/model/constant/SysOperationLogType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/model/constant/SysOperationLogType.java new file mode 100644 index 00000000..1fdc5a04 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/model/constant/SysOperationLogType.java @@ -0,0 +1,149 @@ +package com.flow.demo.common.log.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 操作日志类型常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class SysOperationLogType { + + /** + * 其他。 + */ + public static final int OTHER = -1; + /** + * 登录。 + */ + public static final int LOGIN = 0; + /** + * 登出。 + */ + public static final int LOGOUT = 5; + /** + * 新增。 + */ + public static final int ADD = 10; + /** + * 修改。 + */ + public static final int UPDATE = 15; + /** + * 删除。 + */ + public static final int DELETE = 20; + /** + * 新增多对多关联。 + */ + public static final int ADD_M2M = 25; + /** + * 移除多对多关联。 + */ + public static final int DELETE_M2M = 30; + /** + * 查询。 + */ + public static final int LIST = 35; + /** + * 分组查询。 + */ + public static final int LIST_WITH_GROUP = 40; + /** + * 导出。 + */ + public static final int EXPORT = 45; + /** + * 上传。 + */ + public static final int UPLOAD = 50; + /** + * 下载。 + */ + public static final int DOWNLOAD = 55; + /** + * 重置缓存。 + */ + public static final int RELOAD_CACHE = 60; + /** + * 发布。 + */ + public static final int PUBLISH = 65; + /** + * 取消发布。 + */ + public static final int UNPUBLISH = 70; + /** + * 暂停。 + */ + public static final int SUSPEND = 75; + /** + * 恢复。 + */ + public static final int RESUME = 80; + /** + * 启动流程。 + */ + public static final int START_PROCESS = 100; + /** + * 停止流程。 + */ + public static final int STOP_PROCESS = 105; + /** + * 删除流程。 + */ + public static final int DELETE_PROCESS = 110; + /** + * 取消流程。 + */ + public static final int CANCEL_PROCESS = 115; + /** + * 提交任务。 + */ + public static final int SUBMIT_TASK = 120; + + private static final Map DICT_MAP = new HashMap<>(15); + static { + DICT_MAP.put(OTHER, "其他"); + DICT_MAP.put(LOGIN, "登录"); + DICT_MAP.put(LOGOUT, "登出"); + DICT_MAP.put(ADD, "新增"); + DICT_MAP.put(UPDATE, "修改"); + DICT_MAP.put(DELETE, "删除"); + DICT_MAP.put(ADD_M2M, "新增多对多关联"); + DICT_MAP.put(DELETE_M2M, "移除多对多关联"); + DICT_MAP.put(LIST, "查询"); + DICT_MAP.put(LIST_WITH_GROUP, "分组查询"); + DICT_MAP.put(EXPORT, "导出"); + DICT_MAP.put(UPLOAD, "上传"); + DICT_MAP.put(DOWNLOAD, "下载"); + DICT_MAP.put(RELOAD_CACHE, "重置缓存"); + DICT_MAP.put(PUBLISH, "发布"); + DICT_MAP.put(UNPUBLISH, "取消发布"); + DICT_MAP.put(SUSPEND, "暂停"); + DICT_MAP.put(RESUME, "恢复"); + DICT_MAP.put(START_PROCESS, "启动流程"); + DICT_MAP.put(STOP_PROCESS, "停止流程"); + DICT_MAP.put(DELETE_PROCESS, "删除流程"); + DICT_MAP.put(CANCEL_PROCESS, "取消流程"); + DICT_MAP.put(SUBMIT_TASK, "提交任务"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysOperationLogType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/service/SysOperationLogService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/service/SysOperationLogService.java new file mode 100644 index 00000000..77edbcc6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/service/SysOperationLogService.java @@ -0,0 +1,45 @@ +package com.flow.demo.common.log.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.log.model.SysOperationLog; + +import java.util.List; + +/** + * 操作日志服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface SysOperationLogService extends IBaseService { + + /** + * 异步的插入一条新操作日志。 + * + * @param operationLog 操作日志对象。 + */ + void saveNewAsync(SysOperationLog operationLog); + + /** + * 插入一条新操作日志。 + * + * @param operationLog 操作日志对象。 + */ + void saveNew(SysOperationLog operationLog); + + /** + * 批量插入。 + * + * @param sysOperationLogList 操作日志列表。 + */ + void batchSave(List sysOperationLogList); + + /** + * 根据过滤条件和排序规则,查询操作日志。 + * + * @param filter 操作日志的过滤对象。 + * @param orderBy 排序规则。 + * @return 查询列表。 + */ + List getSysOperationLogList(SysOperationLog filter, String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/service/impl/SysOperationLogServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/service/impl/SysOperationLogServiceImpl.java new file mode 100644 index 00000000..0f39a673 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/java/com/flow/demo/common/log/service/impl/SysOperationLogServiceImpl.java @@ -0,0 +1,84 @@ +package com.flow.demo.common.log.service.impl; + +import com.flow.demo.common.core.annotation.MyDataSource; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.constant.ApplicationConstant; +import com.flow.demo.common.log.dao.SysOperationLogMapper; +import com.flow.demo.common.log.model.SysOperationLog; +import com.flow.demo.common.log.service.SysOperationLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 操作日志服务实现类。 + * 这里需要重点解释下MyDataSource注解。在单数据源服务中,由于没有DataSourceAspect的切面类,所以该注解不会 + * 有任何作用和影响。然而在多数据源情况下,由于每个服务都有自己的DataSourceType常量对象,表示不同的数据源。 + * 而common-log在公用模块中,不能去依赖业务服务,因此这里给出了一个固定值。我们在业务的DataSourceType中,也要 + * 使用该值ApplicationConstant.OPERATION_LOG_DATASOURCE_TYPE,去关联操作日志所需的数据源配置。 + * + * @author Jerry + * @date 2021-06-06 + */ +@MyDataSource(ApplicationConstant.OPERATION_LOG_DATASOURCE_TYPE) +@Service +public class SysOperationLogServiceImpl extends BaseService implements SysOperationLogService { + + @Autowired + private SysOperationLogMapper sysOperationLogMapper; + + @Override + protected BaseDaoMapper mapper() { + return sysOperationLogMapper; + } + + /** + * 异步插入一条新操作日志。通常用于在橙单中创建的单体工程服务。 + * + * @param operationLog 操作日志对象。 + */ + @Async + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewAsync(SysOperationLog operationLog) { + sysOperationLogMapper.insert(operationLog); + } + + /** + * 插入一条新操作日志。 + * + * @param operationLog 操作日志对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNew(SysOperationLog operationLog) { + sysOperationLogMapper.insert(operationLog); + } + + /** + * 批量插入。通常用于在橙单中创建的微服务工程服务。 + * + * @param sysOperationLogList 操作日志列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void batchSave(List sysOperationLogList) { + sysOperationLogMapper.insertList(sysOperationLogList); + } + + /** + * 根据过滤条件和排序规则,查询操作日志。 + * + * @param filter 操作日志的过滤对象。 + * @param orderBy 排序规则。 + * @return 查询列表。 + */ + @Override + public List getSysOperationLogList(SysOperationLog filter, String orderBy) { + return sysOperationLogMapper.getSysOperationLogList(filter, orderBy); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/resources/META-INF/spring.factories b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..f8856ec0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-log/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.flow.demo.common.log.config.CommonLogAutoConfig \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/pom.xml new file mode 100644 index 00000000..f79838d1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/pom.xml @@ -0,0 +1,43 @@ + + + + common + com.flow.demo + 1.0.0 + + 4.0.0 + + common-online-api + 1.0.0 + common-online-api + jar + + + + com.flow.demo + common-online + 1.0.0 + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/config/OnlineApiAutoConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/config/OnlineApiAutoConfig.java new file mode 100644 index 00000000..b4d2e47f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/config/OnlineApiAutoConfig.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.online.api.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-online-api模块的自动配置引导类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EnableConfigurationProperties({OnlineApiProperties.class}) +public class OnlineApiAutoConfig { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/config/OnlineApiProperties.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/config/OnlineApiProperties.java new file mode 100644 index 00000000..e39b804b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/config/OnlineApiProperties.java @@ -0,0 +1,32 @@ +package com.flow.demo.common.online.api.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.List; + +/** + * 在线表单API的配置对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ConfigurationProperties(prefix = "common-online-api") +public class OnlineApiProperties { + + /** + * 在线表单的URL前缀。 + */ + private String urlPrefix; + + /** + * 在线表单查看权限的URL列表。 + */ + private List viewUrlList; + + /** + * 在线表单编辑权限的URL列表。 + */ + private List editUrlList; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineColumnController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineColumnController.java new file mode 100644 index 00000000..c946cab6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineColumnController.java @@ -0,0 +1,400 @@ +package com.flow.demo.common.online.api.controller; + +import cn.hutool.core.collection.CollUtil; +import cn.jimmyshi.beanquery.BeanQuery; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.dto.OnlineColumnDto; +import com.flow.demo.common.online.dto.OnlineColumnRuleDto; +import com.flow.demo.common.online.dto.OnlineRuleDto; +import com.flow.demo.common.online.model.*; +import com.flow.demo.common.online.object.SqlTableColumn; +import com.flow.demo.common.online.service.*; +import com.flow.demo.common.online.vo.OnlineColumnRuleVo; +import com.flow.demo.common.online.vo.OnlineColumnVo; +import com.flow.demo.common.online.vo.OnlineRuleVo; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 字段数据操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlineColumn") +public class OnlineColumnController { + + @Autowired + private OnlineColumnService onlineColumnService; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private OnlineVirtualColumnService onlineVirtualColumnService; + @Autowired + private OnlineDblinkService onlineDblinkService; + @Autowired + private OnlineRuleService onlineRuleService; + + /** + * 根据数据库表字段信息,在指定在线表中添加在线表字段对象。 + * + * @param dblinkId 数据库链接Id。 + * @param tableName 数据库表名称。 + * @param columnName 数据库表字段名。 + * @param tableId 目的表Id。 + * @return 应答结果对象。 + */ + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody Long dblinkId, + @MyRequestBody String tableName, + @MyRequestBody String columnName, + @MyRequestBody Long tableId) { + OnlineDblink dblink = onlineDblinkService.getById(dblinkId); + if (dblink == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + String errorMsg; + SqlTableColumn sqlTableColumn = onlineDblinkService.getDblinkTableColumn(dblink, tableName, columnName); + if (sqlTableColumn == null) { + errorMsg = "数据验证失败,指定的数据表字段不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMsg); + } + if (!onlineTableService.existId(tableId)) { + errorMsg = "数据验证失败,指定的数据表Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMsg); + } + onlineColumnService.saveNewList(CollUtil.newLinkedList(sqlTableColumn), tableId); + return ResponseResult.success(); + } + + /** + * 更新字段数据数据。 + * + * @param onlineColumnDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody OnlineColumnDto onlineColumnDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineColumnDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineColumn onlineColumn = MyModelUtil.copyTo(onlineColumnDto, OnlineColumn.class); + OnlineColumn originalOnlineColumn = onlineColumnService.getById(onlineColumn.getColumnId()); + if (originalOnlineColumn == null) { + errorMessage = "数据验证失败,当前在线表字段并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + // 验证关联Id的数据合法性 + CallResult callResult = onlineColumnService.verifyRelatedData(onlineColumn, originalOnlineColumn); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!onlineColumnService.update(onlineColumn, originalOnlineColumn)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除字段数据数据。 + * + * @param columnId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long columnId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(columnId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + OnlineColumn originalOnlineColumn = onlineColumnService.getById(columnId); + if (originalOnlineColumn == null) { + errorMessage = "数据验证失败,当前在线表字段并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + OnlineVirtualColumn virtualColumnFilter = new OnlineVirtualColumn(); + virtualColumnFilter.setAggregationColumnId(columnId); + List virtualColumnList = + onlineVirtualColumnService.getOnlineVirtualColumnList(virtualColumnFilter, null); + if (CollUtil.isNotEmpty(virtualColumnList)) { + OnlineVirtualColumn virtualColumn = virtualColumnList.get(0); + errorMessage = "数据验证失败,数据源关联正在被虚拟字段 [" + virtualColumn.getColumnPrompt() + "] 使用,不能被删除!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineColumnService.remove(originalOnlineColumn.getTableId(), columnId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的字段数据列表。 + * + * @param onlineColumnDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlineColumnDto onlineColumnDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineColumn onlineColumnFilter = MyModelUtil.copyTo(onlineColumnDtoFilter, OnlineColumn.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineColumn.class); + List onlineColumnList = + onlineColumnService.getOnlineColumnListWithRelation(onlineColumnFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineColumnList, OnlineColumn.INSTANCE)); + } + + /** + * 查看指定字段数据对象详情。 + * + * @param columnId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long columnId) { + if (MyCommonUtil.existBlankArgument(columnId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineColumn onlineColumn = onlineColumnService.getByIdWithRelation(columnId, MyRelationParam.full()); + if (onlineColumn == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineColumnVo onlineColumnVo = OnlineColumn.INSTANCE.fromModel(onlineColumn); + return ResponseResult.success(onlineColumnVo); + } + + /** + * 将数据库中的表字段信息刷新到已经导入的在线表字段信息。 + * + * @param dblinkId 数据库链接Id。 + * @param tableName 数据库表名称。 + * @param columnName 数据库表字段名。 + * @param columnId 被刷新的在线字段Id。 + * @return 应答结果对象。 + */ + @PostMapping("/refresh") + public ResponseResult refresh( + @MyRequestBody Long dblinkId, + @MyRequestBody String tableName, + @MyRequestBody String columnName, + @MyRequestBody Long columnId) { + OnlineDblink dblink = onlineDblinkService.getById(dblinkId); + if (dblink == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + String errorMsg; + SqlTableColumn sqlTableColumn = onlineDblinkService.getDblinkTableColumn(dblink, tableName, columnName); + if (sqlTableColumn == null) { + errorMsg = "数据验证失败,指定的数据表字段不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMsg); + } + OnlineColumn onlineColumn = onlineColumnService.getById(columnId); + if (onlineColumn == null) { + errorMsg = "数据验证失败,指定的在线表字段Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMsg); + } + onlineColumnService.refresh(sqlTableColumn, onlineColumn); + return ResponseResult.success(); + } + + /** + * 列出不与指定字段数据存在多对多关系的 [验证规则] 列表数据。通常用于查看添加新 [验证规则] 对象的候选列表。 + * + * @param columnId 主表关联字段。 + * @param onlineRuleDtoFilter [验证规则] 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,返回符合条件的数据列表。 + */ + @PostMapping("/listNotInOnlineColumnRule") + public ResponseResult> listNotInOnlineColumnRule( + @MyRequestBody Long columnId, + @MyRequestBody OnlineRuleDto onlineRuleDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doOnlineColumnRuleVerify(columnId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineRule filter = MyModelUtil.copyTo(onlineRuleDtoFilter, OnlineRule.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineRule.class); + List onlineRuleList = + onlineRuleService.getNotInOnlineRuleListByColumnId(columnId, filter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineRuleList, OnlineRule.INSTANCE)); + } + + /** + * 列出与指定字段数据存在多对多关系的 [验证规则] 列表数据。 + * + * @param columnId 主表关联字段。 + * @param onlineRuleDtoFilter [验证规则] 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,返回符合条件的数据列表。 + */ + @PostMapping("/listOnlineColumnRule") + public ResponseResult> listOnlineColumnRule( + @MyRequestBody Long columnId, + @MyRequestBody OnlineRuleDto onlineRuleDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doOnlineColumnRuleVerify(columnId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineRule filter = MyModelUtil.copyTo(onlineRuleDtoFilter, OnlineRule.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineRule.class); + List onlineRuleList = + onlineRuleService.getOnlineRuleListByColumnId(columnId, filter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineRuleList, OnlineRule.INSTANCE)); + } + + private ResponseResult doOnlineColumnRuleVerify(Long columnId) { + if (MyCommonUtil.existBlankArgument(columnId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!onlineColumnService.existId(columnId)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + return ResponseResult.success(); + } + + /** + * 批量添加字段数据和 [验证规则] 对象的多对多关联关系数据。 + * + * @param columnId 主表主键Id。 + * @param onlineColumnRuleDtoList 关联对象列表。 + * @return 应答结果对象。 + */ + @PostMapping("/addOnlineColumnRule") + public ResponseResult addOnlineColumnRule( + @MyRequestBody Long columnId, + @MyRequestBody(elementType = OnlineColumnRuleDto.class) List onlineColumnRuleDtoList) { + if (MyCommonUtil.existBlankArgument(columnId, onlineColumnRuleDtoList)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + for (OnlineColumnRuleDto onlineColumnRule : onlineColumnRuleDtoList) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineColumnRule); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + Set ruleIdSet = + onlineColumnRuleDtoList.stream().map(OnlineColumnRuleDto::getRuleId).collect(Collectors.toSet()); + if (!onlineColumnService.existId(columnId) + || !onlineRuleService.existUniqueKeyList("ruleId", ruleIdSet)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + List onlineColumnRuleList = + MyModelUtil.copyCollectionTo(onlineColumnRuleDtoList, OnlineColumnRule.class); + onlineColumnService.addOnlineColumnRuleList(onlineColumnRuleList, columnId); + return ResponseResult.success(); + } + + /** + * 更新指定字段数据和指定 [验证规则] 的多对多关联数据。 + * + * @param onlineColumnRuleDto 对多对中间表对象。 + * @return 应答结果对象。 + */ + @PostMapping("/updateOnlineColumnRule") + public ResponseResult updateOnlineColumnRule( + @MyRequestBody OnlineColumnRuleDto onlineColumnRuleDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineColumnRuleDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineColumnRule onlineColumnRule = MyModelUtil.copyTo(onlineColumnRuleDto, OnlineColumnRule.class); + if (!onlineColumnService.updateOnlineColumnRule(onlineColumnRule)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 显示字段数据和指定 [验证规则] 的多对多关联详情数据。 + * + * @param columnId 主表主键Id。 + * @param ruleId 从表主键Id。 + * @return 应答结果对象,包括中间表详情。 + */ + @GetMapping("/viewOnlineColumnRule") + public ResponseResult viewOnlineColumnRule( + @RequestParam Long columnId, @RequestParam Long ruleId) { + if (MyCommonUtil.existBlankArgument(columnId, ruleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineColumnRule onlineColumnRule = onlineColumnService.getOnlineColumnRule(columnId, ruleId); + if (onlineColumnRule == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineColumnRuleVo onlineColumnRuleVo = MyModelUtil.copyTo(onlineColumnRule, OnlineColumnRuleVo.class); + return ResponseResult.success(onlineColumnRuleVo); + } + + /** + * 移除指定字段数据和指定 [验证规则] 的多对多关联关系。 + * + * @param columnId 主表主键Id。 + * @param ruleId 从表主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/deleteOnlineColumnRule") + public ResponseResult deleteOnlineColumnRule( + @MyRequestBody Long columnId, @MyRequestBody Long ruleId) { + if (MyCommonUtil.existBlankArgument(columnId, ruleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!onlineColumnService.removeOnlineColumnRule(columnId, ruleId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 以字典形式返回全部字段数据数据集合。字典的键值为[columnId, columnName]。 + * 白名单接口,登录用户均可访问。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 + */ + @GetMapping("/listDict") + public ResponseResult>> listDict(OnlineColumn filter) { + List resultList = onlineColumnService.getListByFilter(filter); + return ResponseResult.success(BeanQuery.select( + "columnId as id", "columnName as name").executeFrom(resultList)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDatasourceController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDatasourceController.java new file mode 100644 index 00000000..5d97ab61 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDatasourceController.java @@ -0,0 +1,205 @@ +package com.flow.demo.common.online.api.controller; + +import cn.hutool.core.collection.CollUtil; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.AddGroup; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.dto.OnlineDatasourceDto; +import com.flow.demo.common.online.model.*; +import com.flow.demo.common.online.model.constant.PageType; +import com.flow.demo.common.online.object.SqlTable; +import com.flow.demo.common.online.object.SqlTableColumn; +import com.flow.demo.common.online.service.*; +import com.flow.demo.common.online.vo.OnlineDatasourceVo; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.List; + +/** + * 数据模型操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlineDatasource") +public class OnlineDatasourceController { + + @Autowired + private OnlineDatasourceService onlineDatasourceService; + @Autowired + private OnlineFormService onlineFormService; + @Autowired + private OnlinePageService onlinePageService; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private OnlineDblinkService onlineDblinkService; + + /** + * 新增数据模型数据。 + * + * @param onlineDatasourceDto 新增对象。 + * @param pageId 关联的页面Id。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody OnlineDatasourceDto onlineDatasourceDto, + @MyRequestBody(required = true) Long pageId) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineDatasourceDto, Default.class, AddGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlinePage onlinePage = onlinePageService.getById(pageId); + if (onlinePage == null) { + errorMessage = "数据验证失败,页面Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineDatasource onlineDatasource = MyModelUtil.copyTo(onlineDatasourceDto, OnlineDatasource.class); + OnlineDblink onlineDblink = onlineDblinkService.getById(onlineDatasourceDto.getDblinkId()); + if (onlineDblink == null) { + errorMessage = "数据验证失败,关联的数据库链接Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SqlTable sqlTable = onlineDblinkService.getDblinkTable(onlineDblink, onlineDatasourceDto.getMasterTableName()); + if (sqlTable == null) { + errorMessage = "数据验证失败,指定的数据表名不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + // 流程表单的主表主键,不能是自增主键。 + if (onlinePage.getPageType().equals(PageType.FLOW)) { + for (SqlTableColumn tableColumn : sqlTable.getColumnList()) { + if (tableColumn.getPrimaryKey()) { + if (tableColumn.getAutoIncrement()) { + errorMessage = "数据验证失败,流程页面所关联的主表主键,不能是自增主键!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + break; + } + } + } + onlineDatasource = onlineDatasourceService.saveNew(onlineDatasource, sqlTable, pageId); + return ResponseResult.success(onlineDatasource.getDatasourceId()); + } + + /** + * 更新数据模型数据。 + * + * @param onlineDatasourceDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody OnlineDatasourceDto onlineDatasourceDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineDatasourceDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineDatasource onlineDatasource = MyModelUtil.copyTo(onlineDatasourceDto, OnlineDatasource.class); + OnlineDatasource originalOnlineDatasource = onlineDatasourceService.getById(onlineDatasource.getDatasourceId()); + if (originalOnlineDatasource == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前在线数据源并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineDatasource.getDblinkId().equals(originalOnlineDatasource.getDatasourceId())) { + errorMessage = "数据验证失败,不能修改数据库链接Id!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineDatasource.getMasterTableId().equals(originalOnlineDatasource.getDatasourceId())) { + errorMessage = "数据验证失败,不能修改主表Id!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineDatasourceService.update(onlineDatasource, originalOnlineDatasource)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除数据模型数据。 + * + * @param datasourceId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long datasourceId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(datasourceId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + OnlineDatasource originalOnlineDatasource = onlineDatasourceService.getById(datasourceId); + if (originalOnlineDatasource == null) { + errorMessage = "数据验证失败,当前数据源并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + List formList = onlineFormService.getOnlineFormListByDatasourceId(datasourceId); + if (CollUtil.isNotEmpty(formList)) { + errorMessage = "数据验证失败,当前数据源正在被 [" + formList.get(0).getFormName() + "] 表单占用,请先删除关联数据!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineDatasourceService.remove(datasourceId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的数据模型列表。 + * + * @param onlineDatasourceDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlineDatasourceDto onlineDatasourceDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineDatasource onlineDatasourceFilter = MyModelUtil.copyTo(onlineDatasourceDtoFilter, OnlineDatasource.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineDatasource.class); + List onlineDatasourceList = + onlineDatasourceService.getOnlineDatasourceListWithRelation(onlineDatasourceFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineDatasourceList, OnlineDatasource.INSTANCE)); + } + + /** + * 查看指定数据模型对象详情。 + * + * @param datasourceId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long datasourceId) { + if (MyCommonUtil.existBlankArgument(datasourceId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineDatasource onlineDatasource = + onlineDatasourceService.getByIdWithRelation(datasourceId, MyRelationParam.full()); + if (onlineDatasource == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineDatasourceVo onlineDatasourceVo = OnlineDatasource.INSTANCE.fromModel(onlineDatasource); + List tableList = onlineTableService.getOnlineTableListByDatasourceId(datasourceId); + if (CollUtil.isNotEmpty(tableList)) { + onlineDatasourceVo.setTableList(OnlineTable.INSTANCE.fromModelList(tableList)); + } + return ResponseResult.success(onlineDatasourceVo); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDatasourceRelationController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDatasourceRelationController.java new file mode 100644 index 00000000..717db701 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDatasourceRelationController.java @@ -0,0 +1,228 @@ +package com.flow.demo.common.online.api.controller; + +import cn.hutool.core.collection.CollUtil; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.AddGroup; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.dto.OnlineDatasourceRelationDto; +import com.flow.demo.common.online.model.*; +import com.flow.demo.common.online.object.SqlTable; +import com.flow.demo.common.online.object.SqlTableColumn; +import com.flow.demo.common.online.service.*; +import com.flow.demo.common.online.vo.OnlineDatasourceRelationVo; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.List; + +/** + * 数据源关联操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlineDatasourceRelation") +public class OnlineDatasourceRelationController { + + @Autowired + private OnlineDatasourceRelationService onlineDatasourceRelationService; + @Autowired + private OnlineDatasourceService onlineDatasourceService; + @Autowired + private OnlineVirtualColumnService onlineVirtualColumnService; + @Autowired + private OnlineDblinkService onlineDblinkService; + @Autowired + private OnlineFormService onlineFormService; + + /** + * 新增数据关联数据。 + * + * @param onlineDatasourceRelationDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody OnlineDatasourceRelationDto onlineDatasourceRelationDto) { + String errorMessage = MyCommonUtil.getModelValidationError( + onlineDatasourceRelationDto, Default.class, AddGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineDatasourceRelation onlineDatasourceRelation = + MyModelUtil.copyTo(onlineDatasourceRelationDto, OnlineDatasourceRelation.class); + OnlineDatasource onlineDatasource = + onlineDatasourceService.getById(onlineDatasourceRelationDto.getDatasourceId()); + if (onlineDatasource == null) { + errorMessage = "数据验证失败,关联的数据源Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineDblink onlineDblink = onlineDblinkService.getById(onlineDatasource.getDblinkId()); + SqlTable slaveTable = onlineDblinkService.getDblinkTable( + onlineDblink, onlineDatasourceRelationDto.getSlaveTableName()); + if (slaveTable == null) { + errorMessage = "数据验证失败,指定的数据表不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SqlTableColumn slaveColumn = null; + for (SqlTableColumn column : slaveTable.getColumnList()) { + if (column.getColumnName().equals(onlineDatasourceRelationDto.getSlaveColumnName())) { + slaveColumn = column; + break; + } + } + if (slaveColumn == null) { + errorMessage = "数据验证失败,指定的数据表字段 [" + onlineDatasourceRelationDto.getSlaveColumnName() + "] 不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + // 验证关联Id的数据合法性 + CallResult callResult = + onlineDatasourceRelationService.verifyRelatedData(onlineDatasourceRelation, null); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + onlineDatasourceRelation = onlineDatasourceRelationService.saveNew(onlineDatasourceRelation, slaveTable, slaveColumn); + return ResponseResult.success(onlineDatasourceRelation.getRelationId()); + } + + /** + * 更新数据关联数据。 + * + * @param onlineDatasourceRelationDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody OnlineDatasourceRelationDto onlineDatasourceRelationDto) { + String errorMessage = MyCommonUtil.getModelValidationError( + onlineDatasourceRelationDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineDatasourceRelation onlineDatasourceRelation = + MyModelUtil.copyTo(onlineDatasourceRelationDto, OnlineDatasourceRelation.class); + OnlineDatasourceRelation originalOnlineDatasourceRelation = + onlineDatasourceRelationService.getById(onlineDatasourceRelation.getRelationId()); + if (originalOnlineDatasourceRelation == null) { + errorMessage = "数据验证失败,当前数据源关联并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineDatasourceRelationDto.getRelationType().equals(originalOnlineDatasourceRelation.getRelationType())) { + errorMessage = "数据验证失败,不能修改关联类型!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineDatasourceRelationDto.getSlaveTableId().equals(originalOnlineDatasourceRelation.getSlaveTableId())) { + errorMessage = "数据验证失败,不能修改从表Id!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineDatasourceRelationDto.getDatasourceId().equals(originalOnlineDatasourceRelation.getDatasourceId())) { + errorMessage = "数据验证失败,不能修改数据源Id!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + // 验证关联Id的数据合法性 + CallResult callResult = onlineDatasourceRelationService + .verifyRelatedData(onlineDatasourceRelation, originalOnlineDatasourceRelation); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!onlineDatasourceRelationService.update(onlineDatasourceRelation, originalOnlineDatasourceRelation)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除数据关联数据。 + * + * @param relationId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long relationId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(relationId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + OnlineDatasourceRelation originalOnlineDatasourceRelation = onlineDatasourceRelationService.getById(relationId); + if (originalOnlineDatasourceRelation == null) { + errorMessage = "数据验证失败,当前数据源关联并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + OnlineVirtualColumn virtualColumnFilter = new OnlineVirtualColumn(); + virtualColumnFilter.setRelationId(relationId); + List virtualColumnList = + onlineVirtualColumnService.getOnlineVirtualColumnList(virtualColumnFilter, null); + if (CollUtil.isNotEmpty(virtualColumnList)) { + OnlineVirtualColumn virtualColumn = virtualColumnList.get(0); + errorMessage = "数据验证失败,数据源关联正在被虚拟字段 [" + virtualColumn.getColumnPrompt() + "] 使用,不能被删除!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + List formList = + onlineFormService.getOnlineFormListByTableId(originalOnlineDatasourceRelation.getSlaveTableId()); + if (CollUtil.isNotEmpty(formList)) { + errorMessage = "数据验证失败,当前数据源关联正在被 [" + formList.get(0).getFormName() + "] 表单占用,请先删除关联数据!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineDatasourceRelationService.remove(relationId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的数据关联列表。 + * + * @param onlineDatasourceRelationDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分 页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlineDatasourceRelationDto onlineDatasourceRelationDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineDatasourceRelation onlineDatasourceRelationFilter = + MyModelUtil.copyTo(onlineDatasourceRelationDtoFilter, OnlineDatasourceRelation.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineDatasourceRelation.class); + List onlineDatasourceRelationList = + onlineDatasourceRelationService.getOnlineDatasourceRelationListWithRelation(onlineDatasourceRelationFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineDatasourceRelationList, OnlineDatasourceRelation.INSTANCE)); + } + + /** + * 查看指定数据关联对象详情。 + * + * @param relationId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long relationId) { + if (MyCommonUtil.existBlankArgument(relationId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineDatasourceRelation onlineDatasourceRelation = + onlineDatasourceRelationService.getByIdWithRelation(relationId, MyRelationParam.full()); + if (onlineDatasourceRelation == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineDatasourceRelationVo onlineDatasourceRelationVo = + OnlineDatasourceRelation.INSTANCE.fromModel(onlineDatasourceRelation); + return ResponseResult.success(onlineDatasourceRelationVo); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDblinkController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDblinkController.java new file mode 100644 index 00000000..4d7631c7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDblinkController.java @@ -0,0 +1,92 @@ +package com.flow.demo.common.online.api.controller; + +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.MyOrderParam; +import com.flow.demo.common.core.object.MyPageData; +import com.flow.demo.common.core.object.MyPageParam; +import com.flow.demo.common.core.object.ResponseResult; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.online.dto.OnlineDblinkDto; +import com.flow.demo.common.online.model.OnlineDblink; +import com.flow.demo.common.online.object.SqlTable; +import com.flow.demo.common.online.object.SqlTableColumn; +import com.flow.demo.common.online.service.OnlineDblinkService; +import com.flow.demo.common.online.vo.OnlineDblinkVo; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 数据库链接操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlineDblink") +public class OnlineDblinkController { + + @Autowired + private OnlineDblinkService onlineDblinkService; + + /** + * 列出符合过滤条件的数据库链接列表。 + * + * @param onlineDblinkDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlineDblinkDto onlineDblinkDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineDblink onlineDblinkFilter = MyModelUtil.copyTo(onlineDblinkDtoFilter, OnlineDblink.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineDblink.class); + List onlineDblinkList = + onlineDblinkService.getOnlineDblinkListWithRelation(onlineDblinkFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineDblinkList, OnlineDblink.INSTANCE)); + } + + /** + * 获取指定数据库链接下的所有动态表单依赖的数据表列表。 + * + * @param dblinkId 数据库链接Id。 + * @return 所有动态表单依赖的数据表列表 + */ + @GetMapping("/listDblinkTables") + public ResponseResult> listDblinkTables(@RequestParam Long dblinkId) { + OnlineDblink dblink = onlineDblinkService.getById(dblinkId); + if (dblink == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(onlineDblinkService.getDblinkTableList(dblink)); + } + + /** + * 获取指定数据库链接下,指定数据表的所有字段信息。 + * + * @param dblinkId 数据库链接Id。 + * @param tableName 表名。 + * @return 该表的所有字段列表。 + */ + @GetMapping("/listDblinkTableColumns") + public ResponseResult> listDblinkTableColumns( + @RequestParam Long dblinkId, @RequestParam String tableName) { + OnlineDblink dblink = onlineDblinkService.getById(dblinkId); + if (dblink == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(onlineDblinkService.getDblinkTableColumnList(dblink, tableName)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDictController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDictController.java new file mode 100644 index 00000000..58811075 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineDictController.java @@ -0,0 +1,156 @@ +package com.flow.demo.common.online.api.controller; + +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.dto.OnlineDictDto; +import com.flow.demo.common.online.model.OnlineDict; +import com.flow.demo.common.online.service.OnlineDictService; +import com.flow.demo.common.online.vo.OnlineDictVo; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.List; + +/** + * 在线表单字典操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlineDict") +public class OnlineDictController { + + @Autowired + private OnlineDictService onlineDictService; + + /** + * 新增在线表单字典数据。 + * + * @param onlineDictDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody OnlineDictDto onlineDictDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineDictDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineDict onlineDict = MyModelUtil.copyTo(onlineDictDto, OnlineDict.class); + // 验证关联Id的数据合法性 + CallResult callResult = onlineDictService.verifyRelatedData(onlineDict, null); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + onlineDict = onlineDictService.saveNew(onlineDict); + return ResponseResult.success(onlineDict.getDictId()); + } + + /** + * 更新在线表单字典数据。 + * + * @param onlineDictDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody OnlineDictDto onlineDictDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineDictDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineDict onlineDict = MyModelUtil.copyTo(onlineDictDto, OnlineDict.class); + OnlineDict originalOnlineDict = onlineDictService.getById(onlineDict.getDictId()); + if (originalOnlineDict == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前在线字典并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + // 验证关联Id的数据合法性 + CallResult callResult = onlineDictService.verifyRelatedData(onlineDict, originalOnlineDict); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!onlineDictService.update(onlineDict, originalOnlineDict)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除在线表单字典数据。 + * + * @param dictId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long dictId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(dictId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + OnlineDict originalOnlineDict = onlineDictService.getById(dictId); + if (originalOnlineDict == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前在线字典并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineDictService.remove(dictId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的在线表单字典列表。 + * + * @param onlineDictDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlineDictDto onlineDictDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineDict onlineDictFilter = MyModelUtil.copyTo(onlineDictDtoFilter, OnlineDict.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineDict.class); + List onlineDictList = onlineDictService.getOnlineDictListWithRelation(onlineDictFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineDictList, OnlineDict.INSTANCE)); + } + + /** + * 查看指定在线表单字典对象详情。 + * + * @param dictId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long dictId) { + if (MyCommonUtil.existBlankArgument(dictId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineDict onlineDict = onlineDictService.getByIdWithRelation(dictId, MyRelationParam.full()); + if (onlineDict == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineDictVo onlineDictVo = OnlineDict.INSTANCE.fromModel(onlineDict); + return ResponseResult.success(onlineDictVo); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineFormController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineFormController.java new file mode 100644 index 00000000..07b32746 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineFormController.java @@ -0,0 +1,257 @@ +package com.flow.demo.common.online.api.controller; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONObject; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.dto.OnlineFormDto; +import com.flow.demo.common.online.model.*; +import com.flow.demo.common.online.service.*; +import com.flow.demo.common.online.vo.OnlineFormVo; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 在线表单操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlineForm") +public class OnlineFormController { + + @Autowired + private OnlineFormService onlineFormService; + @Autowired + private OnlineDatasourceService onlineDatasourceService; + @Autowired + private OnlineDatasourceRelationService onlineDatasourceRelationService; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private OnlineColumnService onlineColumnService; + @Autowired + private OnlineVirtualColumnService onlineVirtualColumnService; + @Autowired + private OnlineDictService onlineDictService; + @Autowired + private OnlineRuleService onlineRuleService; + + /** + * 新增在线表单数据。 + * + * @param onlineFormDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody OnlineFormDto onlineFormDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineFormDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineForm onlineForm = MyModelUtil.copyTo(onlineFormDto, OnlineForm.class); + // 验证关联Id的数据合法性 + CallResult callResult = onlineFormService.verifyRelatedData(onlineForm, null); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + Set datasourceIdSet = null; + if (CollUtil.isNotEmpty(onlineFormDto.getDatasourceIdList())) { + datasourceIdSet = new HashSet<>(onlineFormDto.getDatasourceIdList()); + if (!onlineDatasourceService.existAllPrimaryKeys(datasourceIdSet)) { + errorMessage = "数据验证失败,当前在线表单包含不存在的数据源Id!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + onlineForm = onlineFormService.saveNew(onlineForm, datasourceIdSet); + return ResponseResult.success(onlineForm.getFormId()); + } + + /** + * 更新在线表单数据。 + * + * @param onlineFormDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody OnlineFormDto onlineFormDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineFormDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineForm onlineForm = MyModelUtil.copyTo(onlineFormDto, OnlineForm.class); + OnlineForm originalOnlineForm = onlineFormService.getById(onlineForm.getFormId()); + if (originalOnlineForm == null) { + errorMessage = "数据验证失败,当前在线表单并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + // 验证关联Id的数据合法性 + CallResult callResult = onlineFormService.verifyRelatedData(onlineForm, originalOnlineForm); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + Set datasourceIdSet = null; + if (CollUtil.isNotEmpty(onlineFormDto.getDatasourceIdList())) { + datasourceIdSet = new HashSet<>(onlineFormDto.getDatasourceIdList()); + if (!onlineDatasourceService.existAllPrimaryKeys(datasourceIdSet)) { + errorMessage = "数据验证失败,当前在线表单包含不存在的数据源Id!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + if (!onlineFormService.update(onlineForm, originalOnlineForm, datasourceIdSet)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除在线表单数据。 + * + * @param formId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long formId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(formId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + OnlineForm originalOnlineForm = onlineFormService.getById(formId); + if (originalOnlineForm == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前在线表单并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineFormService.remove(formId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的在线表单列表。 + * + * @param onlineFormDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlineFormDto onlineFormDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineForm onlineFormFilter = MyModelUtil.copyTo(onlineFormDtoFilter, OnlineForm.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineForm.class); + List onlineFormList = + onlineFormService.getOnlineFormListWithRelation(onlineFormFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineFormList, OnlineForm.INSTANCE)); + } + + /** + * 查看指定在线表单对象详情。 + * + * @param formId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long formId) { + if (MyCommonUtil.existBlankArgument(formId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineForm onlineForm = onlineFormService.getByIdWithRelation(formId, MyRelationParam.full()); + if (onlineForm == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineFormVo onlineFormVo = OnlineForm.INSTANCE.fromModel(onlineForm); + List formDatasourceList = onlineFormService.getFormDatasourceListByFormId(formId); + if (CollUtil.isNotEmpty(formDatasourceList)) { + onlineFormVo.setDatasourceIdList(formDatasourceList.stream() + .map(OnlineFormDatasource::getDatasourceId).collect(Collectors.toList())); + } + return ResponseResult.success(onlineFormVo); + } + + /** + * 获取指定在线表单对象在前端渲染时所需的所有数据对象。 + * + * @param formId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/render") + public ResponseResult render(@RequestParam Long formId) { + if (MyCommonUtil.existBlankArgument(formId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineForm onlineForm = onlineFormService.getByIdWithRelation(formId, MyRelationParam.full()); + if (onlineForm == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineFormVo onlineFormVo = OnlineForm.INSTANCE.fromModel(onlineForm); + JSONObject jsonObject = new JSONObject(); + jsonObject.putOpt("onlineForm", onlineFormVo); + List formDatasourceList = onlineFormService.getFormDatasourceListByFormId(formId); + if (CollUtil.isEmpty(formDatasourceList)) { + return ResponseResult.success(jsonObject); + } + Set datasourceIdSet = formDatasourceList.stream() + .map(OnlineFormDatasource::getDatasourceId).collect(Collectors.toSet()); + List onlineDatasourceList = onlineDatasourceService.getOnlineDatasourceList(datasourceIdSet); + jsonObject.putOpt("onlineDatasourceList", onlineDatasourceList); + List onlineDatasourceRelationList = + onlineDatasourceRelationService.getOnlineDatasourceRelationListByDatasourceIds(datasourceIdSet, null); + if (CollUtil.isNotEmpty(onlineDatasourceRelationList)) { + jsonObject.putOpt("onlineDatasourceRelationList", onlineDatasourceRelationList); + } + List onlineDatasourceTableList = + onlineDatasourceService.getOnlineDatasourceTableList(datasourceIdSet); + if (CollUtil.isNotEmpty(onlineDatasourceTableList)) { + Set tableIdSet = onlineDatasourceTableList.stream() + .map(OnlineDatasourceTable::getTableId).collect(Collectors.toSet()); + List onlineTableList = onlineTableService.getOnlineTableList(tableIdSet); + jsonObject.putOpt("onlineTableList", onlineTableList); + List onlineColumnList = onlineColumnService.getOnlineColumnListByTableIds(tableIdSet); + jsonObject.putOpt("onlineColumnList", onlineColumnList); + List virtualColumnList = + onlineVirtualColumnService.getOnlineVirtualColumnListByTableIds(tableIdSet); + jsonObject.putOpt("onlineVirtualColumnList", virtualColumnList); + Set dictIdSet = onlineColumnList.stream() + .filter(c -> c.getDictId() != null).map(OnlineColumn::getDictId).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(dictIdSet)) { + List onlineDictList = onlineDictService.getOnlineDictList(dictIdSet); + if (CollUtil.isNotEmpty(onlineDictList)) { + jsonObject.putOpt("onlineDictList", onlineDictList); + } + } + Set columnIdSet = onlineColumnList.stream().map(OnlineColumn::getColumnId).collect(Collectors.toSet()); + List colunmRuleList = onlineRuleService.getOnlineColumnRuleListByColumnIds(columnIdSet); + if (CollUtil.isNotEmpty(colunmRuleList)) { + jsonObject.putOpt("onlineColumnRuleList", colunmRuleList); + } + } + return ResponseResult.success(jsonObject); + } + +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlinePageController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlinePageController.java new file mode 100644 index 00000000..6fbd7429 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlinePageController.java @@ -0,0 +1,343 @@ +package com.flow.demo.common.online.api.controller; + +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.dto.OnlineDatasourceDto; +import com.flow.demo.common.online.dto.OnlinePageDatasourceDto; +import com.flow.demo.common.online.dto.OnlinePageDto; +import com.flow.demo.common.online.model.OnlineDatasource; +import com.flow.demo.common.online.model.OnlinePage; +import com.flow.demo.common.online.model.OnlinePageDatasource; +import com.flow.demo.common.online.model.constant.PageStatus; +import com.flow.demo.common.online.service.OnlineDatasourceService; +import com.flow.demo.common.online.service.OnlineFormService; +import com.flow.demo.common.online.service.OnlinePageService; +import com.flow.demo.common.online.vo.OnlineDatasourceVo; +import com.flow.demo.common.online.vo.OnlinePageDatasourceVo; +import com.flow.demo.common.online.vo.OnlinePageVo; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 在线表单页面操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlinePage") +public class OnlinePageController { + + @Autowired + private OnlinePageService onlinePageService; + @Autowired + private OnlineFormService onlineFormService; + @Autowired + private OnlineDatasourceService onlineDatasourceService; + + /** + * 新增在线表单页面数据。 + * + * @param onlinePageDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody OnlinePageDto onlinePageDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlinePageDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlinePage onlinePage = MyModelUtil.copyTo(onlinePageDto, OnlinePage.class); + onlinePage = onlinePageService.saveNew(onlinePage); + return ResponseResult.success(onlinePage.getPageId()); + } + + /** + * 更新在线表单页面数据。 + * + * @param onlinePageDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody OnlinePageDto onlinePageDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlinePageDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlinePage onlinePage = MyModelUtil.copyTo(onlinePageDto, OnlinePage.class); + OnlinePage originalOnlinePage = onlinePageService.getById(onlinePage.getPageId()); + if (originalOnlinePage == null) { + errorMessage = "数据验证失败,当前页面对象并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlinePage.getPageType().equals(originalOnlinePage.getPageType())) { + errorMessage = "数据验证失败,页面类型不能修改!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlinePageService.update(onlinePage, originalOnlinePage)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 更新在线表单页面对象的发布状态字段。 + * + * @param pageId 待更新的页面对象主键Id。 + * @param published 发布状态。 + * @return 应答结果对象。 + */ + @PostMapping("/updatePublished") + public ResponseResult updateStatus( + @MyRequestBody(required = true) Long pageId, + @MyRequestBody(required = true) Boolean published) { + String errorMessage; + // 验证关联Id的数据合法性 + OnlinePage originalOnlinePage = onlinePageService.getById(pageId); + if (originalOnlinePage == null) { + errorMessage = "数据验证失败,当前页面对象并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!published.equals(originalOnlinePage.getPublished())) { + if (published && !originalOnlinePage.getStatus().equals(PageStatus.FORM_DESIGN)) { + errorMessage = "数据验证失败,当前页面状态不为 [设计] 状态,因此不能发布!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + onlinePageService.updatePublished(pageId, published); + } + return ResponseResult.success(); + } + + /** + * 删除在线表单页面数据。 + * + * @param pageId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long pageId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(pageId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + OnlinePage originalOnlinePage = onlinePageService.getById(pageId); + if (originalOnlinePage == null) { + errorMessage = "数据验证失败,当前页面对象并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlinePageService.remove(pageId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的在线表单页面列表。 + * + * @param onlinePageDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlinePageDto onlinePageDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlinePage onlinePageFilter = MyModelUtil.copyTo(onlinePageDtoFilter, OnlinePage.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlinePage.class); + List onlinePageList = onlinePageService.getOnlinePageListWithRelation(onlinePageFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlinePageList, OnlinePage.INSTANCE)); + } + + /** + * 获取系统中配置的所有Page和表单的列表。 + * + * @return 系统中配置的所有Page和表单的列表。 + */ + @PostMapping("/listAllPageAndForm") + public ResponseResult listAllPageAndForm() { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("pageList", onlinePageService.getAllList()); + jsonObject.put("formList", onlineFormService.getAllList()); + return ResponseResult.success(jsonObject); + } + + /** + * 查看指定在线表单页面对象详情。 + * + * @param pageId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long pageId) { + if (MyCommonUtil.existBlankArgument(pageId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlinePage onlinePage = onlinePageService.getByIdWithRelation(pageId, MyRelationParam.full()); + if (onlinePage == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlinePageVo onlinePageVo = OnlinePage.INSTANCE.fromModel(onlinePage); + return ResponseResult.success(onlinePageVo); + } + + /** + * 列出不与指定在线表单页面存在多对多关系的在线数据源列表数据。通常用于查看添加新在线数据源对象的候选列表。 + * + * @param pageId 主表关联字段。 + * @param onlineDatasourceDtoFilter 在线数据源过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,返回符合条件的数据列表。 + */ + @PostMapping("/listNotInOnlinePageDatasource") + public ResponseResult> listNotInOnlinePageDatasource( + @MyRequestBody Long pageId, + @MyRequestBody OnlineDatasourceDto onlineDatasourceDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doOnlinePageDatasourceVerify(pageId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineDatasource filter = MyModelUtil.copyTo(onlineDatasourceDtoFilter, OnlineDatasource.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineDatasource.class); + List onlineDatasourceList = + onlineDatasourceService.getNotInOnlineDatasourceListByPageId(pageId, filter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineDatasourceList, OnlineDatasource.INSTANCE)); + } + + /** + * 列出与指定在线表单页面存在多对多关系的在线数据源列表数据。 + * + * @param pageId 主表关联字段。 + * @param onlineDatasourceDtoFilter 在线数据源过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,返回符合条件的数据列表。 + */ + @PostMapping("/listOnlinePageDatasource") + public ResponseResult> listOnlinePageDatasource( + @MyRequestBody Long pageId, + @MyRequestBody OnlineDatasourceDto onlineDatasourceDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doOnlinePageDatasourceVerify(pageId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineDatasource filter = MyModelUtil.copyTo(onlineDatasourceDtoFilter, OnlineDatasource.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineDatasource.class); + List onlineDatasourceList = + onlineDatasourceService.getOnlineDatasourceListByPageId(pageId, filter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineDatasourceList, OnlineDatasource.INSTANCE)); + } + + /** + * 批量添加在线表单页面和在线数据源对象的多对多关联关系数据。 + * + * @param pageId 主表主键Id。 + * @param onlinePageDatasourceDtoList 关联对象列表。 + * @return 应答结果对象。 + */ + @PostMapping("/addOnlinePageDatasource") + public ResponseResult addOnlinePageDatasource( + @MyRequestBody Long pageId, + @MyRequestBody(value = "onlinePageDatasourceList", elementType = OnlinePageDatasourceDto.class) List onlinePageDatasourceDtoList) { + if (MyCommonUtil.existBlankArgument(pageId, onlinePageDatasourceDtoList)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + for (OnlinePageDatasourceDto onlinePageDatasource : onlinePageDatasourceDtoList) { + String errorMessage = MyCommonUtil.getModelValidationError(onlinePageDatasource); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + Set datasourceIdSet = + onlinePageDatasourceDtoList.stream().map(OnlinePageDatasourceDto::getDatasourceId).collect(Collectors.toSet()); + if (!onlinePageService.existId(pageId) + || !onlineDatasourceService.existUniqueKeyList("datasourceId", datasourceIdSet)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + List onlinePageDatasourceList = + MyModelUtil.copyCollectionTo(onlinePageDatasourceDtoList, OnlinePageDatasource.class); + onlinePageService.addOnlinePageDatasourceList(onlinePageDatasourceList, pageId); + return ResponseResult.success(); + } + + /** + * 显示在线表单页面和指定数据源的多对多关联详情数据。 + * + * @param pageId 主表主键Id。 + * @param datasourceId 从表主键Id。 + * @return 应答结果对象,包括中间表详情。 + */ + @GetMapping("/viewOnlinePageDatasource") + public ResponseResult viewOnlinePageDatasource( + @RequestParam Long pageId, @RequestParam Long datasourceId) { + if (MyCommonUtil.existBlankArgument(pageId, datasourceId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlinePageDatasource onlinePageDatasource = onlinePageService.getOnlinePageDatasource(pageId, datasourceId); + if (onlinePageDatasource == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlinePageDatasourceVo onlinePageDatasourceVo = MyModelUtil.copyTo(onlinePageDatasource, OnlinePageDatasourceVo.class); + return ResponseResult.success(onlinePageDatasourceVo); + } + + /** + * 移除指定在线表单页面和指定数据源的多对多关联关系。 + * + * @param pageId 主表主键Id。 + * @param datasourceId 从表主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/deleteOnlinePageDatasource") + public ResponseResult deleteOnlinePageDatasource( + @MyRequestBody Long pageId, @MyRequestBody Long datasourceId) { + if (MyCommonUtil.existBlankArgument(pageId, datasourceId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!onlinePageService.removeOnlinePageDatasource(pageId, datasourceId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + private ResponseResult doOnlinePageDatasourceVerify(Long pageId) { + if (MyCommonUtil.existBlankArgument(pageId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!onlinePageService.existId(pageId)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + return ResponseResult.success(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineRuleController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineRuleController.java new file mode 100644 index 00000000..2eb66557 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineRuleController.java @@ -0,0 +1,144 @@ +package com.flow.demo.common.online.api.controller; + +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.dto.OnlineRuleDto; +import com.flow.demo.common.online.model.OnlineRule; +import com.flow.demo.common.online.service.OnlineRuleService; +import com.flow.demo.common.online.vo.OnlineRuleVo; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.List; + +/** + * 验证规则操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlineRule") +public class OnlineRuleController { + + @Autowired + private OnlineRuleService onlineRuleService; + + /** + * 新增验证规则数据。 + * + * @param onlineRuleDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody OnlineRuleDto onlineRuleDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineRuleDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineRule onlineRule = MyModelUtil.copyTo(onlineRuleDto, OnlineRule.class); + onlineRule = onlineRuleService.saveNew(onlineRule); + return ResponseResult.success(onlineRule.getRuleId()); + } + + /** + * 更新验证规则数据。 + * + * @param onlineRuleDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody OnlineRuleDto onlineRuleDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineRuleDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineRule onlineRule = MyModelUtil.copyTo(onlineRuleDto, OnlineRule.class); + OnlineRule originalOnlineRule = onlineRuleService.getById(onlineRule.getRuleId()); + if (originalOnlineRule == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前在线字段规则并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineRuleService.update(onlineRule, originalOnlineRule)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除验证规则数据。 + * + * @param ruleId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long ruleId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(ruleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + OnlineRule originalOnlineRule = onlineRuleService.getById(ruleId); + if (originalOnlineRule == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前在线字段规则并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineRuleService.remove(ruleId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的验证规则列表。 + * + * @param onlineRuleDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlineRuleDto onlineRuleDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineRule onlineRuleFilter = MyModelUtil.copyTo(onlineRuleDtoFilter, OnlineRule.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineRule.class); + List onlineRuleList = onlineRuleService.getOnlineRuleListWithRelation(onlineRuleFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineRuleList, OnlineRule.INSTANCE)); + } + + /** + * 查看指定验证规则对象详情。 + * + * @param ruleId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long ruleId) { + if (MyCommonUtil.existBlankArgument(ruleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineRule onlineRule = onlineRuleService.getByIdWithRelation(ruleId, MyRelationParam.full()); + if (onlineRule == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineRuleVo onlineRuleVo = OnlineRule.INSTANCE.fromModel(onlineRule); + return ResponseResult.success(onlineRuleVo); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineTableController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineTableController.java new file mode 100644 index 00000000..6fb5a8f2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineTableController.java @@ -0,0 +1,118 @@ +package com.flow.demo.common.online.api.controller; + +import cn.jimmyshi.beanquery.BeanQuery; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.dto.OnlineTableDto; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.service.OnlineTableService; +import com.flow.demo.common.online.vo.OnlineTableVo; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.List; +import java.util.Map; + +/** + * 数据表操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlineTable") +public class OnlineTableController { + + @Autowired + private OnlineTableService onlineTableService; + + /** + * 更新数据表数据。 + * + * @param onlineTableDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody OnlineTableDto onlineTableDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineTableDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineTable onlineTable = MyModelUtil.copyTo(onlineTableDto, OnlineTable.class); + OnlineTable originalOnlineTable = onlineTableService.getById(onlineTable.getTableId()); + if (originalOnlineTable == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前在线数据表并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineTableService.update(onlineTable, originalOnlineTable)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的数据表列表。 + * + * @param onlineTableDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlineTableDto onlineTableDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineTable onlineTableFilter = MyModelUtil.copyTo(onlineTableDtoFilter, OnlineTable.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineTable.class); + List onlineTableList = + onlineTableService.getOnlineTableListWithRelation(onlineTableFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(onlineTableList, OnlineTable.INSTANCE)); + } + + /** + * 查看指定数据表对象详情。 + * + * @param tableId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long tableId) { + if (MyCommonUtil.existBlankArgument(tableId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineTable onlineTable = onlineTableService.getByIdWithRelation(tableId, MyRelationParam.full()); + if (onlineTable == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineTableVo onlineTableVo = OnlineTable.INSTANCE.fromModel(onlineTable); + return ResponseResult.success(onlineTableVo); + } + + /** + * 以字典形式返回全部数据表数据集合。字典的键值为[tableId, modelName]。 + * 白名单接口,登录用户均可访问。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 + */ + @GetMapping("/listDict") + public ResponseResult>> listDict(OnlineTable filter) { + List resultList = onlineTableService.getListByFilter(filter); + return ResponseResult.success(BeanQuery.select( + "tableId as id", "modelName as name").executeFrom(resultList)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineVirtualColumnController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineVirtualColumnController.java new file mode 100644 index 00000000..e0617663 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/java/com/flow/demo/common/online/api/controller/OnlineVirtualColumnController.java @@ -0,0 +1,180 @@ +package com.flow.demo.common.online.api.controller; + +import com.github.pagehelper.page.PageMethod; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.*; +import com.flow.demo.common.core.constant.*; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.dto.OnlineVirtualColumnDto; +import com.flow.demo.common.online.model.OnlineVirtualColumn; +import com.flow.demo.common.online.model.constant.VirtualType; +import com.flow.demo.common.online.service.OnlineVirtualColumnService; +import com.flow.demo.common.online.vo.OnlineVirtualColumnVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import javax.validation.groups.Default; + +/** + * 虚拟字段操作控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@RequestMapping("${common-online-api.urlPrefix}/onlineVirtualColumn") +public class OnlineVirtualColumnController { + + @Autowired + private OnlineVirtualColumnService onlineVirtualColumnService; + + /** + * 新增虚拟字段数据。 + * + * @param onlineVirtualColumnDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody OnlineVirtualColumnDto onlineVirtualColumnDto) { + String errorMessage = MyCommonUtil.getModelValidationError(onlineVirtualColumnDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineVirtualColumn onlineVirtualColumn = + MyModelUtil.copyTo(onlineVirtualColumnDto, OnlineVirtualColumn.class); + ResponseResult verifyResult = this.doVerify(onlineVirtualColumn, null); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + onlineVirtualColumn = onlineVirtualColumnService.saveNew(onlineVirtualColumn); + return ResponseResult.success(onlineVirtualColumn.getVirtualColumnId()); + } + + /** + * 更新虚拟字段数据。 + * + * @param onlineVirtualColumnDto 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody OnlineVirtualColumnDto onlineVirtualColumnDto) { + String errorMessage = MyCommonUtil.getModelValidationError( + onlineVirtualColumnDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineVirtualColumn onlineVirtualColumn = + MyModelUtil.copyTo(onlineVirtualColumnDto, OnlineVirtualColumn.class); + OnlineVirtualColumn originalOnlineVirtualColumn = + onlineVirtualColumnService.getById(onlineVirtualColumn.getVirtualColumnId()); + if (originalOnlineVirtualColumn == null) { + errorMessage = "数据验证失败,当前虚拟字段并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + ResponseResult verifyResult = this.doVerify(onlineVirtualColumn, originalOnlineVirtualColumn); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (!onlineVirtualColumnService.update(onlineVirtualColumn, originalOnlineVirtualColumn)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除虚拟字段数据。 + * + * @param virtualColumnId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long virtualColumnId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(virtualColumnId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + OnlineVirtualColumn originalOnlineVirtualColumn = onlineVirtualColumnService.getById(virtualColumnId); + if (originalOnlineVirtualColumn == null) { + errorMessage = "数据验证失败,当前虚拟字段并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!onlineVirtualColumnService.remove(virtualColumnId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的虚拟字段列表。 + * + * @param onlineVirtualColumnDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody OnlineVirtualColumnDto onlineVirtualColumnDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + OnlineVirtualColumn onlineVirtualColumnFilter = + MyModelUtil.copyTo(onlineVirtualColumnDtoFilter, OnlineVirtualColumn.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineVirtualColumn.class); + List onlineVirtualColumnList = + onlineVirtualColumnService.getOnlineVirtualColumnListWithRelation(onlineVirtualColumnFilter, orderBy); + MyPageData pageData = + MyPageUtil.makeResponseData(onlineVirtualColumnList, OnlineVirtualColumn.INSTANCE); + return ResponseResult.success(pageData); + } + + /** + * 查看指定虚拟字段对象详情。 + * + * @param virtualColumnId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long virtualColumnId) { + if (MyCommonUtil.existBlankArgument(virtualColumnId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineVirtualColumn onlineVirtualColumn = + onlineVirtualColumnService.getByIdWithRelation(virtualColumnId, MyRelationParam.full()); + if (onlineVirtualColumn == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineVirtualColumnVo onlineVirtualColumnVo = + OnlineVirtualColumn.INSTANCE.fromModel(onlineVirtualColumn); + return ResponseResult.success(onlineVirtualColumnVo); + } + + private ResponseResult doVerify( + OnlineVirtualColumn virtualColumn, OnlineVirtualColumn originalVirtualColumn) { + if (!virtualColumn.getVirtualType().equals(VirtualType.AGGREGATION)) { + return ResponseResult.success(); + } + if (MyCommonUtil.existBlankArgument( + virtualColumn.getAggregationColumnId(), + virtualColumn.getAggregationTableId(), + virtualColumn.getDatasourceId(), + virtualColumn.getRelationId(), + virtualColumn.getAggregationType())) { + String errorMessage = "数据验证失败,数据源、关联关系、聚合表、聚合字段和聚合类型,均不能为空!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + CallResult verifyResult = onlineVirtualColumnService.verifyRelatedData(virtualColumn, null); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + return ResponseResult.success(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/resources/META-INF/spring.factories b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..ebe5596f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online-api/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.flow.demo.common.online.api.config.OnlineApiAutoConfig \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/pom.xml new file mode 100644 index 00000000..4bdf4c27 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/pom.xml @@ -0,0 +1,63 @@ + + + + common + com.flow.demo + 1.0.0 + + 4.0.0 + + common-online + 1.0.0 + common-online + jar + + + + com.flow.demo + common-core + 1.0.0 + + + com.flow.demo + common-datafilter + 1.0.0 + + + com.flow.demo + common-redis + 1.0.0 + + + com.flow.demo + common-sequence + 1.0.0 + + + com.flow.demo + common-log + 1.0.0 + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/config/OnlineAutoConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/config/OnlineAutoConfig.java new file mode 100644 index 00000000..6c93a151 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/config/OnlineAutoConfig.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.online.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-online模块的自动配置引导类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EnableConfigurationProperties({OnlineProperties.class}) +public class OnlineAutoConfig { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/config/OnlineProperties.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/config/OnlineProperties.java new file mode 100644 index 00000000..67adc368 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/config/OnlineProperties.java @@ -0,0 +1,30 @@ +package com.flow.demo.common.online.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 在线表单的配置对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ConfigurationProperties(prefix = "common-online") +public class OnlineProperties { + + /** + * 仅以该前缀开头的数据表才会成为动态表单的候选数据表,如: zz_。如果为空,则所有表均可被选。 + */ + private String tablePrefix; + + /** + * 在线表单业务操作的URL前缀。 + */ + private String operationUrlPrefix; + + /** + * 上传文件的根路径。 + */ + private String uploadFileBaseDir; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/controller/OnlineOperationController.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/controller/OnlineOperationController.java new file mode 100644 index 00000000..bdc5d113 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/controller/OnlineOperationController.java @@ -0,0 +1,786 @@ +package com.flow.demo.common.online.controller; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.CharUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.annotation.MyRequestBody; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.*; +import com.flow.demo.common.core.util.ContextUtil; +import com.flow.demo.common.core.util.MyCommonUtil; +import com.flow.demo.common.core.util.MyPageUtil; +import com.flow.demo.common.online.util.OnlineOperationHelper; +import com.flow.demo.common.online.dto.OnlineFilterDto; +import com.flow.demo.common.online.model.*; +import com.flow.demo.common.online.model.constant.DictType; +import com.flow.demo.common.online.model.constant.RelationType; +import com.flow.demo.common.online.object.ColumnData; +import com.flow.demo.common.online.service.*; +import com.flow.demo.common.online.util.OnlineConstant; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 在线操作接口的控制器类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@RestController +@ConditionalOnProperty(name = "common-online.operationEnabled", havingValue = "true") +@RequestMapping("${common-online.operationUrlPrefix}/onlineOperation") +public class OnlineOperationController { + + @Autowired + private OnlineOperationService onlineOperationService; + @Autowired + private OnlineDictService onlineDictService; + @Autowired + private OnlineDatasourceService onlineDatasourceService; + @Autowired + private OnlineDatasourceRelationService onlineDatasourceRelationService; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private OnlineOperationHelper onlineOperationHelper; + + /** + * 新增数据接口。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 主表的数据源Id。 + * @param masterData 主表新增数据。 + * @param slaveData 一对多从表新增数据列表。 + * @return 应答结果。 + */ + @PostMapping("/addDatasource/{datasourceVariableName}") + public ResponseResult addDatasource( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @MyRequestBody(required = true) Long datasourceId, + @MyRequestBody(required = true) JSONObject masterData, + @MyRequestBody JSONObject slaveData) throws IOException { + String errorMessage; + // 验证数据源的合法性,同时获取主表对象。 + ResponseResult datasourceResult = + onlineOperationHelper.verifyAndGetDatasource(datasourceId); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + OnlineDatasource datasource = datasourceResult.getData(); + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + OnlineTable masterTable = datasource.getMasterTable(); + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(masterTable, masterData, false, null); + if (!columnDataListResult.isSuccess()) { + return ResponseResult.errorFrom(columnDataListResult); + } + if (slaveData == null) { + onlineOperationService.saveNew(masterTable, columnDataListResult.getData()); + } else { + ResponseResult>>> slaveDataListResult = + onlineOperationHelper.buildSlaveDataList(datasourceId, slaveData); + if (!slaveDataListResult.isSuccess()) { + return ResponseResult.errorFrom(slaveDataListResult); + } + onlineOperationService.saveNewAndSlaveRelation( + masterTable, columnDataListResult.getData(), slaveDataListResult.getData()); + } + return ResponseResult.success(); + } + + /** + * 新增一对多从表数据接口。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 主表的数据源Id。 + * @param relationId 一对多的关联Id。 + * @param slaveData 一对多从表的新增数据列表。 + * @return 应答结果。 + */ + @PostMapping("/addOneToManyRelation/{datasourceVariableName}") + public ResponseResult addOneToManyRelation( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @MyRequestBody(required = true) Long datasourceId, + @MyRequestBody(required = true) Long relationId, + @MyRequestBody(required = true) JSONObject slaveData) { + String errorMessage; + OnlineDatasource datasource = onlineDatasourceService.getById(datasourceId); + if (datasource == null) { + errorMessage = "数据验证失败,数据源Id并不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + ResponseResult relationResult = + onlineOperationHelper.verifyAndGetOneToManyRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + return ResponseResult.errorFrom(relationResult); + } + OnlineDatasourceRelation relation = relationResult.getData(); + OnlineTable slaveTable = relation.getSlaveTable(); + // 拆解主表和一对多关联从表的输入参数,并构建出数据表的待插入数据列表。 + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(slaveTable, slaveData, false, null); + if (!columnDataListResult.isSuccess()) { + return ResponseResult.errorFrom(columnDataListResult); + } + onlineOperationService.saveNew(slaveTable, columnDataListResult.getData()); + return ResponseResult.success(); + } + + /** + * 更新主数据接口。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 主表数据源Id。 + * @param masterData 表数据。这里没有包含的字段将视为NULL。 + * @return 应该结果。 + */ + @PostMapping("/updateDatasource/{datasourceVariableName}") + public ResponseResult updateDatasource( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @MyRequestBody(required = true) Long datasourceId, + @MyRequestBody(required = true) JSONObject masterData) { + String errorMessage; + ResponseResult datasourceResult = + onlineOperationHelper.verifyAndGetDatasource(datasourceId); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + OnlineDatasource datasource = datasourceResult.getData(); + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + OnlineTable masterTable = datasource.getMasterTable(); + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(masterTable, masterData, true, null); + if (!columnDataListResult.isSuccess()) { + return ResponseResult.errorFrom(columnDataListResult); + } + if (!onlineOperationService.update(masterTable, columnDataListResult.getData())) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 更新一对多关联数据接口。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 主表数据源Id。 + * @param relationId 一对多关联Id。 + * @param slaveData 一对多关联从表数据。这里没有包含的字段将视为NULL。 + * @return 应该结果。 + */ + @PostMapping("/updateOneToManyRelation/{datasourceVariableName}") + public ResponseResult updateOneToManyRelation( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @MyRequestBody(required = true) Long datasourceId, + @MyRequestBody(required = true) Long relationId, + @MyRequestBody(required = true) JSONObject slaveData) { + String errorMessage; + OnlineDatasource datasource = onlineDatasourceService.getById(datasourceId); + if (datasource == null) { + errorMessage = "数据验证失败,数据源Id并不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + ResponseResult relationResult = + onlineOperationHelper.verifyAndGetOneToManyRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + return ResponseResult.errorFrom(relationResult); + } + OnlineTable slaveTable = relationResult.getData().getSlaveTable(); + ResponseResult> columnDataListResult = + onlineOperationHelper.buildTableData(slaveTable, slaveData, true, null); + if (!columnDataListResult.isSuccess()) { + return ResponseResult.errorFrom(columnDataListResult); + } + if (!onlineOperationService.update(slaveTable, columnDataListResult.getData())) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除主数据接口。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 主表数据源Id。 + * @param dataId 待删除的数据表主键Id。 + * @return 应该结果。 + */ + @PostMapping("/deleteDatasource/{datasourceVariableName}") + public ResponseResult deleteDatasource( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @MyRequestBody(required = true) Long datasourceId, + @MyRequestBody(required = true) String dataId) { + String errorMessage; + ResponseResult datasourceResult = + onlineOperationHelper.verifyAndGetDatasource(datasourceId); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + OnlineDatasource datasource = datasourceResult.getData(); + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + OnlineTable masterTable = datasource.getMasterTable(); + ResponseResult> relationListResult = + onlineOperationHelper.verifyAndGetRelationList(datasourceId, RelationType.ONE_TO_MANY); + if (!relationListResult.isSuccess()) { + return ResponseResult.errorFrom(relationListResult); + } + List relationList = relationListResult.getData(); + if (!onlineOperationService.delete(masterTable, relationList, dataId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除一对多关联表单条数据接口。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 主表数据源Id。 + * @param relationId 一对多关联Id。 + * @param dataId 一对多关联表主键Id。 + * @return 应该结果。 + */ + @PostMapping("/deleteOneToManyRelation/{datasourceVariableName}") + public ResponseResult deleteOneToManyRelation( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @MyRequestBody(required = true) Long datasourceId, + @MyRequestBody(required = true) Long relationId, + @MyRequestBody(required = true) String dataId) { + String errorMessage; + OnlineDatasource datasource = onlineDatasourceService.getById(datasourceId); + if (datasource == null) { + errorMessage = "数据验证失败,数据源Id并不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + ResponseResult relationResult = + onlineOperationHelper.verifyAndGetOneToManyRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + return ResponseResult.errorFrom(relationResult); + } + OnlineDatasourceRelation relation = relationResult.getData(); + if (!onlineOperationService.delete(relation.getSlaveTable(), null, dataId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 根据数据源Id为动态表单查询数据详情。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 数据源Id。 + * @param dataId 数据主键Id。 + * @return 详情结果。 + */ + @GetMapping("/viewByDatasourceId/{datasourceVariableName}") + public ResponseResult> viewByDatasourceId( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @RequestParam Long datasourceId, + @RequestParam String dataId) { + String errorMessage; + // 验证数据源及其关联 + ResponseResult datasourceResult = + onlineOperationHelper.verifyAndGetDatasource(datasourceId); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + OnlineDatasource datasource = datasourceResult.getData(); + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + OnlineTable masterTable = datasource.getMasterTable(); + ResponseResult> relationListResult = + onlineOperationHelper.verifyAndGetRelationList(datasourceId, null); + if (!relationListResult.isSuccess()) { + return ResponseResult.errorFrom(relationListResult); + } + List allRelationList = relationListResult.getData(); + List oneToOneRelationList = allRelationList.stream() + .filter(r -> r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList()); + Map result = + onlineOperationService.getMasterData(masterTable, oneToOneRelationList, allRelationList, dataId); + return ResponseResult.success(result); + } + + /** + * 根据数据源关联Id为动态表单查询数据详情。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 数据源Id。 + * @param relationId 一对多关联Id。 + * @param dataId 一对多关联数据主键Id。 + * @return 详情结果。 + */ + @GetMapping("/viewByOneToManyRelationId/{datasourceVariableName}") + public ResponseResult> viewByOneToManyRelationId( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @RequestParam Long datasourceId, + @RequestParam Long relationId, + @RequestParam String dataId) { + String errorMessage; + OnlineDatasource datasource = onlineDatasourceService.getById(datasourceId); + if (datasource == null) { + errorMessage = "数据验证失败,数据源Id并不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + ResponseResult relationResult = + onlineOperationHelper.verifyAndGetOneToManyRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + return ResponseResult.errorFrom(relationResult); + } + OnlineDatasourceRelation relation = relationResult.getData(); + Map result = onlineOperationService.getSlaveData(relation, dataId); + return ResponseResult.success(result); + } + + /** + * 为数据源主表字段下载文件。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 数据源Id。 + * @param dataId 附件所在记录的主键Id。 + * @param fieldName 数据表字段名。 + * @param asImage 是否为图片文件。 + * @param response Http 应答对象。 + */ + @GetMapping("/downloadDatasource/{datasourceVariableName}") + public void downloadDatasource( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @RequestParam Long datasourceId, + @RequestParam(required = false) String dataId, + @RequestParam String fieldName, + @RequestParam String filename, + @RequestParam Boolean asImage, + HttpServletResponse response) throws Exception { + if (MyCommonUtil.existBlankArgument(fieldName, filename, asImage)) { + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + return; + } + ResponseResult datasourceResult = + onlineOperationHelper.verifyAndGetDatasource(datasourceId); + if (!datasourceResult.isSuccess()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, ResponseResult.errorFrom(datasourceResult)); + return; + } + OnlineDatasource datasource = datasourceResult.getData(); + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION)); + return; + } + OnlineTable masterTable = datasource.getMasterTable(); + onlineOperationHelper.doDownload(masterTable, dataId, fieldName, filename, asImage, response); + } + + /** + * 为数据源一对多关联的从表字段下载文件。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 数据源Id。 + * @param relationId 数据源的一对多关联Id。 + * @param dataId 附件所在记录的主键Id。 + * @param fieldName 数据表字段名。 + * @param asImage 是否为图片文件。 + * @param response Http 应答对象。 + */ + @GetMapping("/downloadOneToManyRelation/{datasourceVariableName}") + public void downloadOneToManyRelation( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @RequestParam Long datasourceId, + @RequestParam Long relationId, + @RequestParam(required = false) String dataId, + @RequestParam String fieldName, + @RequestParam String filename, + @RequestParam Boolean asImage, + HttpServletResponse response) throws Exception { + String errorMessage; + OnlineDatasource datasource = onlineDatasourceService.getById(datasourceId); + if (datasource == null) { + errorMessage = "数据验证失败,数据源Id并不存在!"; + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage)); + return; + } + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION)); + return; + } + ResponseResult relationResult = + onlineOperationHelper.verifyAndGetOneToManyRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, ResponseResult.errorFrom(relationResult)); + return; + } + OnlineTable slaveTable = relationResult.getData().getSlaveTable(); + onlineOperationHelper.doDownload(slaveTable, dataId, fieldName, filename, asImage, response); + } + + /** + * 为数据源主表字段上传文件。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 数据源Id。 + * @param fieldName 数据表字段名。 + * @param asImage 是否为图片文件。 + * @param uploadFile 上传文件对象。 + */ + @PostMapping("/uploadDatasource/{datasourceVariableName}") + public void uploadDatasource( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @RequestParam Long datasourceId, + @RequestParam String fieldName, + @RequestParam Boolean asImage, + @RequestParam("uploadFile") MultipartFile uploadFile) throws Exception { + String errorMessage; + ResponseResult datasourceResult = + onlineOperationHelper.verifyAndGetDatasource(datasourceId); + if (!datasourceResult.isSuccess()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, ResponseResult.errorFrom(datasourceResult)); + return; + } + OnlineDatasource datasource = datasourceResult.getData(); + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION)); + return; + } + OnlineTable masterTable = datasource.getMasterTable(); + onlineOperationHelper.doUpload(masterTable, fieldName, asImage, uploadFile); + } + + /** + * 为数据源一对多关联的从表字段上传文件。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 数据源Id。 + * @param relationId 数据源的一对多关联Id。 + * @param fieldName 数据表字段名。 + * @param asImage 是否为图片文件。 + * @param uploadFile 上传文件对象。 + */ + @PostMapping("/uploadOneToManyRelation/{datasourceVariableName}") + public void uploadOneToManyRelation( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @RequestParam Long datasourceId, + @RequestParam Long relationId, + @RequestParam String fieldName, + @RequestParam Boolean asImage, + @RequestParam("uploadFile") MultipartFile uploadFile) throws Exception { + String errorMessage; + OnlineDatasource datasource = onlineDatasourceService.getById(datasourceId); + if (datasource == null) { + errorMessage = "数据验证失败,数据源Id并不存在!"; + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage)); + return; + } + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION)); + return; + } + ResponseResult relationResult = + onlineOperationHelper.verifyAndGetOneToManyRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, ResponseResult.errorFrom(relationResult)); + return; + } + OnlineTable slaveTable = relationResult.getData().getSlaveTable(); + onlineOperationHelper.doUpload(slaveTable, fieldName, asImage, uploadFile); + } + + /** + * 根据数据源Id,以及接口参数,为动态表单查询数据列表。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 数据源Id。 + * @param filterDtoList 多虑数据对象列表。 + * @param orderParam 排序对象。 + * @param pageParam 分页对象。 + * @return 查询结果。 + */ + @PostMapping("/listByDatasourceId/{datasourceVariableName}") + public ResponseResult>> listByDatasourceId( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @MyRequestBody(required = true) Long datasourceId, + @MyRequestBody(elementType = OnlineFilterDto.class) List filterDtoList, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + String errorMessage; + // 1. 验证数据源及其关联 + ResponseResult datasourceResult = + onlineOperationHelper.verifyAndGetDatasource(datasourceId); + if (!datasourceResult.isSuccess()) { + return ResponseResult.errorFrom(datasourceResult); + } + OnlineDatasource datasource = datasourceResult.getData(); + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + OnlineTable masterTable = datasource.getMasterTable(); + ResponseResult> relationListResult = + onlineOperationHelper.verifyAndGetRelationList(datasourceId, null); + if (!relationListResult.isSuccess()) { + return ResponseResult.errorFrom(relationListResult); + } + List allRelationList = relationListResult.getData(); + // 2. 验证数据过滤对象中的表名和字段,确保没有sql注入。 + ResponseResult filterDtoListResult = this.verifyFilterDtoList(filterDtoList); + if (!filterDtoListResult.isSuccess()) { + return ResponseResult.errorFrom(filterDtoListResult); + } + // 3. 解析排序参数,同时确保没有sql注入。 + Map tableMap = new HashMap<>(4); + tableMap.put(masterTable.getTableName(), masterTable); + List oneToOneRelationList = relationListResult.getData().stream() + .filter(r -> r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(oneToOneRelationList)) { + Map relationTableMap = oneToOneRelationList.stream() + .map(OnlineDatasourceRelation::getSlaveTable).collect(Collectors.toMap(OnlineTable::getTableName, c -> c)); + tableMap.putAll(relationTableMap); + } + ResponseResult orderByResult = this.makeOrderBy(orderParam, masterTable, tableMap); + if (!orderByResult.isSuccess()) { + return ResponseResult.errorFrom(orderByResult); + } + String orderBy = orderByResult.getData(); + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + List> resultList = onlineOperationService.getMasterDataList( + masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(resultList)); + } + + /** + * 根据数据源Id和数据源关联Id,以及接口参数,为动态表单查询该一对多关联的数据列表。 + * + * @param datasourceVariableName 数据源名称。 + * @param datasourceId 数据源Id。 + * @param relationId 数据源的一对多关联Id。 + * @param filterDtoList 多虑数据对象列表。 + * @param orderParam 排序对象。 + * @param pageParam 分页对象。 + * @return 查询结果。 + */ + @PostMapping("/listByOneToManyRelationId/{datasourceVariableName}") + public ResponseResult>> listByOneToManyRelationId( + @PathVariable("datasourceVariableName") String datasourceVariableName, + @MyRequestBody(required = true) Long datasourceId, + @MyRequestBody(required = true) Long relationId, + @MyRequestBody(elementType = OnlineFilterDto.class) List filterDtoList, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + String errorMessage; + OnlineDatasource datasource = onlineDatasourceService.getById(datasourceId); + if (datasource == null) { + errorMessage = "数据验证失败,数据源Id并不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!datasource.getVariableName().equals(datasourceVariableName)) { + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); + return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION); + } + ResponseResult relationResult = + onlineOperationHelper.verifyAndGetOneToManyRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + return ResponseResult.errorFrom(relationResult); + } + OnlineDatasourceRelation relation = relationResult.getData(); + OnlineTable slaveTable = relation.getSlaveTable(); + // 验证数据过滤对象中的表名和字段,确保没有sql注入。 + ResponseResult filterDtoListResult = this.verifyFilterDtoList(filterDtoList); + if (!filterDtoListResult.isSuccess()) { + return ResponseResult.errorFrom(filterDtoListResult); + } + Map tableMap = new HashMap<>(1); + tableMap.put(slaveTable.getTableName(), slaveTable); + if (CollUtil.isNotEmpty(orderParam)) { + for (MyOrderParam.OrderInfo orderInfo : orderParam) { + orderInfo.setFieldName(StrUtil.removePrefix(orderInfo.getFieldName(), + relation.getVariableName() + OnlineConstant.RELATION_TABLE_COLUMN_SEPARATOR)); + } + } + ResponseResult orderByResult = this.makeOrderBy(orderParam, slaveTable, tableMap); + if (!orderByResult.isSuccess()) { + return ResponseResult.errorFrom(orderByResult); + } + String orderBy = orderByResult.getData(); + // 分页。 + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + List> resultList = + onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(resultList)); + } + + /** + * 查询字典数据,并以字典的约定方式,返回数据结果集。 + * + * @param dictId 字典Id。 + * @param filterDtoList 字典的过滤对象列表。 + * @return 字典数据列表。 + */ + @PostMapping("/listDict") + public ResponseResult>> listDict( + @MyRequestBody(required = true) Long dictId, + @MyRequestBody(elementType = OnlineFilterDto.class) List filterDtoList) { + String errorMessage; + OnlineDict dict = onlineDictService.getById(dictId); + if (dict == null) { + errorMessage = "数据验证失败,字典Id并不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!dict.getDictType().equals(DictType.TABLE)) { + errorMessage = "数据验证失败,该接口仅支持数据表字典!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (CollUtil.isNotEmpty(filterDtoList)) { + for (OnlineFilterDto filter : filterDtoList) { + if (!this.checkTableAndColumnName(filter.getColumnName())) { + errorMessage = "数据验证失败,过滤字段名 [" + + filter.getColumnName() + " ] 包含 (数字、字母和下划线) 之外的非法字符!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + } + List> resultList = onlineOperationService.getDictDataList(dict, filterDtoList); + return ResponseResult.success(resultList); + } + + private ResponseResult verifyFilterDtoList(List filterDtoList) { + if (CollUtil.isEmpty(filterDtoList)) { + return ResponseResult.success(); + } + String errorMessage; + for (OnlineFilterDto filter : filterDtoList) { + if (!this.checkTableAndColumnName(filter.getTableName())) { + errorMessage = "数据验证失败,过滤表名 [" + + filter.getColumnName() + " ] 包含 (数字、字母和下划线) 之外的非法字符!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!this.checkTableAndColumnName(filter.getColumnName())) { + errorMessage = "数据验证失败,过滤字段名 [" + + filter.getColumnName() + " ] 包含 (数字、字母和下划线) 之外的非法字符!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + return ResponseResult.success(); + } + + private boolean checkTableAndColumnName(String name) { + if (StrUtil.isBlank(name)) { + return true; + } + for (int i = 0; i < name.length(); i++) { + char c = name.charAt(i); + if (!CharUtil.isLetterOrNumber(c) && !CharUtil.equals('_', c, false)) { + return false; + } + } + return true; + } + + private ResponseResult makeOrderBy( + MyOrderParam orderParam, OnlineTable masterTable, Map tableMap) { + if (CollUtil.isEmpty(orderParam)) { + return ResponseResult.success(null); + } + String errorMessage; + StringBuilder sb = new StringBuilder(128); + for (int i = 0; i < orderParam.size(); i++) { + MyOrderParam.OrderInfo orderInfo = orderParam.get(i); + boolean found = false; + String[] orderArray = StrUtil.splitToArray(orderInfo.getFieldName(), '.'); + // 如果没有前缀,我们就可以默认为主表的字段。 + if (orderArray.length == 1) { + for (OnlineColumn column : masterTable.getColumnMap().values()) { + if (column.getColumnName().equals(orderArray[0])) { + sb.append(masterTable.getTableName()).append(".").append(column.getColumnName()); + if (!orderInfo.getAsc()) { + sb.append(" DESC"); + } + if (i != orderParam.size() - 1) { + sb.append(", "); + } + found = true; + break; + } + } + if (!found) { + errorMessage = "数据验证失败,排序字段 [" + + orderInfo.getFieldName() + "] 在主表 [" + masterTable.getTableName() + "] 中并不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } else { + String tableName = orderArray[0]; + String columnName = orderArray[1]; + OnlineTable table = tableMap.get(tableName); + if (table == null) { + errorMessage = "数据验证失败,排序字段 [" + + orderInfo.getFieldName() + "] 的数据表 [" + tableName + "] 并不属于当前数据源!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + for (OnlineColumn column : table.getColumnMap().values()) { + if (column.getColumnName().equals(columnName)) { + sb.append(tableName).append(".").append(columnName); + if (!orderInfo.getAsc()) { + sb.append(" DESC"); + } + if (i != orderParam.size() - 1) { + sb.append(", "); + } + found = true; + break; + } + } + if (!found) { + errorMessage = "数据验证失败,排序字段 [" + + orderInfo.getFieldName() + "] 在数据表 [" + tableName + "] 中并不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + } + return ResponseResult.success(sb.toString()); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineColumnMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineColumnMapper.java new file mode 100644 index 00000000..60f7c604 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineColumnMapper.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineColumn; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 字段数据数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineColumnMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param onlineColumnFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlineColumnList( + @Param("onlineColumnFilter") OnlineColumn onlineColumnFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineColumnRuleMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineColumnRuleMapper.java new file mode 100644 index 00000000..f411c5a5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineColumnRuleMapper.java @@ -0,0 +1,25 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineColumnRule; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Set; + +/** + * 数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineColumnRuleMapper extends BaseDaoMapper { + + /** + * 获取指定字段Id关联的字段规则对象列表,同时还关联了每个OnlineRule对象。 + * + * @param columnIdSet 字段Id集合。 + * @return 关联的字段规则对象列表。 + */ + List getOnlineColumnRuleListByColumnIds(@Param("columnIdSet") Set columnIdSet); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDatasourceMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDatasourceMapper.java new file mode 100644 index 00000000..5df3ad52 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDatasourceMapper.java @@ -0,0 +1,61 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineDatasource; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Set; + +/** + * 数据模型数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineDatasourceMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param onlineDatasourceFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlineDatasourceList( + @Param("onlineDatasourceFilter") OnlineDatasource onlineDatasourceFilter, @Param("orderBy") String orderBy); + + /** + * 根据关联主表Id,获取关联从表数据列表。 + * + * @param pageId 关联主表Id。 + * @param onlineDatasourceFilter 从表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 从表数据列表。 + */ + List getOnlineDatasourceListByPageId( + @Param("pageId") Long pageId, + @Param("onlineDatasourceFilter") OnlineDatasource onlineDatasourceFilter, + @Param("orderBy") String orderBy); + + /** + * 根据关联主表Id,获取关联从表中没有和主表建立关联关系的数据列表。 + * + * @param pageId 关联主表Id。 + * @param onlineDatasourceFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 与主表没有建立关联的从表数据列表。 + */ + List getNotInOnlineDatasourceListByPageId( + @Param("pageId") Long pageId, + @Param("onlineDatasourceFilter") OnlineDatasource onlineDatasourceFilter, + @Param("orderBy") String orderBy); + + /** + * 根据在线表单Id集合,获取关联的在线数据源对象列表。 + * + * @param formIdSet 在线表单Id集合。 + * @return 与参数表单Id关联的数据源列表。 + */ + List getOnlineDatasourceListByFormIds(@Param("formIdSet") Set formIdSet); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDatasourceRelationMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDatasourceRelationMapper.java new file mode 100644 index 00000000..a29cf4c1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDatasourceRelationMapper.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineDatasourceRelation; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 数据关联数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineDatasourceRelationMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlineDatasourceRelationList( + @Param("filter") OnlineDatasourceRelation filter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDatasourceTableMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDatasourceTableMapper.java new file mode 100644 index 00000000..5ff316d0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDatasourceTableMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineDatasourceTable; + +/** + * 数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineDatasourceTableMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDblinkMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDblinkMapper.java new file mode 100644 index 00000000..a63f8c30 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDblinkMapper.java @@ -0,0 +1,113 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineDblink; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +/** + * 数据库链接数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineDblinkMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param onlineDblinkFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlineDblinkList( + @Param("onlineDblinkFilter") OnlineDblink onlineDblinkFilter, @Param("orderBy") String orderBy); + + /** + * 获取当前数据库链接下的所有用于动态表单的表。 + * + * @param prefix 动态表单所使用的表的前缀。如果为空,则返回所有数据表。 + * @return 所有用于动态表单的表。 + */ + @Select("") + List> getTableListWithPrefix(@Param("prefix") String prefix); + + /** + * 获取当前数据库链接下指定数据库表的数据。 + * + * @param tableName 数据库表名。 + * @return 表数据。 + */ + @Select("SELECT \n" + + " table_name tableName, \n" + + " table_comment tableComment, \n" + + " create_time createTime \n" + + "FROM \n" + + " information_schema.tables \n" + + "WHERE table_schema = (SELECT database()) AND table_name = #{tableName}") + Map getTableByName(@Param("tableName") String tableName); + + /** + * 获取指定表的字段列表。 + * + * @param tableName 指定的表名。 + * @return 指定表的字段列表。 + */ + @Select("SELECT \n" + + " column_name columnName, \n" + + " data_type columnType, \n" + + " column_type fullColumnType, \n" + + " column_comment columnComment, \n" + + " CASE WHEN column_key = 'PRI' THEN 1 ELSE 0 END AS primaryKey, \n" + + " is_nullable nullable, \n" + + " ordinal_position columnShowOrder, \n" + + " extra, \n" + + " CHARACTER_MAXIMUM_LENGTH stringPrecision, \n" + + " numeric_precision numericPrecision, \n" + + " COLUMN_DEFAULT columnDefault \n" + + "FROM information_schema.columns \n" + + "WHERE table_name = #{tableName} \n" + + " AND table_schema = (SELECT database()) ORDER BY ordinal_position") + List> getTableColumnList(@Param("tableName") String tableName); + + /** + * 获取指定表的字段对象。 + * + * @param tableName 指定的表名。 + * @param columnName 指定的字段名。 + * @return 指定表的字段。 + */ + @Select("SELECT \n" + + " column_name columnName, \n" + + " data_type columnType, \n" + + " column_type fullColumnType, \n" + + " column_comment columnComment, \n" + + " CASE WHEN column_key = 'PRI' THEN 1 ELSE 0 END AS primaryKey, \n" + + " is_nullable nullable, \n" + + " ordinal_position columnShowOrder, \n" + + " extra, \n" + + " CHARACTER_MAXIMUM_LENGTH stringPrecision, \n" + + " numeric_precision numericPrecision, \n" + + " COLUMN_DEFAULT columnDefault \n" + + "FROM information_schema.columns \n" + + "WHERE table_name = #{tableName} \n" + + " AND column_name = #{columnName} \n" + + " AND table_schema = (SELECT database()) ORDER BY ordinal_position") + Map getTableColumnByName( + @Param("tableName") String tableName, @Param("columnName") String columnName); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDictMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDictMapper.java new file mode 100644 index 00000000..96699b58 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineDictMapper.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineDict; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 在线表单字典数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineDictMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param onlineDictFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlineDictList( + @Param("onlineDictFilter") OnlineDict onlineDictFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineFormDatasourceMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineFormDatasourceMapper.java new file mode 100644 index 00000000..c4511783 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineFormDatasourceMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineFormDatasource; + +/** + * 在线表单与数据源多对多关联的数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineFormDatasourceMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineFormMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineFormMapper.java new file mode 100644 index 00000000..d1ee9853 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineFormMapper.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineForm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 在线表单数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineFormMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param onlineFormFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlineFormList( + @Param("onlineFormFilter") OnlineForm onlineFormFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineOperationMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineOperationMapper.java new file mode 100644 index 00000000..429832cc --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineOperationMapper.java @@ -0,0 +1,228 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.online.dto.OnlineFilterDto; +import com.flow.demo.common.online.object.ColumnData; +import com.flow.demo.common.online.object.JoinTableInfo; +import org.apache.ibatis.annotations.*; + +import java.util.List; +import java.util.Map; + +/** + * 在线表单运行时数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Mapper +public interface OnlineOperationMapper { + + /** + * 插入新数据。 + * + * @param tableName 数据表名。 + * @param columnNames 字段名列表。 + * @param columnValueList 字段值列表。 + */ + @Insert("") + void insert( + @Param("tableName") String tableName, + @Param("columnNames") String columnNames, + @Param("columnValueList") List columnValueList); + + /** + * 更新表数据。 + * + * @param tableName 数据表名。 + * @param updateColumnList 更新字段列表。 + * @param whereColumnList 过滤字段列表。 + * @param dataPermFilter 数据权限过滤字符串。 + * @return 更新行数。 + */ + @Update("") + int update( + @Param("tableName") String tableName, + @Param("updateColumnList") List updateColumnList, + @Param("whereColumnList") List whereColumnList, + @Param("dataPermFilter") String dataPermFilter); + + /** + * 删除指定数据。 + * + * @param tableName 表名。 + * @param filterList SQL过滤条件列表。 + * @param dataPermFilter 数据权限过滤字符串。 + * @return 删除行数。 + */ + @Delete("") + int delete( + @Param("tableName") String tableName, + @Param("filterList") List filterList, + @Param("dataPermFilter") String dataPermFilter); + + /** + * 执行动态查询,并返回查询结果集。 + * + * @param masterTableName 主表名称。 + * @param joinInfoList 关联表信息列表。 + * @param selectFields 返回字段列表,逗号分隔。 + * @param filterList SQL过滤条件列表。 + * @param dataPermFilter 数据权限过滤字符串。 + * @param orderBy 排序字符串。 + * @return 查询结果集。 + */ + @Select("") + List> getList( + @Param("masterTableName") String masterTableName, + @Param("joinInfoList") List joinInfoList, + @Param("selectFields") String selectFields, + @Param("filterList") List filterList, + @Param("dataPermFilter") String dataPermFilter, + @Param("orderBy") String orderBy); + + /** + * 以字典键值对的方式返回数据。 + * + * @param tableName 表名称。 + * @param selectFields 返回字段列表,逗号分隔。 + * @param filterList SQL过滤条件列表。 + * @param dataPermFilter 数据权限过滤字符串。 + * @return 查询结果集。 + */ + @Select("") + List> getDictList( + @Param("tableName") String tableName, + @Param("selectFields") String selectFields, + @Param("filterList") List filterList, + @Param("dataPermFilter") String dataPermFilter); + + /** + * 根据指定的表名、显示字段列表、过滤条件字符串和分组字段,返回聚合计算后的查询结果。 + * + * @param selectTable 表名称。 + * @param selectFields 返回字段列表,逗号分隔。 + * @param whereClause SQL常量形式的条件从句。 + * @param groupBy 分组字段列表,逗号分隔。 + * @return 对象可选字段Map列表。 + */ + @Select("") + List> getGroupedListByCondition( + @Param("selectTable") String selectTable, + @Param("selectFields") String selectFields, + @Param("whereClause") String whereClause, + @Param("groupBy") String groupBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlinePageDatasourceMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlinePageDatasourceMapper.java new file mode 100644 index 00000000..44a337dd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlinePageDatasourceMapper.java @@ -0,0 +1,13 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlinePageDatasource; + +/** + * 在线表单页面和数据源关联对象的数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlinePageDatasourceMapper extends BaseDaoMapper { +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlinePageMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlinePageMapper.java new file mode 100644 index 00000000..720ce089 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlinePageMapper.java @@ -0,0 +1,35 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlinePage; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 在线表单页面数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlinePageMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param onlinePageFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlinePageList( + @Param("onlinePageFilter") OnlinePage onlinePageFilter, @Param("orderBy") String orderBy); + + /** + /** + * 根据数据源Id,返回使用该数据源的OnlinePage对象。 + * + * @param datasourceId 数据源Id。 + * @return 使用该数据源的页面列表。 + */ + List getOnlinePageListByDatasourceId(@Param("datasourceId") Long datasourceId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineRuleMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineRuleMapper.java new file mode 100644 index 00000000..b49a07c2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineRuleMapper.java @@ -0,0 +1,52 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineRule; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 验证规则数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineRuleMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param onlineRuleFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlineRuleList( + @Param("onlineRuleFilter") OnlineRule onlineRuleFilter, @Param("orderBy") String orderBy); + + /** + * 根据关联主表Id,获取关联从表数据列表。 + * + * @param columnId 关联主表Id。 + * @param onlineRuleFilter 从表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 从表数据列表。 + */ + List getOnlineRuleListByColumnId( + @Param("columnId") Long columnId, + @Param("onlineRuleFilter") OnlineRule onlineRuleFilter, + @Param("orderBy") String orderBy); + + /** + * 根据关联主表Id,获取关联从表中没有和主表建立关联关系的数据列表。 + * + * @param columnId 关联主表Id。 + * @param onlineRuleFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 与主表没有建立关联的从表数据列表。 + */ + List getNotInOnlineRuleListByColumnId( + @Param("columnId") Long columnId, + @Param("onlineRuleFilter") OnlineRule onlineRuleFilter, + @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineTableMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineTableMapper.java new file mode 100644 index 00000000..de884fe2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineTableMapper.java @@ -0,0 +1,34 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineTable; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 数据表数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineTableMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param onlineTableFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlineTableList( + @Param("onlineTableFilter") OnlineTable onlineTableFilter, @Param("orderBy") String orderBy); + + /** + * 根据数据源Id,获取该数据源及其关联所引用的数据表列表。 + * + * @param datasourceId 指定的数据源Id。 + * @return 该数据源及其关联所引用的数据表列表。 + */ + List getOnlineTableListByDatasourceId(@Param("datasourceId") Long datasourceId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineVirtualColumnMapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineVirtualColumnMapper.java new file mode 100644 index 00000000..9df5f715 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/OnlineVirtualColumnMapper.java @@ -0,0 +1,26 @@ +package com.flow.demo.common.online.dao; + +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.online.model.OnlineVirtualColumn; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 虚拟字段数据操作访问接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineVirtualColumnMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param onlineVirtualColumnFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getOnlineVirtualColumnList( + @Param("onlineVirtualColumnFilter") OnlineVirtualColumn onlineVirtualColumnFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineColumnMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineColumnMapper.xml new file mode 100644 index 00000000..f225b2f2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineColumnMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_online_column.table_id = #{onlineColumnFilter.tableId} + + + AND zz_online_column.column_name = #{onlineColumnFilter.columnName} + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineColumnRuleMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineColumnRuleMapper.xml new file mode 100644 index 00000000..c148f826 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineColumnRuleMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDatasourceMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDatasourceMapper.xml new file mode 100644 index 00000000..a0cae58a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDatasourceMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_online_datasource.datasource_name = #{onlineDatasourceFilter.datasourceName} + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDatasourceRelationMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDatasourceRelationMapper.xml new file mode 100644 index 00000000..db15bdea --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDatasourceRelationMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_online_datasource_relation.relation_name = #{filter.relationName} + + + AND zz_online_datasource_relation.datasource_id = #{filter.datasourceId} + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDatasourceTableMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDatasourceTableMapper.xml new file mode 100644 index 00000000..950cd44d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDatasourceTableMapper.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDblinkMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDblinkMapper.xml new file mode 100644 index 00000000..934d9c55 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDblinkMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDictMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDictMapper.xml new file mode 100644 index 00000000..4edf13c3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineDictMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_online_dict.dict_name = #{onlineDictFilter.dictName} + + + AND zz_online_dict.dict_type = #{onlineDictFilter.dictType} + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineFormDatasourceMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineFormDatasourceMapper.xml new file mode 100644 index 00000000..238817c1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineFormDatasourceMapper.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineFormMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineFormMapper.xml new file mode 100644 index 00000000..1b149915 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineFormMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_online_form.page_id = #{onlineFormFilter.pageId} + + + AND zz_online_form.form_code = #{onlineFormFilter.formCode} + + + AND zz_online_form.form_name = #{onlineFormFilter.formName} + + + AND zz_online_form.form_type = #{onlineFormFilter.formType} + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlinePageDatasourceMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlinePageDatasourceMapper.xml new file mode 100644 index 00000000..717508a7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlinePageDatasourceMapper.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlinePageMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlinePageMapper.xml new file mode 100644 index 00000000..b1544811 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlinePageMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_online_page.page_code = #{onlinePageFilter.pageCode} + + + AND zz_online_page.page_name = #{onlinePageFilter.pageName} + + + AND zz_online_page.page_type = #{onlinePageFilter.pageType} + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineRuleMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineRuleMapper.xml new file mode 100644 index 00000000..c4e90699 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineRuleMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + AND zz_online_rule.deleted_flag = ${@com.flow.demo.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineTableMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineTableMapper.xml new file mode 100644 index 00000000..d940a3d3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineTableMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + AND zz_online_table.table_name = #{onlineTableFilter.tableName} + + + AND zz_online_table.model_name = #{onlineTableFilter.modelName} + + + AND zz_online_table.dblink_id = #{onlineTableFilter.dblinkId} + + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineVirtualColumnMapper.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineVirtualColumnMapper.xml new file mode 100644 index 00000000..7a5ca29c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dao/mapper/OnlineVirtualColumnMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_online_virtual_column.datasource_id = #{onlineVirtualColumnFilter.datasourceId} + + + AND zz_online_virtual_column.relation_id = #{onlineVirtualColumnFilter.relationId} + + + AND zz_online_virtual_column.table_id = #{onlineVirtualColumnFilter.tableId} + + + AND zz_online_virtual_column.aggregation_column_id = #{onlineVirtualColumnFilter.aggregationColumnId} + + + AND zz_online_virtual_column.virtual_type = #{onlineVirtualColumnFilter.virtualType} + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineColumnDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineColumnDto.java new file mode 100644 index 00000000..50f33bf5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineColumnDto.java @@ -0,0 +1,137 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.model.constant.FieldFilterType; +import com.flow.demo.common.online.model.constant.FieldKind; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 在线表单数据表字段Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineColumnDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long columnId; + + /** + * 字段名。 + */ + @NotBlank(message = "数据验证失败,字段名不能为空!") + private String columnName; + + /** + * 数据表Id。 + */ + @NotNull(message = "数据验证失败,数据表Id不能为空!") + private Long tableId; + + /** + * 数据表中的字段类型。 + */ + @NotBlank(message = "数据验证失败,数据表中的字段类型不能为空!") + private String columnType; + + /** + * 数据表中的完整字段类型(包括了精度和刻度)。 + */ + @NotBlank(message = "数据验证失败,数据表中的完整字段类型(包括了精度和刻度)不能为空!") + private String fullColumnType; + + /** + * 是否为主键。 + */ + @NotNull(message = "数据验证失败,是否为主键不能为空!") + private Boolean primaryKey; + + /** + * 是否是自增主键(0: 不是 1: 是)。 + */ + @NotNull(message = "数据验证失败,是否是自增主键(0: 不是 1: 是)不能为空!") + private Boolean autoIncrement; + + /** + * 是否可以为空 (0: 不可以为空 1: 可以为空)。 + */ + @NotNull(message = "数据验证失败,是否可以为空 (0: 不可以为空 1: 可以为空)不能为空!") + private Boolean nullable; + + /** + * 缺省值。 + */ + private String columnDefault; + + /** + * 字段在数据表中的显示位置。 + */ + @NotNull(message = "数据验证失败,字段在数据表中的显示位置不能为空!") + private Integer columnShowOrder; + + /** + * 数据表中的字段注释。 + */ + private String columnComment; + + /** + * 对象映射字段名称。 + */ + @NotBlank(message = "数据验证失败,对象映射字段名称不能为空!") + private String objectFieldName; + + /** + * 对象映射字段类型。 + */ + @NotBlank(message = "数据验证失败,对象映射字段类型不能为空!") + private String objectFieldType; + + /** + * 过滤类型字段。 + */ + @NotNull(message = "数据验证失败,过滤类型字段不能为空!", groups = {UpdateGroup.class}) + @ConstDictRef(constDictClass = FieldFilterType.class, message = "数据验证失败,过滤类型字段为无效值!") + private Integer filterType; + + /** + * 是否是主键的父Id。 + */ + @NotNull(message = "数据验证失败,是否是主键的父Id不能为空!") + private Boolean parentKey; + + /** + * 是否部门过滤字段。 + */ + @NotNull(message = "数据验证失败,是否部门过滤字段标记不能为空!") + private Boolean deptFilter; + + /** + * 是否用户过滤字段。 + */ + @NotNull(message = "数据验证失败,是否用户过滤字段标记不能为空!") + private Boolean userFilter; + + /** + * 字段类别。 + */ + @ConstDictRef(constDictClass = FieldKind.class, message = "数据验证失败,字段类别为无效值!") + private Integer fieldKind; + + /** + * 包含的文件文件数量,0表示无限制。 + */ + private Integer maxFileCount; + + /** + * 字典Id。 + */ + private Long dictId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineColumnRuleDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineColumnRuleDto.java new file mode 100644 index 00000000..c31e2fc1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineColumnRuleDto.java @@ -0,0 +1,33 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 在线表单数据表字段规则和字段多对多关联Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineColumnRuleDto { + + /** + * 字段Id。 + */ + @NotNull(message = "数据验证失败,字段Id不能为空!", groups = {UpdateGroup.class}) + private Long columnId; + + /** + * 规则Id。 + */ + @NotNull(message = "数据验证失败,规则Id不能为空!", groups = {UpdateGroup.class}) + private Long ruleId; + + /** + * 规则属性数据。 + */ + private String propDataJson; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDatasourceDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDatasourceDto.java new file mode 100644 index 00000000..33ad6147 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDatasourceDto.java @@ -0,0 +1,54 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.AddGroup; +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 在线表单的数据源Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineDatasourceDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long datasourceId; + + /** + * 数据源名称。 + */ + @NotBlank(message = "数据验证失败,数据源名称不能为空!") + private String datasourceName; + + /** + * 数据源变量名,会成为数据访问url的一部分。 + */ + @NotBlank(message = "数据验证失败,数据源变量名不能为空!") + private String variableName; + + /** + * 主表所在的数据库链接Id。 + */ + @NotNull(message = "数据验证失败,数据库链接Id不能为空!") + private Long dblinkId; + + /** + * 主表Id。 + */ + @NotNull(message = "数据验证失败,主表Id不能为空!", groups = {UpdateGroup.class}) + private Long masterTableId; + + /** + * 主表表名。 + */ + @NotBlank(message = "数据验证失败,主表名不能为空!", groups = {AddGroup.class}) + private String masterTableName; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDatasourceRelationDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDatasourceRelationDto.java new file mode 100644 index 00000000..67ed71df --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDatasourceRelationDto.java @@ -0,0 +1,93 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.AddGroup; +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.model.constant.RelationType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 在线表单的数据源关联Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineDatasourceRelationDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long relationId; + + /** + * 关联名称。 + */ + @NotBlank(message = "数据验证失败,关联名称不能为空!") + private String relationName; + + /** + * 变量名。 + */ + @NotBlank(message = "数据验证失败,变量名不能为空!") + private String variableName; + + /** + * 主数据源Id。 + */ + @NotNull(message = "数据验证失败,主数据源Id不能为空!") + private Long datasourceId; + + /** + * 关联类型。 + */ + @NotNull(message = "数据验证失败,关联类型不能为空!") + @ConstDictRef(constDictClass = RelationType.class, message = "数据验证失败,关联类型为无效值!") + private Integer relationType; + + /** + * 主表关联字段Id。 + */ + @NotNull(message = "数据验证失败,主表关联字段Id不能为空!") + private Long masterColumnId; + + /** + * 从表Id。 + */ + @NotNull(message = "数据验证失败,从表Id不能为空!", groups = {UpdateGroup.class}) + private Long slaveTableId; + + /** + * 从表名。 + */ + @NotBlank(message = "数据验证失败,从表名不能为空!", groups = {AddGroup.class}) + private String slaveTableName; + + /** + * 从表关联字段Id。 + */ + @NotNull(message = "数据验证失败,从表关联字段Id不能为空!", groups = {UpdateGroup.class}) + private Long slaveColumnId; + + /** + * 从表字段名。 + */ + @NotBlank(message = "数据验证失败,从表字段名不能为空!", groups = {AddGroup.class}) + private String slaveColumnName; + + /** + * 是否级联删除标记。 + */ + @NotNull(message = "数据验证失败,是否级联删除标记不能为空!") + private Boolean cascadeDelete; + + /** + * 是否左连接标记。 + */ + @NotNull(message = "数据验证失败,是否左连接标记不能为空!") + private Boolean leftJoin; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDblinkDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDblinkDto.java new file mode 100644 index 00000000..51ef2337 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDblinkDto.java @@ -0,0 +1,46 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 在线表单数据表所在数据库链接Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineDblinkDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long dblinkId; + + /** + * 链接中文名称。 + */ + @NotBlank(message = "数据验证失败,链接中文名称不能为空!") + private String dblinkName; + + /** + * 链接英文名称。 + */ + @NotBlank(message = "数据验证失败,链接英文名称不能为空!") + private String variableName; + + /** + * 链接描述。 + */ + private String dblinkDesc; + + /** + * 数据源配置常量。 + */ + @NotNull(message = "数据验证失败,数据源配置常量不能为空!") + private Integer dblinkConfigConstant; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDictDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDictDto.java new file mode 100644 index 00000000..af259020 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineDictDto.java @@ -0,0 +1,104 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.model.constant.DictType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 在线表单关联的字典Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineDictDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long dictId; + + /** + * 字典名称。 + */ + @NotBlank(message = "数据验证失败,字典名称不能为空!") + private String dictName; + + /** + * 字典类型。 + */ + @NotNull(message = "数据验证失败,字典类型不能为空!") + @ConstDictRef(constDictClass = DictType.class, message = "数据验证失败,字典类型为无效值!") + private Integer dictType; + + /** + * 数据库链接Id。 + */ + private Long dblinkId; + + /** + * 字典表名称。 + */ + private String tableName; + + /** + * 字典表键字段名称。 + */ + private String keyColumnName; + + /** + * 字典表父键字段名称。 + */ + private String parentKeyColumnName; + + /** + * 字典值字段名称。 + */ + private String valueColumnName; + + /** + * 逻辑删除字段。 + */ + private String deletedColumnName; + + /** + * 用户过滤滤字段名称。 + */ + private String userFilterColumnName; + + /** + * 部门过滤字段名称。 + */ + private String deptFilterColumnName; + + /** + * 租户过滤字段名称。 + */ + private String tenantFilterColumnName; + + /** + * 是否树形标记。 + */ + @NotNull(message = "数据验证失败,是否树形标记不能为空!") + private Boolean treeFlag; + + /** + * 获取字典数据的url。 + */ + private String dictListUrl; + + /** + * 根据主键id批量获取字典数据的url。 + */ + private String dictIdsUrl; + + /** + * 字典的JSON数据。 + */ + private String dictDataJson; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineFilterDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineFilterDto.java new file mode 100644 index 00000000..cd141aab --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineFilterDto.java @@ -0,0 +1,51 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.online.model.constant.FieldFilterType; +import lombok.Data; + +import java.util.Set; + +/** + * 在线表单数据过滤参数对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineFilterDto { + + /** + * 表名。 + */ + private String tableName; + + /** + * 过滤字段名。 + */ + private String columnName; + + /** + * 过滤值。 + */ + private Object columnValue; + + /** + * 范围比较的最小值。 + */ + private Object columnValueStart; + + /** + * 范围比较的最大值。 + */ + private Object columnValueEnd; + + /** + * 仅当操作符为IN的时候使用。 + */ + private Set columnValueList; + + /** + * 过滤类型,参考FieldFilterType常量对象。缺省值就是等于过滤了。 + */ + private Integer filterType = FieldFilterType.EQUAL_FILTER; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineFormDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineFormDto.java new file mode 100644 index 00000000..ee1e07d2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineFormDto.java @@ -0,0 +1,79 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.model.constant.FormKind; +import com.flow.demo.common.online.model.constant.FormType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 在线表单Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineFormDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long formId; + + /** + * 页面id。 + */ + @NotNull(message = "数据验证失败,页面id不能为空!") + private Long pageId; + + /** + * 表单编码。 + */ + private String formCode; + + /** + * 表单名称。 + */ + @NotBlank(message = "数据验证失败,表单名称不能为空!") + private String formName; + + /** + * 表单类别。 + */ + @NotNull(message = "数据验证失败,表单类别不能为空!") + @ConstDictRef(constDictClass = FormKind.class, message = "数据验证失败,表单类别为无效值!") + private Integer formKind; + + /** + * 表单类型。 + */ + @NotNull(message = "数据验证失败,表单类型不能为空!") + @ConstDictRef(constDictClass = FormType.class, message = "数据验证失败,表单类型为无效值!") + private Integer formType; + + /** + * 表单主表id。 + */ + @NotNull(message = "数据验证失败,表单主表id不能为空!") + private Long masterTableId; + + /** + * 当前表单关联的数据源Id集合。 + */ + private List datasourceIdList; + + /** + * 表单组件JSON。 + */ + private String widgetJson; + + /** + * 表单参数JSON。 + */ + private String paramsJson; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlinePageDatasourceDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlinePageDatasourceDto.java new file mode 100644 index 00000000..1a134ef7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlinePageDatasourceDto.java @@ -0,0 +1,34 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 在线表单页面和数据源多对多关联Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlinePageDatasourceDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long id; + + /** + * 页面主键Id。 + */ + @NotNull(message = "数据验证失败,页面主键Id不能为空!") + private Long pageId; + + /** + * 数据源主键Id。 + */ + @NotNull(message = "数据验证失败,数据源主键Id不能为空!") + private Long datasourceId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlinePageDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlinePageDto.java new file mode 100644 index 00000000..c7af4bf1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlinePageDto.java @@ -0,0 +1,51 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.model.constant.PageStatus; +import com.flow.demo.common.online.model.constant.PageType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 在线表单所在页面Dto对象。这里我们可以把页面理解为表单的容器。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlinePageDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long pageId; + + /** + * 页面编码。 + */ + private String pageCode; + + /** + * 页面名称。 + */ + @NotBlank(message = "数据验证失败,页面名称不能为空!") + private String pageName; + + /** + * 页面类型。 + */ + @NotNull(message = "数据验证失败,页面类型不能为空!") + @ConstDictRef(constDictClass = PageType.class, message = "数据验证失败,页面类型为无效值!") + private Integer pageType; + + /** + * 页面编辑状态。 + */ + @NotNull(message = "数据验证失败,状态不能为空!") + @ConstDictRef(constDictClass = PageStatus.class, message = "数据验证失败,状态为无效值!") + private Integer status; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineRuleDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineRuleDto.java new file mode 100644 index 00000000..630a8148 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineRuleDto.java @@ -0,0 +1,49 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; +import com.flow.demo.common.online.model.constant.RuleType; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 在线表单数据表字段验证规则Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineRuleDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long ruleId; + + /** + * 规则名称。 + */ + @NotBlank(message = "数据验证失败,规则名称不能为空!") + private String ruleName; + + /** + * 规则类型。 + */ + @NotNull(message = "数据验证失败,规则类型不能为空!") + @ConstDictRef(constDictClass = RuleType.class, message = "数据验证失败,规则类型为无效值!") + private Integer ruleType; + + /** + * 内置规则标记。 + */ + @NotNull(message = "数据验证失败,内置规则标记不能为空!") + private Boolean builtin; + + /** + * 自定义规则的正则表达式。 + */ + private String pattern; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineTableDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineTableDto.java new file mode 100644 index 00000000..0a7fc0fb --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineTableDto.java @@ -0,0 +1,41 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.validator.UpdateGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 在线表单的数据表Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineTableDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long tableId; + + /** + * 表名称。 + */ + @NotBlank(message = "数据验证失败,表名称不能为空!") + private String tableName; + + /** + * 实体名称。 + */ + @NotBlank(message = "数据验证失败,实体名称不能为空!") + private String modelName; + + /** + * 数据库链接Id。 + */ + @NotNull(message = "数据验证失败,数据库链接Id不能为空!") + private Long dblinkId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineVirtualColumnDto.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineVirtualColumnDto.java new file mode 100644 index 00000000..fe4545fa --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/dto/OnlineVirtualColumnDto.java @@ -0,0 +1,88 @@ +package com.flow.demo.common.online.dto; + +import com.flow.demo.common.core.constant.AggregationType; +import com.flow.demo.common.core.validator.ConstDictRef; +import com.flow.demo.common.core.validator.UpdateGroup; + +import com.flow.demo.common.online.model.constant.VirtualType; +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * 在线数据表虚拟字段Dto对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineVirtualColumnDto { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long virtualColumnId; + + /** + * 所在表Id。 + */ + private Long tableId; + + /** + * 字段名称。 + */ + @NotBlank(message = "数据验证失败,字段名称不能为空!") + private String objectFieldName; + + /** + * 属性类型。 + */ + @NotBlank(message = "数据验证失败,属性类型不能为空!") + private String objectFieldType; + + /** + * 字段提示名。 + */ + @NotBlank(message = "数据验证失败,字段提示名不能为空!") + private String columnPrompt; + + /** + * 虚拟字段类型(0: 聚合)。 + */ + @ConstDictRef(constDictClass = VirtualType.class, message = "数据验证失败,虚拟字段类型为无效值!") + @NotNull(message = "数据验证失败,虚拟字段类型(0: 聚合)不能为空!") + private Integer virtualType; + + /** + * 关联数据源Id。 + */ + @NotNull(message = "数据验证失败,关联数据源Id不能为空!") + private Long datasourceId; + + /** + * 关联Id。 + */ + private Long relationId; + + /** + * 聚合字段所在关联表Id。 + */ + private Long aggregationTableId; + + /** + * 关联表聚合字段Id。 + */ + private Long aggregationColumnId; + + /** + * 聚合类型(0: sum 1: count 2: avg 3: min 4: max)。 + */ + @ConstDictRef(constDictClass = AggregationType.class, message = "数据验证失败,虚拟字段聚合计算类型为无效值!") + private Integer aggregationType; + + /** + * 存储过滤条件的json。 + */ + private String whereClauseJson; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineColumn.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineColumn.java new file mode 100644 index 00000000..9302e50f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineColumn.java @@ -0,0 +1,196 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationConstDict; +import com.flow.demo.common.core.annotation.RelationOneToOne; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.model.constant.FieldKind; +import com.flow.demo.common.online.vo.OnlineColumnVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单数据表字段实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_column") +public class OnlineColumn { + + /** + * 主键Id。 + */ + @TableId(value = "column_id") + private Long columnId; + + /** + * 字段名。 + */ + @TableField(value = "column_name") + private String columnName; + + /** + * 数据表Id。 + */ + @TableField(value = "table_id") + private Long tableId; + + /** + * 数据表中的字段类型。 + */ + @TableField(value = "column_type") + private String columnType; + + /** + * 数据表中的完整字段类型(包括了精度和刻度)。 + */ + @TableField(value = "full_column_type") + private String fullColumnType; + + /** + * 是否为主键。 + */ + @TableField(value = "primary_key") + private Boolean primaryKey; + + /** + * 是否是自增主键(0: 不是 1: 是)。 + */ + @TableField(value = "auto_increment") + private Boolean autoIncrement; + + /** + * 是否可以为空 (0: 不可以为空 1: 可以为空)。 + */ + @TableField(value = "nullable") + private Boolean nullable; + + /** + * 缺省值。 + */ + @TableField(value = "column_default") + private String columnDefault; + + /** + * 字段在数据表中的显示位置。 + */ + @TableField(value = "column_show_order") + private Integer columnShowOrder; + + /** + * 数据表中的字段注释。 + */ + @TableField(value = "column_comment") + private String columnComment; + + /** + * 对象映射字段名称。 + */ + @TableField(value = "object_field_name") + private String objectFieldName; + + /** + * 对象映射字段类型。 + */ + @TableField(value = "object_field_type") + private String objectFieldType; + + /** + * 过滤字段类型。 + */ + @TableField(value = "filter_type") + private Integer filterType; + + /** + * 是否是主键的父Id。 + */ + @TableField(value = "parent_key") + private Boolean parentKey; + + /** + * 是否部门过滤字段。 + */ + @TableField(value = "dept_filter") + private Boolean deptFilter; + + /** + * 是否用户过滤字段。 + */ + @TableField(value = "user_filter") + private Boolean userFilter; + + /** + * 字段类别。 + */ + @TableField(value = "field_kind") + private Integer fieldKind; + + /** + * 包含的文件文件数量,0表示无限制。 + */ + @TableField(value = "max_file_count") + private Integer maxFileCount; + + /** + * 字典Id。 + */ + @TableField(value = "dict_id") + private Long dictId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + @RelationConstDict( + masterIdField = "fieldKind", + constantDictClass = FieldKind.class) + @TableField(exist = false) + private Map fieldKindDictMap; + + @RelationOneToOne( + masterIdField = "dictId", + slaveServiceName = "OnlineDictService", + slaveIdField = "dictId", + slaveModelClass = OnlineDict.class, + loadSlaveDict = false) + @TableField(exist = false) + private OnlineDict dictInfo; + + @Mapper + public interface OnlineColumnModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param onlineColumnVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "dictInfo", expression = "java(mapToBean(onlineColumnVo.getDictInfo(), com.flow.demo.common.online.model.OnlineDict.class))") + @Override + OnlineColumn toModel(OnlineColumnVo onlineColumnVo); + /** + * 转换实体对象到VO对象。 + * + * @param onlineColumn 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "dictInfo", expression = "java(beanToMap(onlineColumn.getDictInfo(), false))") + @Override + OnlineColumnVo fromModel(OnlineColumn onlineColumn); + } + public static final OnlineColumnModelMapper INSTANCE = Mappers.getMapper(OnlineColumnModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineColumnRule.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineColumnRule.java new file mode 100644 index 00000000..53de264b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineColumnRule.java @@ -0,0 +1,36 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 在线表单数据表字段规则和字段多对多关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_column_rule") +public class OnlineColumnRule { + + /** + * 字段Id。 + */ + @TableField(value = "column_id") + private Long columnId; + + /** + * 规则Id。 + */ + @TableField(value = "rule_id") + private Long ruleId; + + /** + * 规则属性数据。 + */ + @TableField(value = "prop_data_json") + private String propDataJson; + + @TableField(exist = false) + private OnlineRule onlineRule; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDatasource.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDatasource.java new file mode 100644 index 00000000..14a8dea4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDatasource.java @@ -0,0 +1,107 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationDict; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.vo.OnlineDatasourceVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单的数据源实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_datasource") +public class OnlineDatasource { + + /** + * 主键Id。 + */ + @TableId(value = "datasource_id") + private Long datasourceId; + + /** + * 数据源名称。 + */ + @TableField(value = "datasource_name") + private String datasourceName; + + /** + * 数据源变量名,会成为数据访问url的一部分。 + */ + @TableField(value = "variable_name") + private String variableName; + + /** + * 数据库链接Id。 + */ + @TableField(value = "dblink_id") + private Long dblinkId; + + /** + * 主表Id。 + */ + @TableField(value = "master_table_id") + private Long masterTableId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * datasourceId 的多对多关联表数据对象。 + */ + @TableField(exist = false) + private OnlinePageDatasource onlinePageDatasource; + + @RelationDict( + masterIdField = "masterTableId", + slaveServiceName = "onlineTableService", + slaveModelClass = OnlineTable.class, + slaveIdField = "tableId", + slaveNameField = "tableName") + @TableField(exist = false) + private Map masterTableIdDictMap; + + @TableField(exist = false) + private OnlineTable masterTable; + + @Mapper + public interface OnlineDatasourceModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param onlineDatasourceVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "onlinePageDatasource", expression = "java(mapToBean(onlineDatasourceVo.getOnlinePageDatasource(), com.flow.demo.common.online.model.OnlinePageDatasource.class))") + @Override + OnlineDatasource toModel(OnlineDatasourceVo onlineDatasourceVo); + /** + * 转换实体对象到VO对象。 + * + * @param onlineDatasource 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "onlinePageDatasource", expression = "java(beanToMap(onlineDatasource.getOnlinePageDatasource(), false))") + @Override + OnlineDatasourceVo fromModel(OnlineDatasource onlineDatasource); + } + public static final OnlineDatasourceModelMapper INSTANCE = Mappers.getMapper(OnlineDatasourceModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDatasourceRelation.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDatasourceRelation.java new file mode 100644 index 00000000..3fc589aa --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDatasourceRelation.java @@ -0,0 +1,187 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationConstDict; +import com.flow.demo.common.core.annotation.RelationDict; +import com.flow.demo.common.core.annotation.RelationOneToOne; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.model.constant.RelationType; +import com.flow.demo.common.online.vo.OnlineDatasourceRelationVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单的数据源关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_datasource_relation") +public class OnlineDatasourceRelation { + + /** + * 主键Id。 + */ + @TableId(value = "relation_id") + private Long relationId; + + /** + * 关联名称。 + */ + @TableField(value = "relation_name") + private String relationName; + + /** + * 变量名。 + */ + @TableField(value = "variable_name") + private String variableName; + + /** + * 主数据源Id。 + */ + @TableField(value = "datasource_id") + private Long datasourceId; + + /** + * 关联类型。 + */ + @TableField(value = "relation_type") + private Integer relationType; + + /** + * 主表关联字段Id。 + */ + @TableField(value = "master_column_id") + private Long masterColumnId; + + /** + * 从表Id。 + */ + @TableField(value = "slave_table_id") + private Long slaveTableId; + + /** + * 从表关联字段Id。 + */ + @TableField(value = "slave_column_id") + private Long slaveColumnId; + + /** + * 删除主表的时候是否级联删除一对一和一对多的从表数据,多对多只是删除关联,不受到这个标记的影响。。 + */ + @TableField(value = "cascade_delete") + private Boolean cascadeDelete; + + /** + * 是否左连接。 + */ + @TableField(value = "left_join") + private Boolean leftJoin; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + @RelationOneToOne( + masterIdField = "masterColumnId", + slaveServiceName = "onlineColumnService", + slaveModelClass = OnlineColumn.class, + slaveIdField = "columnId") + @TableField(exist = false) + private OnlineColumn masterColumn; + + @RelationOneToOne( + masterIdField = "slaveTableId", + slaveServiceName = "onlineTableService", + slaveModelClass = OnlineTable.class, + slaveIdField = "tableId") + @TableField(exist = false) + private OnlineTable slaveTable; + + @RelationOneToOne( + masterIdField = "slaveColumnId", + slaveServiceName = "onlineColumnService", + slaveModelClass = OnlineColumn.class, + slaveIdField = "columnId") + @TableField(exist = false) + private OnlineColumn slaveColumn; + + @RelationDict( + masterIdField = "masterColumnId", + slaveServiceName = "onlineColumnService", + equalOneToOneRelationField = "onlineColumn", + slaveModelClass = OnlineColumn.class, + slaveIdField = "columnId", + slaveNameField = "columnName") + @TableField(exist = false) + private Map masterColumnIdDictMap; + + @RelationDict( + masterIdField = "slaveTableId", + slaveServiceName = "onlineTableService", + equalOneToOneRelationField = "onlineTable", + slaveModelClass = OnlineTable.class, + slaveIdField = "tableId", + slaveNameField = "modelName") + @TableField(exist = false) + private Map slaveTableIdDictMap; + + @RelationDict( + masterIdField = "slaveColumnId", + slaveServiceName = "onlineColumnService", + equalOneToOneRelationField = "onlineColumn", + slaveModelClass = OnlineColumn.class, + slaveIdField = "columnId", + slaveNameField = "columnName") + @TableField(exist = false) + private Map slaveColumnIdDictMap; + + @RelationConstDict( + masterIdField = "relationType", + constantDictClass = RelationType.class) + @TableField(exist = false) + private Map relationTypeDictMap; + + @Mapper + public interface OnlineDatasourceRelationModelMapper + extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param onlineDatasourceRelationVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "masterColumn", expression = "java(mapToBean(onlineDatasourceRelationVo.getMasterColumn(), com.flow.demo.common.online.model.OnlineColumn.class))") + @Mapping(target = "slaveTable", expression = "java(mapToBean(onlineDatasourceRelationVo.getSlaveTable(), com.flow.demo.common.online.model.OnlineTable.class))") + @Mapping(target = "slaveColumn", expression = "java(mapToBean(onlineDatasourceRelationVo.getSlaveColumn(), com.flow.demo.common.online.model.OnlineColumn.class))") + @Override + OnlineDatasourceRelation toModel(OnlineDatasourceRelationVo onlineDatasourceRelationVo); + /** + * 转换实体对象到VO对象。 + * + * @param onlineDatasourceRelation 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "masterColumn", expression = "java(beanToMap(onlineDatasourceRelation.getMasterColumn(), false))") + @Mapping(target = "slaveTable", expression = "java(beanToMap(onlineDatasourceRelation.getSlaveTable(), false))") + @Mapping(target = "slaveColumn", expression = "java(beanToMap(onlineDatasourceRelation.getSlaveColumn(), false))") + @Override + OnlineDatasourceRelationVo fromModel(OnlineDatasourceRelation onlineDatasourceRelation); + } + public static final OnlineDatasourceRelationModelMapper INSTANCE = Mappers.getMapper(OnlineDatasourceRelationModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDatasourceTable.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDatasourceTable.java new file mode 100644 index 00000000..911c33b6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDatasourceTable.java @@ -0,0 +1,39 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 数据源及其关联所引用的数据表实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_datasource_table") +public class OnlineDatasourceTable { + + /** + * 主键Id。 + */ + @TableId(value = "id") + private Long id; + + /** + * 数据源Id。 + */ + @TableField(value = "datasource_id") + private Long datasourceId; + + /** + * 数据源关联Id。 + */ + @TableField(value = "relation_id") + private Long relationId; + + /** + * 数据表Id。 + */ + @TableField(value = "table_id") + private Long tableId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDblink.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDblink.java new file mode 100644 index 00000000..32658f20 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDblink.java @@ -0,0 +1,62 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.vo.OnlineDblinkVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.Date; + +/** + * 在线表单数据表所在数据库链接实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_dblink") +public class OnlineDblink { + + /** + * 主键Id。 + */ + @TableId(value = "dblink_id") + private Long dblinkId; + + /** + * 链接中文名称。 + */ + @TableField(value = "dblink_name") + private String dblinkName; + + /** + * 链接英文名称。 + */ + @TableField(value = "variable_name") + private String variableName; + + /** + * 链接描述。 + */ + @TableField(value = "dblink_desc") + private String dblinkDesc; + + /** + * 数据源配置常量。 + */ + @TableField(value = "dblink_config_constant") + private Integer dblinkConfigConstant; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + @Mapper + public interface OnlineDblinkModelMapper extends BaseModelMapper { + } + public static final OnlineDblinkModelMapper INSTANCE = Mappers.getMapper(OnlineDblinkModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDict.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDict.java new file mode 100644 index 00000000..f5c79dde --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineDict.java @@ -0,0 +1,169 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationConstDict; +import com.flow.demo.common.core.annotation.RelationDict; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.model.constant.DictType; +import com.flow.demo.common.online.vo.OnlineDictVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单关联的字典实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_dict") +public class OnlineDict { + + /** + * 主键Id。 + */ + @TableId(value = "dict_id") + private Long dictId; + + /** + * 字典名称。 + */ + @TableField(value = "dict_name") + private String dictName; + + /** + * 字典类型。 + */ + @TableField(value = "dict_type") + private Integer dictType; + + /** + * 数据库链接Id。 + */ + @TableField(value = "dblink_id") + private Long dblinkId; + + /** + * 字典表名称。 + */ + @TableField(value = "table_name") + private String tableName; + + /** + * 字典表键字段名称。 + */ + @TableField(value = "key_column_name") + private String keyColumnName; + + /** + * 字典表父键字段名称。 + */ + @TableField(value = "parent_key_column_name") + private String parentKeyColumnName; + + /** + * 字典值字段名称。 + */ + @TableField(value = "value_column_name") + private String valueColumnName; + + /** + * 逻辑删除字段。 + */ + @TableField(value = "deleted_column_name") + private String deletedColumnName; + + /** + * 用户过滤滤字段名称。 + */ + @TableField(value = "user_filter_column_name") + private String userFilterColumnName; + + /** + * 部门过滤字段名称。 + */ + @TableField(value = "dept_filter_column_name") + private String deptFilterColumnName; + + /** + * 租户过滤字段名称。 + */ + @TableField(value = "tenant_filter_column_name") + private String tenantFilterColumnName; + + /** + * 是否树形标记。 + */ + @TableField(value = "tree_flag") + private Boolean treeFlag; + + /** + * 获取字典数据的url。 + */ + @TableField(value = "dict_list_url") + private String dictListUrl; + + /** + * 根据主键id批量获取字典数据的url。 + */ + @TableField(value = "dict_ids_url") + private String dictIdsUrl; + + /** + * 字典的JSON数据。 + */ + @TableField(value = "dict_data_json") + private String dictDataJson; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + @RelationConstDict( + masterIdField = "dictType", + constantDictClass = DictType.class) + @TableField(exist = false) + private Map dictTypeDictMap; + + @RelationDict( + masterIdField = "dblinkId", + slaveServiceName = "onlineDblinkService", + slaveModelClass = OnlineDblink.class, + slaveIdField = "dblinkId", + slaveNameField = "dblinkName") + @TableField(exist = false) + private Map dblinkIdDictMap; + + @Mapper + public interface OnlineDictModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param onlineDictVo 域对象。 + * @return 实体对象。 + */ + @Override + OnlineDict toModel(OnlineDictVo onlineDictVo); + /** + * 转换实体对象到VO对象。 + * + * @param onlineDict 实体对象。 + * @return 域对象。 + */ + @Override + OnlineDictVo fromModel(OnlineDict onlineDict); + } + public static final OnlineDictModelMapper INSTANCE = Mappers.getMapper(OnlineDictModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineForm.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineForm.java new file mode 100644 index 00000000..bacec6ed --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineForm.java @@ -0,0 +1,138 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.*; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.model.constant.FormType; +import com.flow.demo.common.online.vo.OnlineFormVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_form") +public class OnlineForm { + + /** + * 主键Id。 + */ + @TableId(value = "form_id") + private Long formId; + + /** + * 页面id。 + */ + @TableField(value = "page_id") + private Long pageId; + + /** + * 表单编码。 + */ + @TableField(value = "form_code") + private String formCode; + + /** + * 表单名称。 + */ + @TableField(value = "form_name") + private String formName; + + /** + * 表单类别。 + */ + @TableField(value = "form_kind") + private Integer formKind; + + /** + * 表单类型。 + */ + @TableField(value = "form_type") + private Integer formType; + + /** + * 表单主表id。 + */ + @TableField(value = "master_table_id") + private Long masterTableId; + + /** + * 表单组件JSON。 + */ + @TableField(value = "widget_json") + private String widgetJson; + + /** + * 表单参数JSON。 + */ + @TableField(value = "params_json") + private String paramsJson; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + @RelationOneToOne( + masterIdField = "masterTableId", + slaveServiceName = "onlineTableService", + slaveModelClass = OnlineTable.class, + slaveIdField = "tableId") + @TableField(exist = false) + private OnlineTable onlineTable; + + @RelationDict( + masterIdField = "masterTableId", + slaveServiceName = "onlineTableService", + equalOneToOneRelationField = "onlineTable", + slaveModelClass = OnlineTable.class, + slaveIdField = "tableId", + slaveNameField = "modelName") + @TableField(exist = false) + private Map masterTableIdDictMap; + + @RelationConstDict( + masterIdField = "formType", + constantDictClass = FormType.class) + @TableField(exist = false) + private Map formTypeDictMap; + + @Mapper + public interface OnlineFormModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param onlineFormVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "onlineTable", expression = "java(mapToBean(onlineFormVo.getOnlineTable(), com.flow.demo.common.online.model.OnlineTable.class))") + @Override + OnlineForm toModel(OnlineFormVo onlineFormVo); + /** + * 转换实体对象到VO对象。 + * + * @param onlineForm 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "onlineTable", expression = "java(beanToMap(onlineForm.getOnlineTable(), false))") + @Override + OnlineFormVo fromModel(OnlineForm onlineForm); + } + public static final OnlineFormModelMapper INSTANCE = Mappers.getMapper(OnlineFormModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineFormDatasource.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineFormDatasource.java new file mode 100644 index 00000000..45e39a96 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineFormDatasource.java @@ -0,0 +1,33 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 在线表单和数据源多对多关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_form_datasource") +public class OnlineFormDatasource { + + /** + * 主键Id。 + */ + @TableId(value = "id") + private Long id; + + /** + * 表单Id。 + */ + @TableField(value = "form_id") + private Long formId; + + /** + * 数据源Id。 + */ + @TableField(value = "datasource_id") + private Long datasourceId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlinePage.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlinePage.java new file mode 100644 index 00000000..3907f114 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlinePage.java @@ -0,0 +1,106 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationConstDict; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.model.constant.PageStatus; +import com.flow.demo.common.online.model.constant.PageType; +import com.flow.demo.common.online.vo.OnlinePageVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单所在页面实体对象。这里我们可以把页面理解为表单的容器。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_page") +public class OnlinePage { + + /** + * 主键Id。 + */ + @TableId(value = "page_id") + private Long pageId; + + /** + * 页面编码。 + */ + @TableField(value = "page_code") + private String pageCode; + + /** + * 页面名称。 + */ + @TableField(value = "page_name") + private String pageName; + + /** + * 页面类型。 + */ + @TableField(value = "page_type") + private Integer pageType; + + /** + * 页面编辑状态。 + */ + @TableField(value = "status") + private Integer status; + + /** + * 是否发布。 + */ + @TableField(value = "published") + private Boolean published; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + @RelationConstDict( + masterIdField = "pageType", + constantDictClass = PageType.class) + @TableField(exist = false) + private Map pageTypeDictMap; + + @RelationConstDict( + masterIdField = "status", + constantDictClass = PageStatus.class) + @TableField(exist = false) + private Map statusDictMap; + + @Mapper + public interface OnlinePageModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param onlinePageVo 域对象。 + * @return 实体对象。 + */ + @Override + OnlinePage toModel(OnlinePageVo onlinePageVo); + /** + * 转换实体对象到VO对象。 + * + * @param onlinePage 实体对象。 + * @return 域对象。 + */ + @Override + OnlinePageVo fromModel(OnlinePage onlinePage); + } + public static final OnlinePageModelMapper INSTANCE = Mappers.getMapper(OnlinePageModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlinePageDatasource.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlinePageDatasource.java new file mode 100644 index 00000000..15850387 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlinePageDatasource.java @@ -0,0 +1,33 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 在线表单页面和数据源多对多关联实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_page_datasource") +public class OnlinePageDatasource { + + /** + * 主键Id。 + */ + @TableId(value = "id") + private Long id; + + /** + * 页面主键Id。 + */ + @TableField(value = "page_id") + private Long pageId; + + /** + * 数据源主键Id。 + */ + @TableField(value = "datasource_id") + private Long datasourceId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineRule.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineRule.java new file mode 100644 index 00000000..c4a9eb65 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineRule.java @@ -0,0 +1,109 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationConstDict; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.model.constant.RuleType; +import com.flow.demo.common.online.vo.OnlineRuleVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单数据表字段验证规则实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_rule") +public class OnlineRule { + + /** + * 主键Id。 + */ + @TableId(value = "rule_id") + private Long ruleId; + + /** + * 规则名称。 + */ + @TableField(value = "rule_name") + private String ruleName; + + /** + * 规则类型。 + */ + @TableField(value = "rule_type") + private Integer ruleType; + + /** + * 内置规则标记。 + */ + @TableField(value = "builtin") + private Boolean builtin; + + /** + * 自定义规则的正则表达式。 + */ + @TableField(value = "pattern") + private String pattern; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** + * ruleId 的多对多关联表数据对象。 + */ + @TableField(exist = false) + private OnlineColumnRule onlineColumnRule; + + @RelationConstDict( + masterIdField = "ruleType", + constantDictClass = RuleType.class) + @TableField(exist = false) + private Map ruleTypeDictMap; + + @Mapper + public interface OnlineRuleModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param onlineRuleVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "onlineColumnRule", expression = "java(mapToBean(onlineRuleVo.getOnlineColumnRule(), com.flow.demo.common.online.model.OnlineColumnRule.class))") + @Override + OnlineRule toModel(OnlineRuleVo onlineRuleVo); + /** + * 转换实体对象到VO对象。 + * + * @param onlineRule 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "onlineColumnRule", expression = "java(beanToMap(onlineRule.getOnlineColumnRule(), false))") + @Override + OnlineRuleVo fromModel(OnlineRule onlineRule); + } + public static final OnlineRuleModelMapper INSTANCE = Mappers.getMapper(OnlineRuleModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineTable.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineTable.java new file mode 100644 index 00000000..fc15fc4e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineTable.java @@ -0,0 +1,107 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.annotation.RelationOneToMany; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.vo.OnlineTableVo; +import lombok.Data; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 在线表单的数据表实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_table") +public class OnlineTable { + + /** + * 主键Id。 + */ + @TableId(value = "table_id") + private Long tableId; + + /** + * 表名称。 + */ + @TableField(value = "table_name") + private String tableName; + + /** + * 实体名称。 + */ + @TableField(value = "model_name") + private String modelName; + + /** + * 数据库链接Id。 + */ + @TableField(value = "dblink_id") + private Long dblinkId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + @RelationOneToMany( + masterIdField = "tableId", + slaveServiceName = "onlineColumnService", + slaveModelClass = OnlineColumn.class, + slaveIdField = "tableId") + @TableField(exist = false) + private List columnList; + + /** + * 该字段会被缓存,因此在线表单执行操作时可以从缓存中读取该数据,并可基于columnId进行快速检索。 + */ + @TableField(exist = false) + private Map columnMap; + + /** + * 当前表的主键字段,该字段仅仅用于动态表单运行时的SQL拼装。 + */ + @TableField(exist = false) + private OnlineColumn primaryKeyColumn; + + /** + * 当前表的逻辑删除字段,该字段仅仅用于动态表单运行时的SQL拼装。 + */ + @TableField(exist = false) + private OnlineColumn logicDeleteColumn; + + @Mapper + public interface OnlineTableModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param onlineTableVo 域对象。 + * @return 实体对象。 + */ + @Override + OnlineTable toModel(OnlineTableVo onlineTableVo); + /** + * 转换实体对象到VO对象。 + * + * @param onlineTable 实体对象。 + * @return 域对象。 + */ + @Override + OnlineTableVo fromModel(OnlineTable onlineTable); + } + public static final OnlineTableModelMapper INSTANCE = Mappers.getMapper(OnlineTableModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineVirtualColumn.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineVirtualColumn.java new file mode 100644 index 00000000..fe75be35 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/OnlineVirtualColumn.java @@ -0,0 +1,96 @@ +package com.flow.demo.common.online.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.flow.demo.common.core.base.mapper.BaseModelMapper; +import com.flow.demo.common.online.vo.OnlineVirtualColumnVo; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +/** + * 在线数据表虚拟字段实体对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@TableName(value = "zz_online_virtual_column") +public class OnlineVirtualColumn { + + /** + * 主键Id。 + */ + @TableId(value = "virtual_column_id") + private Long virtualColumnId; + + /** + * 所在表Id。 + */ + @TableField(value = "table_id") + private Long tableId; + + /** + * 字段名称。 + */ + @TableField(value = "object_field_name") + private String objectFieldName; + + /** + * 属性类型。 + */ + @TableField(value = "object_field_type") + private String objectFieldType; + + /** + * 字段提示名。 + */ + @TableField(value = "column_prompt") + private String columnPrompt; + + /** + * 虚拟字段类型(0: 聚合)。 + */ + @TableField(value = "virtual_type") + private Integer virtualType; + + /** + * 关联数据源Id。 + */ + @TableField(value = "datasource_id") + private Long datasourceId; + + /** + * 关联Id。 + */ + @TableField(value = "relation_id") + private Long relationId; + + /** + * 聚合字段所在关联表Id。 + */ + @TableField(value = "aggregation_table_id") + private Long aggregationTableId; + + /** + * 关联表聚合字段Id。 + */ + @TableField(value = "aggregation_column_id") + private Long aggregationColumnId; + + /** + * 聚合类型(0: count 1: sum 2: avg 3: max 4:min)。 + */ + @TableField(value = "aggregation_type") + private Integer aggregationType; + + /** + * 存储过滤条件的json。 + */ + @TableField(value = "where_clause_json") + private String whereClauseJson; + + @Mapper + public interface OnlineVirtualColumnModelMapper extends BaseModelMapper { + } + public static final OnlineVirtualColumnModelMapper INSTANCE = Mappers.getMapper(OnlineVirtualColumnModelMapper.class); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/DictType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/DictType.java new file mode 100644 index 00000000..0a2b1271 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/DictType.java @@ -0,0 +1,54 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 在线表单字典类型常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class DictType { + + /** + * 数据表字典。 + */ + public static final int TABLE = 1; + /** + * URL字典。 + */ + public static final int URL = 5; + /** + * 常量字典。 + */ + public static final int CONST = 10; + /** + * 自定义字典。 + */ + public static final int CUSTOM = 15; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(TABLE, "数据表字典"); + DICT_MAP.put(URL, "URL字典"); + DICT_MAP.put(CONST, "静态字典"); + DICT_MAP.put(CUSTOM, "自定义字典"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private DictType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FieldFilterType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FieldFilterType.java new file mode 100644 index 00000000..7163970b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FieldFilterType.java @@ -0,0 +1,59 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 字段过滤类型常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FieldFilterType { + + /** + * 无过滤。 + */ + public static final int NO_FILTER = 0; + /** + * 等于过滤。 + */ + public static final int EQUAL_FILTER = 1; + /** + * 范围过滤。 + */ + public static final int RANGE_FILTER = 2; + /** + * 模糊过滤。 + */ + public static final int LIKE_FILTER = 3; + /** + * IN LIST列表过滤。 + */ + public static final int IN_LIST_FILTER = 4; + + private static final Map DICT_MAP = new HashMap<>(9); + static { + DICT_MAP.put(NO_FILTER, "无过滤"); + DICT_MAP.put(EQUAL_FILTER, "等于过滤"); + DICT_MAP.put(RANGE_FILTER, "范围过滤"); + DICT_MAP.put(LIKE_FILTER, "模糊过滤"); + DICT_MAP.put(IN_LIST_FILTER, "IN LIST列表过滤"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FieldFilterType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FieldKind.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FieldKind.java new file mode 100644 index 00000000..8d19b2d1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FieldKind.java @@ -0,0 +1,74 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 字段类别常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FieldKind { + + /** + * 文件上传字段。 + */ + public static final int UPLOAD = 1; + /** + * 图片上传字段。 + */ + public static final int UPLOAD_IMAGE = 2; + /** + * 富文本字段。 + */ + public static final int RICH_TEXT = 3; + /** + * 创建时间字段。 + */ + public static final int CREATE_TIME = 20; + /** + * 创建人字段。 + */ + public static final int CREATE_USER_ID = 21; + /** + * 更新时间字段。 + */ + public static final int UPDATE_TIME = 22; + /** + * 更新人字段。 + */ + public static final int UPDATE_USER_ID = 23; + /** + * 逻辑删除字段。 + */ + public static final int LOGIC_DELETE = 31; + + private static final Map DICT_MAP = new HashMap<>(9); + static { + DICT_MAP.put(UPLOAD, "文件上传字段"); + DICT_MAP.put(UPLOAD_IMAGE, "图片上传字段"); + DICT_MAP.put(RICH_TEXT, "富文本字段"); + DICT_MAP.put(CREATE_TIME, "创建时间字段"); + DICT_MAP.put(CREATE_USER_ID, "创建人字段"); + DICT_MAP.put(UPDATE_TIME, "更新时间字段"); + DICT_MAP.put(UPDATE_USER_ID, "更新人字段"); + DICT_MAP.put(LOGIC_DELETE, "逻辑删除字段"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FieldKind() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FormKind.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FormKind.java new file mode 100644 index 00000000..976484e2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FormKind.java @@ -0,0 +1,44 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 表单类别常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FormKind { + + /** + * 弹框。 + */ + public static final int DIALOG = 1; + /** + * 跳页。 + */ + public static final int NEW_PAGE = 5; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(DIALOG, "弹框列表"); + DICT_MAP.put(NEW_PAGE, "跳页类别"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FormKind() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FormType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FormType.java new file mode 100644 index 00000000..edc7b018 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/FormType.java @@ -0,0 +1,54 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 表单类型常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class FormType { + + /** + * 查询表单。 + */ + public static final int QUERY = 1; + /** + * 编辑表单。 + */ + public static final int FORM = 5; + /** + * 流程表单。 + */ + public static final int FLOW = 10; + /** + * 流程工单表单。 + */ + public static final int FLOW_WORK_ORDER = 11; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(QUERY, "查询表单"); + DICT_MAP.put(FORM, "编辑表单"); + DICT_MAP.put(FLOW, "流程表单"); + DICT_MAP.put(FLOW_WORK_ORDER, "流程工单表单"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private FormType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/PageStatus.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/PageStatus.java new file mode 100644 index 00000000..6d62b1ef --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/PageStatus.java @@ -0,0 +1,49 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 页面状态常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class PageStatus { + + /** + * 编辑基础信息。 + */ + public static final int BASIC = 0; + /** + * 编辑数据模型。 + */ + public static final int DATASOURCE = 1; + /** + * 设计表单。 + */ + public static final int FORM_DESIGN = 2; + + private static final Map DICT_MAP = new HashMap<>(4); + static { + DICT_MAP.put(BASIC, "编辑基础信息"); + DICT_MAP.put(DATASOURCE, "编辑数据模型"); + DICT_MAP.put(FORM_DESIGN, "设计表单"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private PageStatus() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/PageType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/PageType.java new file mode 100644 index 00000000..bd21054a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/PageType.java @@ -0,0 +1,49 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 页面类型常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class PageType { + + /** + * 业务页面。 + */ + public static final int BIZ = 1; + /** + * 统计页面。 + */ + public static final int STATS = 5; + /** + * 流程页面。 + */ + public static final int FLOW = 10; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(BIZ, "业务页面"); + DICT_MAP.put(STATS, "统计页面"); + DICT_MAP.put(FLOW, "流程页面"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private PageType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/RelationType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/RelationType.java new file mode 100644 index 00000000..e5c52693 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/RelationType.java @@ -0,0 +1,44 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 关联类型常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class RelationType { + + /** + * 一对一关联。 + */ + public static final int ONE_TO_ONE = 0; + /** + * 一对多关联。 + */ + public static final int ONE_TO_MANY = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(ONE_TO_ONE, "一对一关联"); + DICT_MAP.put(ONE_TO_MANY, "一对多关联"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private RelationType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/RuleType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/RuleType.java new file mode 100644 index 00000000..d0fb9069 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/RuleType.java @@ -0,0 +1,69 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 验证规则类型常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class RuleType { + + /** + * 只允许整数。 + */ + public static final int INTEGER_ONLY = 1; + /** + * 只允许数字。 + */ + public static final int DIGITAL_ONLY = 2; + /** + * 只允许英文字符。 + */ + public static final int LETTER_ONLY = 3; + /** + * 范围验证。 + */ + public static final int RANGE = 4; + /** + * 邮箱格式验证。 + */ + public static final int EMAIL = 5; + /** + * 手机格式验证。 + */ + public static final int MOBILE = 6; + /** + * 自定义验证。 + */ + public static final int CUSTOM = 100; + + private static final Map DICT_MAP = new HashMap<>(7); + static { + DICT_MAP.put(INTEGER_ONLY, "只允许整数"); + DICT_MAP.put(DIGITAL_ONLY, "只允许数字"); + DICT_MAP.put(LETTER_ONLY, "只允许英文字符"); + DICT_MAP.put(RANGE, "范围验证"); + DICT_MAP.put(EMAIL, "邮箱格式验证"); + DICT_MAP.put(MOBILE, "手机格式验证"); + DICT_MAP.put(CUSTOM, "自定义验证"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private RuleType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/VirtualType.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/VirtualType.java new file mode 100644 index 00000000..a1cef356 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/model/constant/VirtualType.java @@ -0,0 +1,39 @@ +package com.flow.demo.common.online.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 在线表单虚拟字段类型常量字典对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +public final class VirtualType { + + /** + * 聚合。 + */ + public static final int AGGREGATION = 0; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(AGGREGATION, "聚合"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private VirtualType() { + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/ColumnData.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/ColumnData.java new file mode 100644 index 00000000..a15b4954 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/ColumnData.java @@ -0,0 +1,28 @@ +package com.flow.demo.common.online.object; + +import com.flow.demo.common.online.model.OnlineColumn; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 表字段数据对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ColumnData { + + /** + * 在线表字段对象。 + */ + private OnlineColumn column; + + /** + * 字段值。 + */ + private Object columnValue; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/JoinTableInfo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/JoinTableInfo.java new file mode 100644 index 00000000..91a1c34e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/JoinTableInfo.java @@ -0,0 +1,28 @@ +package com.flow.demo.common.online.object; + +import lombok.Data; + +/** + * 连接表信息对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class JoinTableInfo { + + /** + * 是否左连接。 + */ + private Boolean leftJoin; + + /** + * 连接表表名。 + */ + private String joinTableName; + + /** + * 连接条件。 + */ + private String joinCondition; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/SqlTable.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/SqlTable.java new file mode 100644 index 00000000..47c23750 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/SqlTable.java @@ -0,0 +1,41 @@ +package com.flow.demo.common.online.object; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * 数据库中的表对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SqlTable { + + /** + * 表名称。 + */ + private String tableName; + + /** + * 表注释。 + */ + private String tableComment; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * 关联的字段列表。 + */ + private List columnList; + + /** + * 数据库链接Id。 + */ + private Long dblinkId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/SqlTableColumn.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/SqlTableColumn.java new file mode 100644 index 00000000..ae87c443 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/object/SqlTableColumn.java @@ -0,0 +1,73 @@ +package com.flow.demo.common.online.object; + +import lombok.Data; + +/** + * 数据库中的表字段对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class SqlTableColumn { + + /** + * 表字段名。 + */ + private String columnName; + + /** + * 表字段类型。 + */ + private String columnType; + + /** + * 表字段全类型。 + */ + private String fullColumnType; + + /** + * 字段注释。 + */ + private String columnComment; + + /** + * 是否为主键。 + */ + private Boolean primaryKey; + + /** + * 是否自动增长。 + */ + private Boolean autoIncrement; + + /** + * 是否可以为空值。 + */ + private Boolean nullable; + + /** + * 字段顺序。 + */ + private Integer columnShowOrder; + + /** + * 附件信息。 + */ + private String extra; + + /** + * 字符型字段精度。 + */ + private Long stringPrecision; + + /** + * 数值型字段精度。 + */ + private Integer numericPrecision; + + /** + * 缺省值。 + */ + private Object columnDefault; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineColumnService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineColumnService.java new file mode 100644 index 00000000..03a7e5a0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineColumnService.java @@ -0,0 +1,150 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.online.model.OnlineColumn; +import com.flow.demo.common.online.model.OnlineColumnRule; +import com.flow.demo.common.online.object.SqlTableColumn; + +import java.util.List; +import java.util.Set; + +/** + * 字段数据数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineColumnService extends IBaseService { + + /** + * 保存新增数据表字段列表。 + * + * @param columnList 新增数据表字段对象列表。 + * @param onlineTableId 在线表对象的主键Id。 + * @return 插入的在线表字段数据。 + */ + List saveNewList(List columnList, Long onlineTableId); + + /** + * 更新数据对象。 + * + * @param onlineColumn 更新的对象。 + * @param originalOnlineColumn 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(OnlineColumn onlineColumn, OnlineColumn originalOnlineColumn); + + /** + * 刷新数据库表字段的数据到在线表字段。 + * + * @param sqlTableColumn 源数据库表字段对象。 + * @param onlineColumn 被刷新的在线表字段对象。 + */ + void refresh(SqlTableColumn sqlTableColumn, OnlineColumn onlineColumn); + + /** + * 删除指定数据。 + * + * @param tableId 表Id。 + * @param columnId 字段Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long tableId, Long columnId); + + /** + * 批量添加多对多关联关系。 + * + * @param onlineColumnRuleList 多对多关联表对象集合。 + * @param columnId 主表Id。 + */ + void addOnlineColumnRuleList(List onlineColumnRuleList, Long columnId); + + /** + * 更新中间表数据。 + * + * @param onlineColumnRule 中间表对象。 + * @return 更新成功与否。 + */ + boolean updateOnlineColumnRule(OnlineColumnRule onlineColumnRule); + + /** + * 获取中间表数据。 + * + * @param columnId 主表Id。 + * @param ruleId 从表Id。 + * @return 中间表对象。 + */ + OnlineColumnRule getOnlineColumnRule(Long columnId, Long ruleId); + + /** + * 移除单条多对多关系。 + * + * @param columnId 主表Id。 + * @param ruleId 从表Id。 + * @return 成功返回true,否则false。 + */ + boolean removeOnlineColumnRule(Long columnId, Long ruleId); + + /** + * 当前服务的支持表为从表,根据主表的主键Id,删除一对多的从表数据。 + * + * @param tableId 主表主键Id。 + * @return 删除数量。 + */ + int removeByTableId(Long tableId); + + /** + * 删除指定数据表Id集合中的表字段。 + * + * @param tableIdSet 待删除的数据表Id集合。 + */ + void removeByTableIdSet(Set tableIdSet); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineColumnListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineColumnList(OnlineColumn filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineColumnList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineColumnListWithRelation(OnlineColumn filter, String orderBy); + + /** + * 获取指定数据表Id集合的字段对象列表。 + * + * @param tableIdSet 指定的数据表Id集合。 + * @return 数据表Id集合所包含的字段对象列表。 + */ + List getOnlineColumnListByTableIds(Set tableIdSet); + + /** + * 根据表Id和字段列名获取指定字段。 + * + * @param tableId 字段所在表Id。 + * @param columnName 字段名。 + * @return 查询出的字段对象。 + */ + OnlineColumn getOnlineColumnByTableIdAndColumnName(Long tableId, String columnName); + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param onlineColumn 最新数据对象。 + * @param originalOnlineColumn 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + CallResult verifyRelatedData(OnlineColumn onlineColumn, OnlineColumn originalOnlineColumn); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDatasourceRelationService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDatasourceRelationService.java new file mode 100644 index 00000000..4a35e2db --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDatasourceRelationService.java @@ -0,0 +1,97 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.online.model.OnlineDatasourceRelation; +import com.flow.demo.common.online.object.SqlTable; +import com.flow.demo.common.online.object.SqlTableColumn; + +import java.util.List; +import java.util.Set; + +/** + * 数据关联数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineDatasourceRelationService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param relation 新增对象。 + * @param slaveSqlTable 新增的关联从数据表对象。 + * @param slaveSqlColumn 新增的关联从数据表对象。 + * @return 返回新增对象。 + */ + OnlineDatasourceRelation saveNew( + OnlineDatasourceRelation relation, SqlTable slaveSqlTable, SqlTableColumn slaveSqlColumn); + + /** + * 更新数据对象。 + * + * @param relation 更新的对象。 + * @param originalRelation 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(OnlineDatasourceRelation relation, OnlineDatasourceRelation originalRelation); + + /** + * 删除指定数据。 + * + * @param relationId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long relationId); + + /** + * 当前服务的支持表为从表,根据主表的主键Id,删除一对多的从表数据。 + * + * @param datasourceId 主表主键Id。 + * @return 删除数量。 + */ + int removeByDatasourceId(Long datasourceId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineDatasourceRelationListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineDatasourceRelationListByDatasourceIds( + OnlineDatasourceRelation filter, String orderBy); + + /** + * 获取指定数据源Id集合下的所有数据源关联列表。 + * + * @param datasourceIdSet 数据源Id集合。 + * @param relationType 关联类型,如果为空,则查询全部类型。 + * @return 指定数据源下的所有关联列表。 + */ + List getOnlineDatasourceRelationListByDatasourceIds( + Set datasourceIdSet, Integer relationType); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineDatasourceRelationList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineDatasourceRelationListWithRelation( + OnlineDatasourceRelation filter, String orderBy); + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param relation 最新数据对象。 + * @param originalRelation 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + CallResult verifyRelatedData(OnlineDatasourceRelation relation, OnlineDatasourceRelation originalRelation); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDatasourceService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDatasourceService.java new file mode 100644 index 00000000..8712f9d7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDatasourceService.java @@ -0,0 +1,110 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.online.model.OnlineDatasource; +import com.flow.demo.common.online.model.OnlineDatasourceTable; +import com.flow.demo.common.online.object.SqlTable; + +import java.util.List; +import java.util.Set; + +/** + * 数据模型数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineDatasourceService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param onlineDatasource 新增对象。 + * @param sqlTable 新增的数据表对象。 + * @param pageId 关联的页面Id。 + * @return 返回新增对象。 + */ + OnlineDatasource saveNew(OnlineDatasource onlineDatasource, SqlTable sqlTable, Long pageId); + + /** + * 更新数据对象。 + * + * @param onlineDatasource 更新的对象。 + * @param originalOnlineDatasource 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(OnlineDatasource onlineDatasource, OnlineDatasource originalOnlineDatasource); + + /** + * 删除指定数据。 + * + * @param datasourceId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long datasourceId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineDatasourceListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineDatasourceList(OnlineDatasource filter, String orderBy); + + /** + * 查询指定数据源Id集合的数据源列表。 + * + * @param datasourceIdSet 数据源Id集合。 + * @return 查询结果集。 + */ + List getOnlineDatasourceList(Set datasourceIdSet); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineDatasourceList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineDatasourceListWithRelation(OnlineDatasource filter, String orderBy); + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param pageId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getNotInOnlineDatasourceListByPageId(Long pageId, OnlineDatasource filter, String orderBy); + + /** + * 在多对多关系中,当前Service的数据表为从表,返回与指定主表主键Id存在对多对关系的列表。 + * + * @param pageId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineDatasourceListByPageId(Long pageId, OnlineDatasource filter, String orderBy); + + /** + * 获取指定数据源Id集合所关联的在线表关联数据。 + * + * @param datasourceIdSet 数据源Id集合。 + * @return 数据源和数据表的多对多关联列表。 + */ + List getOnlineDatasourceTableList(Set datasourceIdSet); + + /** + * 根据在线表单Id集合,获取关联的在线数据源对象列表。 + * + * @param readFormIdSet 在线表单Id集合。 + * @return 与参数表单Id关联的数据源列表。 + */ + List getOnlineDatasourceListByFormIds(Set readFormIdSet); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDblinkService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDblinkService.java new file mode 100644 index 00000000..5875e3ab --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDblinkService.java @@ -0,0 +1,74 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.online.model.OnlineDblink; +import com.flow.demo.common.online.object.SqlTable; +import com.flow.demo.common.online.object.SqlTableColumn; + +import java.util.List; + +/** + * 数据库链接数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineDblinkService extends IBaseService { + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineDblinkListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineDblinkList(OnlineDblink filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineDblinkList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineDblinkListWithRelation(OnlineDblink filter, String orderBy); + + /** + * 获取指定DBLink下面的全部数据表。 + * + * @param dblink 数据库链接对象。 + * @return 全部数据表列表。 + */ + List getDblinkTableList(OnlineDblink dblink); + + /** + * 获取指定DBLink下,指定表名的数据表对象,及其关联字段列表。 + * + * @param dblink 数据库链接对象。 + * @param tableName 数据库中的数据表名。 + * @return 数据表对象。 + */ + SqlTable getDblinkTable(OnlineDblink dblink, String tableName); + + /** + * 获取指定DBLink下,指定表名的字段列表。 + * + * @param dblink 数据库链接对象。 + * @param tableName 数据库中的数据表名。 + * @return 表的字段列表。 + */ + List getDblinkTableColumnList(OnlineDblink dblink, String tableName); + + /** + * 获取指定DBLink下,指定表的字段对象。 + * + * @param dblink 数据库链接对象。 + * @param tableName 数据库中的数据表名。 + * @param columnName 数据库中的数据表的字段名。 + * @return 表的字段对象。 + */ + SqlTableColumn getDblinkTableColumn(OnlineDblink dblink, String tableName, String columnName); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDictService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDictService.java new file mode 100644 index 00000000..14a49258 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineDictService.java @@ -0,0 +1,80 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.online.model.OnlineDict; + +import java.util.List; +import java.util.Set; + +/** + * 在线表单字典数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineDictService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param onlineDict 新增对象。 + * @return 返回新增对象。 + */ + OnlineDict saveNew(OnlineDict onlineDict); + + /** + * 更新数据对象。 + * + * @param onlineDict 更新的对象。 + * @param originalOnlineDict 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(OnlineDict onlineDict, OnlineDict originalOnlineDict); + + /** + * 删除指定数据。 + * + * @param dictId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long dictId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineDictListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineDictList(OnlineDict filter, String orderBy); + + /** + * 根据指定字典Id集合返回字段对象数据列表。 + * + * @param dictIdSet 字典Id集合。 + * @return 查询后的字典对象列表。 + */ + List getOnlineDictList(Set dictIdSet); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineDictList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineDictListWithRelation(OnlineDict filter, String orderBy); + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param onlineDict 最新数据对象。 + * @param originalOnlineDict 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + CallResult verifyRelatedData(OnlineDict onlineDict, OnlineDict originalOnlineDict); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineFormService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineFormService.java new file mode 100644 index 00000000..78179871 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineFormService.java @@ -0,0 +1,115 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.online.model.OnlineForm; +import com.flow.demo.common.online.model.OnlineFormDatasource; + +import java.util.List; +import java.util.Set; + +/** + * 在线表单数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineFormService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param onlineForm 新增对象。 + * @param datasourceIdSet 在线表单关联的数据源Id集合。 + * @return 返回新增对象。 + */ + OnlineForm saveNew(OnlineForm onlineForm, Set datasourceIdSet); + + /** + * 更新数据对象。 + * + * @param onlineForm 更新的对象。 + * @param originalOnlineForm 原有数据对象。 + * @param datasourceIdSet 在线表单关联的数据源Id集合。 + * @return 成功返回true,否则false。 + */ + boolean update(OnlineForm onlineForm, OnlineForm originalOnlineForm, Set datasourceIdSet); + + /** + * 删除指定数据。 + * + * @param formId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long formId); + + /** + * 根据PageId,删除其所属的所有表单,以及表单关联的数据源数据。 + * + * @param pageId 指定的pageId。 + * @return 删除数量。 + */ + int removeByPageId(Long pageId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineFormListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineFormList(OnlineForm filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineFormList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineFormListWithRelation(OnlineForm filter, String orderBy); + + /** + * 获取使用指定数据表的表单列表。 + * + * @param tableId 数据表Id。 + * @return 使用该数据表的表单列表。 + */ + List getOnlineFormListByTableId(Long tableId); + + /** + * 获取指定表单的数据源列表。 + * + * @param formId 指定的表单。 + * @return 表单和数据源的多对多关联对象列表。 + */ + List getFormDatasourceListByFormId(Long formId); + + /** + * 查询正在使用当前数据源的表单。 + * + * @param datasourceId 数据源Id。 + * @return 正在使用当前数据源的表单列表。 + */ + List getOnlineFormListByDatasourceId(Long datasourceId); + + /** + * 查询指定PageId集合的在线表单列表。 + * + * @param pageIdSet 页面Id集合。 + * @return 在线表单集合。 + */ + List getOnlineFormListByPageIds(Set pageIdSet); + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param onlineForm 最新数据对象。 + * @param originalOnlineForm 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + CallResult verifyRelatedData(OnlineForm onlineForm, OnlineForm originalOnlineForm); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineOperationService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineOperationService.java new file mode 100644 index 00000000..d7f491a4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineOperationService.java @@ -0,0 +1,142 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.online.dto.OnlineFilterDto; +import com.flow.demo.common.online.model.OnlineColumn; +import com.flow.demo.common.online.model.OnlineDatasourceRelation; +import com.flow.demo.common.online.model.OnlineDict; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.object.ColumnData; + +import java.util.List; +import java.util.Map; + +/** + * 在线表单运行时操作的数据服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineOperationService { + + /** + * 待插入的所有表数据。 + * + * @param table 在线表对象。 + * @param columnDataList 数据字段列表。 + * @return 主键值。由于自增主键不能获取插入后的主键值,因此返回NULL。 + */ + Object saveNew(OnlineTable table, List columnDataList); + + /** + * 待插入的主表数据和多个从表数据。 + * + * @param masterTable 主表在线表对象。 + * @param columnDataList 主表数据字段数据。 + * @param slaveDataListMap 多个从表的数据字段数据。 + * @return 主表的主键值。由于自增主键不能获取插入后的主键值,因此返回NULL。 + */ + Object saveNewAndSlaveRelation( + OnlineTable masterTable, + List columnDataList, + Map>> slaveDataListMap); + + /** + * 更新表数据。 + * + * @param table 在线表对象。 + * @param columnDataList 单条表数据的字段数据列表。 + * @return true 更新成功,否则false。 + */ + boolean update(OnlineTable table, List columnDataList); + + /** + * 更新流程字段的状态。 + * + * @param table 数据表。 + * @param dataId 主键Id。 + * @param column 更新字段。 + * @param dataValue 新的数据值。 + * @return true 更新成功,否则false。 + */ + boolean updateColumn(OnlineTable table, String dataId, OnlineColumn column, T dataValue); + + /** + * 删除主表数据,及其需要级联删除的一对多关联从表数据。 + * + * @param table 表对象。 + * @param relationList 一对多关联对象列表。 + * @param dataId 主表主键Id值。 + * @return true 删除成功,否则false。 + */ + boolean delete(OnlineTable table, List relationList, String dataId); + + /** + * 强制删除数据,不会指定逻辑删除,只会物理删除。 + * + * @param table 在线表对象。 + * @param column 指定的字段。 + * @param columnValue 指定字段的值。 + */ + void forceDelete(OnlineTable table, OnlineColumn column, String columnValue); + + /** + * 从数据源和一对一数据源关联中,动态获取数据。 + * + * @param table 主表对象。 + * @param oneToOneRelationList 数据源一对一关联列表。 + * @param allRelationList 数据源全部关联列表。 + * @param dataId 主表主键Id值。 + * @return 查询结果。 + */ + Map getMasterData( + OnlineTable table, + List oneToOneRelationList, + List allRelationList, + String dataId); + + /** + * 从一对多数据源关联中,动态获取数据。 + * + * @param relation 一对多数据源关联对象。 + * @param dataId 一对多关联数据主键Id值。 + * @return 查询结果。 + */ + Map getSlaveData(OnlineDatasourceRelation relation, String dataId); + + /** + * 从数据源和一对一数据源关联中,动态获取数据列表。 + * + * @param table 主表对象。 + * @param oneToOneRelationList 数据源一对一关联列表。 + * @param allRelationList 数据源全部关联列表。 + * @param filterList 过滤参数列表。 + * @param orderBy 排序字符串。 + * @return 查询结果集。 + */ + List> getMasterDataList( + OnlineTable table, + List oneToOneRelationList, + List allRelationList, + List filterList, + String orderBy); + + /** + * 从一对多数据源关联中,动态获取数据列表。 + * + * @param relation 一对多数据源关联对象。 + * @param filterList 过滤参数列表。 + * @param orderBy 排序字符串。 + * @return 查询结果集。 + */ + List> getSlaveDataList( + OnlineDatasourceRelation relation, List filterList, String orderBy); + + /** + * 从字典对象指向的数据表中查询数据,并根据参数进行数据过滤。 + * + * @param dict 字典对象。 + * @param filterList 过滤参数列表。 + * @return 查询结果集。 + */ + List> getDictDataList(OnlineDict dict, List filterList); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlinePageService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlinePageService.java new file mode 100644 index 00000000..1e90ceb6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlinePageService.java @@ -0,0 +1,112 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.online.model.OnlinePage; +import com.flow.demo.common.online.model.OnlinePageDatasource; + +import java.util.List; + +/** + * 在线表单页面数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlinePageService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param onlinePage 新增对象。 + * @return 返回新增对象。 + */ + OnlinePage saveNew(OnlinePage onlinePage); + + /** + * 更新数据对象。 + * + * @param onlinePage 更新的对象。 + * @param originalOnlinePage 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(OnlinePage onlinePage, OnlinePage originalOnlinePage); + + /** + * 更新页面对象的发布状态。 + * + * @param pageId 页面对象Id。 + * @param published 新的状态。 + */ + void updatePublished(Long pageId, Boolean published); + + /** + * 删除指定数据,及其包含的表单和数据源等。 + * + * @param pageId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long pageId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlinePageListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlinePageList(OnlinePage filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlinePageList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlinePageListWithRelation(OnlinePage filter, String orderBy); + + /** + * 批量添加多对多关联关系。 + * + * @param onlinePageDatasourceList 多对多关联表对象集合。 + * @param pageId 主表Id。 + */ + void addOnlinePageDatasourceList(List onlinePageDatasourceList, Long pageId); + + /** + * 获取中间表数据。 + * + * @param pageId 主表Id。 + * @param datasourceId 从表Id。 + * @return 中间表对象。 + */ + OnlinePageDatasource getOnlinePageDatasource(Long pageId, Long datasourceId); + + /** + * 获取在线页面和数据源中间表数据列表。 + * + * @param pageId 主表Id。 + * @return 在线页面和数据源中间表对象列表。 + */ + List getOnlinePageDatasourceListByPageId(Long pageId); + + /** + * 根据数据源Id,返回使用该数据源的OnlinePage对象。 + * + * @param datasourceId 数据源Id。 + * @return 使用该数据源的页面列表。 + */ + List getOnlinePageListByDatasourceId(Long datasourceId); + + /** + * 移除单条多对多关系。 + * + * @param pageId 主表Id。 + * @param datasourceId 从表Id。 + * @return 成功返回true,否则false。 + */ + boolean removeOnlinePageDatasource(Long pageId, Long datasourceId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineRuleService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineRuleService.java new file mode 100644 index 00000000..98e49da9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineRuleService.java @@ -0,0 +1,91 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.online.model.OnlineColumnRule; +import com.flow.demo.common.online.model.OnlineRule; + +import java.util.List; +import java.util.Set; + +/** + * 验证规则数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineRuleService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param onlineRule 新增对象。 + * @return 返回新增对象。 + */ + OnlineRule saveNew(OnlineRule onlineRule); + + /** + * 更新数据对象。 + * + * @param onlineRule 更新的对象。 + * @param originalOnlineRule 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(OnlineRule onlineRule, OnlineRule originalOnlineRule); + + /** + * 删除指定数据。 + * + * @param ruleId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long ruleId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineRuleListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineRuleList(OnlineRule filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineRuleList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineRuleListWithRelation(OnlineRule filter, String orderBy); + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param columnId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getNotInOnlineRuleListByColumnId(Long columnId, OnlineRule filter, String orderBy); + + /** + * 在多对多关系中,当前Service的数据表为从表,返回与指定主表主键Id存在对多对关系的列表。 + * + * @param columnId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineRuleListByColumnId(Long columnId, OnlineRule filter, String orderBy); + + /** + * 返回指定字段Id列表关联的字段规则对象列表。 + * + * @param columnIdSet 指定的字段Id列表。 + * @return 关联的字段规则对象列表。 + */ + List getOnlineColumnRuleListByColumnIds(Set columnIdSet); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineTableService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineTableService.java new file mode 100644 index 00000000..560abef7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineTableService.java @@ -0,0 +1,95 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.object.SqlTable; + +import java.util.List; +import java.util.Set; + +/** + * 数据表数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineTableService extends IBaseService { + + /** + * 基于数据库表保存新增对象。 + * + * @param sqlTable 数据库表对象。 + * @return 返回新增对象。 + */ + OnlineTable saveNewFromSqlTable(SqlTable sqlTable); + + /** + * 更新数据对象。 + * + * @param onlineTable 更新的对象。 + * @param originalOnlineTable 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(OnlineTable onlineTable, OnlineTable originalOnlineTable); + + /** + * 删除指定表及其关联的字段数据。 + * + * @param tableId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long tableId); + + /** + * 删除指定数据表Id集合中的表,及其关联字段。 + * + * @param tableIdSet 待删除的数据表Id集合。 + */ + void removeByTableIdSet(Set tableIdSet); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineTableListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineTableList(OnlineTable filter, String orderBy); + + /** + * 获取指定在线表Id集合的对象列表。 + * + * @param tableIdSet 主键Id集合。 + * @return 指定的数据表对象列表。 + */ + List getOnlineTableList(Set tableIdSet); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineTableList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineTableListWithRelation(OnlineTable filter, String orderBy); + + /** + * 根据数据源Id,获取该数据源及其关联所引用的数据表列表。 + * + * @param datasourceId 指定的数据源Id。 + * @return 该数据源及其关联所引用的数据表列表。 + */ + List getOnlineTableListByDatasourceId(Long datasourceId); + + /** + * 从缓存中获取指定的表数据及其关联字段列表。优先从缓存中读取,如果不存在则从数据库中读取,并同步到缓存。 + * 该接口方法仅仅用户在线表单的动态数据操作接口,而非在线表单的配置接口。 + * + * @param tableId 表主键Id。 + * @return 查询后的在线表对象。 + */ + OnlineTable getOnlineTableFromCache(Long tableId); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineVirtualColumnService.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineVirtualColumnService.java new file mode 100644 index 00000000..fc8a617b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/OnlineVirtualColumnService.java @@ -0,0 +1,78 @@ +package com.flow.demo.common.online.service; + +import com.flow.demo.common.core.base.service.IBaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.online.model.OnlineVirtualColumn; + +import java.util.*; + +/** + * 虚拟字段数据操作服务接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface OnlineVirtualColumnService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param onlineVirtualColumn 新增对象。 + * @return 返回新增对象。 + */ + OnlineVirtualColumn saveNew(OnlineVirtualColumn onlineVirtualColumn); + + /** + * 更新数据对象。 + * + * @param onlineVirtualColumn 更新的对象。 + * @param originalOnlineVirtualColumn 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(OnlineVirtualColumn onlineVirtualColumn, OnlineVirtualColumn originalOnlineVirtualColumn); + + /** + * 删除指定数据。 + * + * @param virtualColumnId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long virtualColumnId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineVirtualColumnListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineVirtualColumnList(OnlineVirtualColumn filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineVirtualColumnList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getOnlineVirtualColumnListWithRelation(OnlineVirtualColumn filter, String orderBy); + + /** + * 根据数据表的集合,查询关联的虚拟字段数据列表。 + * @param tableIdSet 在线数据表Id集合。 + * @return 关联的虚拟字段数据列表。 + */ + List getOnlineVirtualColumnListByTableIds(Set tableIdSet); + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param virtualColumn 最新数据对象。 + * @param originalVirtualColumn 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + CallResult verifyRelatedData(OnlineVirtualColumn virtualColumn, OnlineVirtualColumn originalVirtualColumn); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineColumnServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineColumnServiceImpl.java new file mode 100644 index 00000000..2b69fdca --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineColumnServiceImpl.java @@ -0,0 +1,361 @@ +package com.flow.demo.common.online.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.util.RedisKeyUtil; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.dao.OnlineColumnMapper; +import com.flow.demo.common.online.dao.OnlineColumnRuleMapper; +import com.flow.demo.common.online.model.OnlineColumn; +import com.flow.demo.common.online.model.OnlineColumnRule; +import com.flow.demo.common.online.model.constant.FieldFilterType; +import com.flow.demo.common.online.object.SqlTableColumn; +import com.flow.demo.common.online.service.OnlineColumnService; +import com.flow.demo.common.online.service.OnlineTableService; +import com.github.pagehelper.Page; +import com.google.common.base.CaseFormat; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +/** + * 字段数据数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlineColumnService") +public class OnlineColumnServiceImpl extends BaseService implements OnlineColumnService { + + @Autowired + private OnlineColumnMapper onlineColumnMapper; + @Autowired + private OnlineColumnRuleMapper onlineColumnRuleMapper; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private IdGeneratorWrapper idGenerator; + @Autowired + private RedissonClient redissonClient; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlineColumnMapper; + } + + /** + * 保存新增数据表字段列表。 + * + * @param columnList 新增数据表字段对象列表。 + * @param onlineTableId 在线表对象的主键Id。 + * @return 插入的在线表字段数据。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public List saveNewList(List columnList, Long onlineTableId) { + List onlineColumnList = new LinkedList<>(); + if (CollUtil.isEmpty(columnList)) { + return onlineColumnList; + } + for (SqlTableColumn column : columnList) { + OnlineColumn onlineColumn = new OnlineColumn(); + BeanUtil.copyProperties(column, onlineColumn, false); + onlineColumn.setColumnId(idGenerator.nextLongId()); + onlineColumn.setTableId(onlineTableId); + this.setDefault(onlineColumn); + onlineColumnMapper.insert(onlineColumn); + onlineColumnList.add(onlineColumn); + } + return onlineColumnList; + } + + /** + * 更新数据对象。 + * + * @param onlineColumn 更新的对象。 + * @param originalOnlineColumn 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlineColumn onlineColumn, OnlineColumn originalOnlineColumn) { + this.evictTableCache(onlineColumn.getTableId()); + onlineColumn.setUpdateTime(new Date()); + onlineColumn.setCreateTime(originalOnlineColumn.getCreateTime()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(onlineColumn, onlineColumn.getColumnId()); + return onlineColumnMapper.update(onlineColumn, uw) == 1; + } + + /** + * 刷新数据库表字段的数据到在线表字段。 + * + * @param sqlTableColumn 源数据库表字段对象。 + * @param onlineColumn 被刷新的在线表字段对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void refresh(SqlTableColumn sqlTableColumn, OnlineColumn onlineColumn) { + this.evictTableCache(onlineColumn.getTableId()); + BeanUtil.copyProperties(sqlTableColumn, onlineColumn, false); + onlineColumnMapper.updateById(onlineColumn); + } + + /** + * 删除指定数据。 + * + * @param tableId 表Id。 + * @param columnId 字段Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long tableId, Long columnId) { + this.evictTableCache(tableId); + return onlineColumnMapper.deleteById(columnId) == 1; + } + + /** + * 当前服务的支持表为从表,根据主表的主键Id,删除一对多的从表数据。 + * + * @param tableId 主表主键Id。 + * @return 删除数量。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public int removeByTableId(Long tableId) { + OnlineColumn deletedObject = new OnlineColumn(); + deletedObject.setTableId(tableId); + return onlineColumnMapper.delete(new QueryWrapper<>(deletedObject)); + } + + /** + * 删除指定数据表Id集合中的表字段。 + * + * @param tableIdSet 待删除的数据表Id集合。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void removeByTableIdSet(Set tableIdSet) { + onlineColumnMapper.delete(new QueryWrapper().lambda().in(OnlineColumn::getTableId, tableIdSet)); + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineColumnListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineColumnList(OnlineColumn filter, String orderBy) { + return onlineColumnMapper.getOnlineColumnList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineColumnList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineColumnListWithRelation(OnlineColumn filter, String orderBy) { + List resultList = onlineColumnMapper.getOnlineColumnList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取指定数据表Id集合的字段对象列表。 + * + * @param tableIdSet 指定的数据表Id集合。 + * @return 数据表Id集合所包含的字段对象列表。 + */ + @Override + public List getOnlineColumnListByTableIds(Set tableIdSet) { + return onlineColumnMapper.selectList( + new QueryWrapper().lambda().in(OnlineColumn::getTableId, tableIdSet)); + } + + /** + * 根据表Id和字段列名获取指定字段。 + * + * @param tableId 字段所在表Id。 + * @param columnName 字段名。 + * @return 查询出的字段对象。 + */ + @Override + public OnlineColumn getOnlineColumnByTableIdAndColumnName(Long tableId, String columnName) { + OnlineColumn filter = new OnlineColumn(); + filter.setTableId(tableId); + filter.setColumnName(columnName); + return onlineColumnMapper.selectOne(new QueryWrapper<>(filter)); + } + + /** + * 批量添加多对多关联关系。 + * + * @param onlineColumnRuleList 多对多关联表对象集合。 + * @param columnId 主表Id。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void addOnlineColumnRuleList(List onlineColumnRuleList, Long columnId) { + for (OnlineColumnRule onlineColumnRule : onlineColumnRuleList) { + onlineColumnRule.setColumnId(columnId); + onlineColumnRuleMapper.insert(onlineColumnRule); + } + } + + /** + * 更新中间表数据。 + * + * @param onlineColumnRule 中间表对象。 + * @return 更新成功与否。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean updateOnlineColumnRule(OnlineColumnRule onlineColumnRule) { + OnlineColumnRule filter = new OnlineColumnRule(); + filter.setColumnId(onlineColumnRule.getColumnId()); + filter.setRuleId(onlineColumnRule.getRuleId()); + UpdateWrapper uw = + BaseService.createUpdateQueryForNullValue(onlineColumnRule, OnlineColumnRule.class); + uw.setEntity(filter); + return onlineColumnRuleMapper.update(onlineColumnRule, uw) > 0; + } + + /** + * 获取中间表数据。 + * + * @param columnId 主表Id。 + * @param ruleId 从表Id。 + * @return 中间表对象。 + */ + @Override + public OnlineColumnRule getOnlineColumnRule(Long columnId, Long ruleId) { + OnlineColumnRule filter = new OnlineColumnRule(); + filter.setColumnId(columnId); + filter.setRuleId(ruleId); + return onlineColumnRuleMapper.selectOne(new QueryWrapper<>(filter)); + } + + /** + * 移除单条多对多关系。 + * + * @param columnId 主表Id。 + * @param ruleId 从表Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean removeOnlineColumnRule(Long columnId, Long ruleId) { + OnlineColumnRule filter = new OnlineColumnRule(); + filter.setColumnId(columnId); + filter.setRuleId(ruleId); + return onlineColumnRuleMapper.delete(new QueryWrapper<>(filter)) > 0; + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param onlineColumn 最新数据对象。 + * @param originalOnlineColumn 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + @Override + public CallResult verifyRelatedData(OnlineColumn onlineColumn, OnlineColumn originalOnlineColumn) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + //这里是一对多的验证 + if (this.needToVerify(onlineColumn, originalOnlineColumn, OnlineColumn::getTableId) + && !onlineTableService.existId(onlineColumn.getTableId())) { + return CallResult.error(String.format(errorMessageFormat, "数据表Id")); + } + return CallResult.ok(); + } + + private void setDefault(OnlineColumn onlineColumn) { + String objectFieldName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, onlineColumn.getColumnName()); + onlineColumn.setObjectFieldName(objectFieldName); + String objectFieldType = convertToJavaType(onlineColumn.getColumnType()); + onlineColumn.setObjectFieldType(objectFieldType); + onlineColumn.setFilterType(FieldFilterType.NO_FILTER); + onlineColumn.setParentKey(false); + onlineColumn.setDeptFilter(false); + onlineColumn.setUserFilter(false); + Date now = new Date(); + onlineColumn.setUpdateTime(now); + onlineColumn.setCreateTime(now); + } + + private void evictTableCache(Long tableId) { + String tableIdKey = RedisKeyUtil.makeOnlineTableKey(tableId); + redissonClient.getBucket(tableIdKey).delete(); + } + + private String convertToJavaType(String columnType) { + if ("varchar".equals(columnType) + || "char".equals(columnType) + || "text".equals(columnType) + || "longtext".equals(columnType) + || "mediumtext".equals(columnType) + || "tinytext".equals(columnType)) { + return "String"; + } + if ("int".equals(columnType) + || "mediumint".equals(columnType) + || "smallint".equals(columnType) + || "tinyint".equals(columnType)) { + return "Integer"; + } + if ("bit".equals(columnType)) { + return "Boolean"; + } + if ("bigint".equals(columnType)) { + return "Long"; + } + if ("decimal".equals(columnType)) { + return "BigDecimal"; + } + if ("float".equals(columnType) + || "double".equals(columnType)) { + return "Double"; + } + if ("date".equals(columnType) + || "datetime".equals(columnType) + || "timestamp".equals(columnType) + || "time".equals(columnType)) { + return "Date"; + } + if ("blob".equals(columnType)) { + return "byte[]"; + } + throw new RuntimeException("Unsupported Data Type"); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDatasourceRelationServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDatasourceRelationServiceImpl.java new file mode 100644 index 00000000..713b2c70 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDatasourceRelationServiceImpl.java @@ -0,0 +1,255 @@ +package com.flow.demo.common.online.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.dao.OnlineDatasourceRelationMapper; +import com.flow.demo.common.online.dao.OnlineDatasourceTableMapper; +import com.flow.demo.common.online.model.OnlineColumn; +import com.flow.demo.common.online.model.OnlineDatasourceRelation; +import com.flow.demo.common.online.model.OnlineDatasourceTable; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.object.SqlTable; +import com.flow.demo.common.online.object.SqlTableColumn; +import com.flow.demo.common.online.service.OnlineColumnService; +import com.flow.demo.common.online.service.OnlineDatasourceRelationService; +import com.flow.demo.common.online.service.OnlineDatasourceService; +import com.flow.demo.common.online.service.OnlineTableService; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Set; + +/** + * 数据源关联数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlineDatasourceRelationService") +public class OnlineDatasourceRelationServiceImpl + extends BaseService implements OnlineDatasourceRelationService { + + @Autowired + private OnlineDatasourceRelationMapper onlineDatasourceRelationMapper; + @Autowired + private OnlineDatasourceTableMapper onlineDatasourceTableMapper; + @Autowired + private OnlineDatasourceService onlineDatasourceService; + @Autowired + private OnlineColumnService onlineColumnService; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlineDatasourceRelationMapper; + } + + /** + * 保存新增对象。 + * + * @param relation 新增对象。 + * @param slaveSqlTable 新增的关联从数据表对象。 + * @param slaveSqlColumn 新增的关联从数据表对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public OnlineDatasourceRelation saveNew( + OnlineDatasourceRelation relation, SqlTable slaveSqlTable, SqlTableColumn slaveSqlColumn) { + // 查找数据源关联的数据表,判断当前关联的从表,是否已经存在于zz_online_datasource_table中了。 + // 对于同一个数据源及其关联,同一个数据表只会被创建一次,如果已经和当前数据源的其他Relation, + // 作为从表绑定了,怎么就可以直接使用这个OnlineTable了,否则就会为这个SqlTable,创建对应的OnlineTable。 + List datasourceTableList = + onlineTableService.getOnlineTableListByDatasourceId(relation.getDatasourceId()); + OnlineTable relationSlaveTable = null; + OnlineColumn relationSlaveColumn = null; + for (OnlineTable onlineTable : datasourceTableList) { + if (onlineTable.getTableName().equals(slaveSqlTable.getTableName())) { + relationSlaveTable = onlineTable; + relationSlaveColumn = onlineColumnService.getOnlineColumnByTableIdAndColumnName( + onlineTable.getTableId(), slaveSqlColumn.getColumnName()); + break; + } + } + if (relationSlaveTable == null) { + relationSlaveTable = onlineTableService.saveNewFromSqlTable(slaveSqlTable); + for (OnlineColumn onlineColumn : relationSlaveTable.getColumnList()) { + if (onlineColumn.getColumnName().equals(slaveSqlColumn.getColumnName())) { + relationSlaveColumn = onlineColumn; + break; + } + } + } + relation.setRelationId(idGenerator.nextLongId()); + relation.setSlaveTableId(relationSlaveTable.getTableId()); + relation.setSlaveColumnId(relationSlaveColumn.getColumnId()); + Date now = new Date(); + relation.setUpdateTime(now); + relation.setCreateTime(now); + onlineDatasourceRelationMapper.insert(relation); + OnlineDatasourceTable datasourceTable = new OnlineDatasourceTable(); + datasourceTable.setId(idGenerator.nextLongId()); + datasourceTable.setDatasourceId(relation.getDatasourceId()); + datasourceTable.setRelationId(relation.getRelationId()); + datasourceTable.setTableId(relation.getSlaveTableId()); + onlineDatasourceTableMapper.insert(datasourceTable); + return relation; + } + + /** + * 更新数据对象。 + * + * @param relation 更新的对象。 + * @param originalRelation 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlineDatasourceRelation relation, OnlineDatasourceRelation originalRelation) { + relation.setUpdateTime(new Date()); + relation.setCreateTime(originalRelation.getCreateTime()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = + this.createUpdateQueryForNullValue(relation, relation.getRelationId()); + return onlineDatasourceRelationMapper.update(relation, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param relationId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long relationId) { + if (onlineDatasourceRelationMapper.deleteById(relationId) != 1) { + return false; + } + OnlineDatasourceTable filter = new OnlineDatasourceTable(); + filter.setRelationId(relationId); + QueryWrapper queryWrapper = new QueryWrapper<>(filter); + OnlineDatasourceTable datasourceTable = onlineDatasourceTableMapper.selectOne(queryWrapper); + onlineDatasourceTableMapper.delete(queryWrapper); + filter = new OnlineDatasourceTable(); + filter.setDatasourceId(datasourceTable.getDatasourceId()); + filter.setTableId(datasourceTable.getTableId()); + // 不在有引用该表的时候,可以删除该数据源关联引用的从表了。 + if (onlineDatasourceTableMapper.selectCount(new QueryWrapper<>(filter)) == 0) { + onlineTableService.remove(datasourceTable.getTableId()); + } + return true; + } + + /** + * 当前服务的支持表为从表,根据主表的主键Id,删除一对多的从表数据。 + * + * @param datasourceId 主表主键Id。 + * @return 删除数量。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public int removeByDatasourceId(Long datasourceId) { + OnlineDatasourceRelation deletedObject = new OnlineDatasourceRelation(); + deletedObject.setDatasourceId(datasourceId); + return onlineDatasourceRelationMapper.delete(new QueryWrapper<>(deletedObject)); + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineDatasourceRelationListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDatasourceRelationListByDatasourceIds( + OnlineDatasourceRelation filter, String orderBy) { + return onlineDatasourceRelationMapper.getOnlineDatasourceRelationList(filter, orderBy); + } + + /** + * 获取指定数据源Id集合下的所有数据源关联列表。 + * + * @param datasourceIdSet 数据源Id集合。 + * @param relationType 关联类型,如果为空,则查询全部类型。 + * @return 指定数据源下的所有关联列表。 + */ + @Override + public List getOnlineDatasourceRelationListByDatasourceIds( + Set datasourceIdSet, Integer relationType) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(OnlineDatasourceRelation::getDatasourceId, datasourceIdSet); + if (relationType != null) { + queryWrapper.lambda().eq(OnlineDatasourceRelation::getRelationType, relationType); + } + return onlineDatasourceRelationMapper.selectList(queryWrapper); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineDatasourceRelationList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDatasourceRelationListWithRelation( + OnlineDatasourceRelation filter, String orderBy) { + List resultList = + onlineDatasourceRelationMapper.getOnlineDatasourceRelationList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param relation 最新数据对象。 + * @param originalRelation 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + @Override + public CallResult verifyRelatedData( + OnlineDatasourceRelation relation, OnlineDatasourceRelation originalRelation) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + if (this.needToVerify(relation, originalRelation, OnlineDatasourceRelation::getMasterColumnId) + && !onlineColumnService.existId(relation.getMasterColumnId())) { + return CallResult.error(String.format(errorMessageFormat, "主表关联字段Id")); + } + if (this.needToVerify(relation, originalRelation, OnlineDatasourceRelation::getSlaveTableId) + && !onlineTableService.existId(relation.getSlaveTableId())) { + return CallResult.error(String.format(errorMessageFormat, "从表Id")); + } + if (this.needToVerify(relation, originalRelation, OnlineDatasourceRelation::getSlaveColumnId) + && !onlineColumnService.existId(relation.getSlaveColumnId())) { + return CallResult.error(String.format(errorMessageFormat, "从表关联字段Id")); + } + return CallResult.ok(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDatasourceServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDatasourceServiceImpl.java new file mode 100644 index 00000000..f753e008 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDatasourceServiceImpl.java @@ -0,0 +1,238 @@ +package com.flow.demo.common.online.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.dao.OnlineDatasourceMapper; +import com.flow.demo.common.online.dao.OnlineDatasourceTableMapper; +import com.flow.demo.common.online.dao.OnlinePageDatasourceMapper; +import com.flow.demo.common.online.model.OnlineDatasource; +import com.flow.demo.common.online.model.OnlineDatasourceTable; +import com.flow.demo.common.online.model.OnlinePageDatasource; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.object.SqlTable; +import com.flow.demo.common.online.service.OnlineDatasourceRelationService; +import com.flow.demo.common.online.service.OnlineDatasourceService; +import com.flow.demo.common.online.service.OnlineTableService; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 数据模型数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlineDatasourceService") +public class OnlineDatasourceServiceImpl extends BaseService implements OnlineDatasourceService { + + @Autowired + private OnlineDatasourceMapper onlineDatasourceMapper; + @Autowired + private OnlinePageDatasourceMapper onlinePageDatasourceMapper; + @Autowired + private OnlineDatasourceTableMapper onlineDatasourceTableMapper; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private OnlineDatasourceRelationService onlineDatasourceRelationService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlineDatasourceMapper; + } + + /** + * 保存新增对象。 + * + * @param onlineDatasource 新增对象。 + * @param sqlTable 新增的数据表对象。 + * @param pageId 关联的页面Id。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public OnlineDatasource saveNew(OnlineDatasource onlineDatasource, SqlTable sqlTable, Long pageId) { + OnlineTable onlineTable = onlineTableService.saveNewFromSqlTable(sqlTable); + onlineDatasource.setDatasourceId(idGenerator.nextLongId()); + onlineDatasource.setMasterTableId(onlineTable.getTableId()); + Date now = new Date(); + onlineDatasource.setUpdateTime(now); + onlineDatasource.setCreateTime(now); + onlineDatasourceMapper.insert(onlineDatasource); + OnlineDatasourceTable datasourceTable = new OnlineDatasourceTable(); + datasourceTable.setId(idGenerator.nextLongId()); + datasourceTable.setDatasourceId(onlineDatasource.getDatasourceId()); + datasourceTable.setTableId(onlineDatasource.getMasterTableId()); + onlineDatasourceTableMapper.insert(datasourceTable); + OnlinePageDatasource onlinePageDatasource = new OnlinePageDatasource(); + onlinePageDatasource.setId(idGenerator.nextLongId()); + onlinePageDatasource.setPageId(pageId); + onlinePageDatasource.setDatasourceId(onlineDatasource.getDatasourceId()); + onlinePageDatasourceMapper.insert(onlinePageDatasource); + return onlineDatasource; + } + + /** + * 更新数据对象。 + * + * @param onlineDatasource 更新的对象。 + * @param originalOnlineDatasource 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlineDatasource onlineDatasource, OnlineDatasource originalOnlineDatasource) { + onlineDatasource.setUpdateTime(new Date()); + onlineDatasource.setCreateTime(originalOnlineDatasource.getCreateTime()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = + this.createUpdateQueryForNullValue(onlineDatasource, onlineDatasource.getDatasourceId()); + return onlineDatasourceMapper.update(onlineDatasource, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param datasourceId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long datasourceId) { + if (onlineDatasourceMapper.deleteById(datasourceId) == 0) { + return false; + } + onlineDatasourceRelationService.removeByDatasourceId(datasourceId); + // 开始删除多对多父表的关联 + OnlinePageDatasource onlinePageDatasource = new OnlinePageDatasource(); + onlinePageDatasource.setDatasourceId(datasourceId); + onlinePageDatasourceMapper.delete(new QueryWrapper<>(onlinePageDatasource)); + OnlineDatasourceTable filter = new OnlineDatasourceTable(); + filter.setDatasourceId(datasourceId); + QueryWrapper queryWrapper = new QueryWrapper<>(filter); + List datasourceTableList = onlineDatasourceTableMapper.selectList(queryWrapper); + onlineDatasourceTableMapper.delete(queryWrapper); + Set tableIdSet = datasourceTableList.stream() + .map(OnlineDatasourceTable::getTableId).collect(Collectors.toSet()); + onlineTableService.removeByTableIdSet(tableIdSet); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineDatasourceListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDatasourceList(OnlineDatasource filter, String orderBy) { + return onlineDatasourceMapper.getOnlineDatasourceList(filter, orderBy); + } + + /** + * 查询指定数据源Id集合的数据源列表。 + * + * @param datasourceIdSet 数据源Id集合。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDatasourceList(Set datasourceIdSet) { + return onlineDatasourceMapper.selectBatchIds(datasourceIdSet); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineDatasourceList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDatasourceListWithRelation(OnlineDatasource filter, String orderBy) { + List resultList = onlineDatasourceMapper.getOnlineDatasourceList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param pageId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getNotInOnlineDatasourceListByPageId(Long pageId, OnlineDatasource filter, String orderBy) { + List resultList = + onlineDatasourceMapper.getNotInOnlineDatasourceListByPageId(pageId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + /** + * 在多对多关系中,当前Service的数据表为从表,返回与指定主表主键Id存在对多对关系的列表。 + * + * @param pageId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDatasourceListByPageId(Long pageId, OnlineDatasource filter, String orderBy) { + List resultList = + onlineDatasourceMapper.getOnlineDatasourceListByPageId(pageId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + /** + * 获取指定数据源Id集合所关联的在线表关联数据。 + * + * @param datasourceIdSet 数据源Id集合。 + * @return 数据源和数据表的多对多关联列表。 + */ + @Override + public List getOnlineDatasourceTableList(Set datasourceIdSet) { + return onlineDatasourceTableMapper.selectList(new QueryWrapper() + .lambda().in(OnlineDatasourceTable::getDatasourceId, datasourceIdSet)); + } + + /** + * 根据在线表单Id集合,获取关联的在线数据源对象列表。 + * + * @param formIdSet 在线表单Id集合。 + * @return 与参数表单Id关联的数据源列表。 + */ + @Override + public List getOnlineDatasourceListByFormIds(Set formIdSet) { + return onlineDatasourceMapper.getOnlineDatasourceListByFormIds(formIdSet); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDblinkServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDblinkServiceImpl.java new file mode 100644 index 00000000..79cb2740 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDblinkServiceImpl.java @@ -0,0 +1,205 @@ +package com.flow.demo.common.online.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.config.DataSourceContextHolder; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.config.OnlineProperties; +import com.flow.demo.common.online.dao.OnlineDblinkMapper; +import com.flow.demo.common.online.model.OnlineDblink; +import com.flow.demo.common.online.object.SqlTable; +import com.flow.demo.common.online.object.SqlTableColumn; +import com.flow.demo.common.online.service.OnlineDblinkService; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.io.Serializable; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 数据库链接数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlineDblinkService") +public class OnlineDblinkServiceImpl extends BaseService implements OnlineDblinkService { + + @Autowired + private OnlineDblinkMapper onlineDblinkMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + @Autowired + private OnlineProperties onlineProperties; + + private Map dblinkMap; + + @PostConstruct + public void loadAllDblink() { + List dblinkList = super.getAllList(); + this.dblinkMap = dblinkList.stream().collect(Collectors.toMap(OnlineDblink::getDblinkId, c -> c)); + } + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlineDblinkMapper; + } + + /** + * 根据主键Id,从本地缓存中读取数据库链接信息。 + * 这里之所以不考虑缓存补偿,是因为如果出现新的用于在线表单的数据库链接,我们也需要修改当前服务的多数据源配置才能正常工作, + * 否则新OnlineDblink的ConstantType,没法保证正常的数据源切换。 + * + * @param dblinkId 数据库链接Id。 + * @return 查询到的OnlineDblink对象。 + */ + @Override + public OnlineDblink getById(Serializable dblinkId) { + return dblinkMap.get(dblinkId); + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineDblinkListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDblinkList(OnlineDblink filter, String orderBy) { + return onlineDblinkMapper.getOnlineDblinkList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineDblinkList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDblinkListWithRelation(OnlineDblink filter, String orderBy) { + List resultList = onlineDblinkMapper.getOnlineDblinkList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取指定DBLink下面的全部数据表。 + * + * @param dblink 数据库链接对象。 + * @return 全部数据表列表。 + */ + @Override + public List getDblinkTableList(OnlineDblink dblink) { + Integer originalType = DataSourceContextHolder.setDataSourceType(dblink.getDblinkConfigConstant()); + try { + List> resultList = + onlineDblinkMapper.getTableListWithPrefix(onlineProperties.getTablePrefix()); + List tableList = new LinkedList<>(); + resultList.forEach(r -> { + SqlTable sqlTable = BeanUtil.mapToBean(r, SqlTable.class, false, null); + sqlTable.setDblinkId(dblink.getDblinkId()); + tableList.add(sqlTable); + }); + return tableList; + } finally { + DataSourceContextHolder.unset(originalType); + } + } + + /** + * X + * 获取指定DBLink下,指定表名的数据表对象,及其关联字段列表。 + * + * @param dblink 数据库链接对象。 + * @param tableName 数据库中的数据表名。 + * @return 数据表对象。 + */ + @Override + public SqlTable getDblinkTable(OnlineDblink dblink, String tableName) { + Integer originalType = DataSourceContextHolder.setDataSourceType(dblink.getDblinkConfigConstant()); + try { + Map result = onlineDblinkMapper.getTableByName(tableName); + if (result == null) { + return null; + } + SqlTable sqlTable = BeanUtil.mapToBean(result, SqlTable.class, false, null); + sqlTable.setDblinkId(dblink.getDblinkId()); + sqlTable.setColumnList(getDblinkTableColumnList(dblink, tableName)); + return sqlTable; + } finally { + DataSourceContextHolder.unset(originalType); + } + } + + /** + * 获取指定DBLink下,指定表名的字段列表。 + * + * @param dblink 数据库链接对象。 + * @param tableName 表名。 + * @return 表的字段列表。 + */ + @Override + public List getDblinkTableColumnList(OnlineDblink dblink, String tableName) { + Integer originalType = DataSourceContextHolder.setDataSourceType(dblink.getDblinkConfigConstant()); + try { + List> resultList = onlineDblinkMapper.getTableColumnList(tableName); + List columnList = new LinkedList<>(); + resultList.forEach(r -> { + SqlTableColumn sqlTableColumn = + BeanUtil.mapToBean(r, SqlTableColumn.class, false, null); + sqlTableColumn.setAutoIncrement("auto_increment".equals(sqlTableColumn.getExtra())); + columnList.add(sqlTableColumn); + }); + return columnList; + } finally { + DataSourceContextHolder.unset(originalType); + } + } + + /** + * 获取指定DBLink下,指定表的字段对象。 + * + * @param dblink 数据库链接对象。 + * @param tableName 数据库中的数据表名。 + * @param columnName 数据库中的数据表的字段名。 + * @return 表的字段对象。 + */ + @Override + public SqlTableColumn getDblinkTableColumn(OnlineDblink dblink, String tableName, String columnName) { + Integer originalType = DataSourceContextHolder.setDataSourceType(dblink.getDblinkConfigConstant()); + try { + Map result = onlineDblinkMapper.getTableColumnByName(tableName, columnName); + if (result == null) { + return null; + } + SqlTableColumn sqlTableColumn = + BeanUtil.mapToBean(result, SqlTableColumn.class, false, null); + sqlTableColumn.setAutoIncrement("auto_increment".equals(sqlTableColumn.getExtra())); + return sqlTableColumn; + } finally { + DataSourceContextHolder.unset(originalType); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDictServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDictServiceImpl.java new file mode 100644 index 00000000..b7b9a4da --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineDictServiceImpl.java @@ -0,0 +1,157 @@ +package com.flow.demo.common.online.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.dao.OnlineDictMapper; +import com.flow.demo.common.online.model.OnlineDict; +import com.flow.demo.common.online.service.OnlineDblinkService; +import com.flow.demo.common.online.service.OnlineDictService; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Set; + +/** + * 在线表单字典数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlineDictService") +public class OnlineDictServiceImpl extends BaseService implements OnlineDictService { + + @Autowired + private OnlineDictMapper onlineDictMapper; + @Autowired + private OnlineDblinkService dblinkService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlineDictMapper; + } + + /** + * 保存新增对象。 + * + * @param onlineDict 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public OnlineDict saveNew(OnlineDict onlineDict) { + onlineDict.setDictId(idGenerator.nextLongId()); + Date now = new Date(); + onlineDict.setUpdateTime(now); + onlineDict.setCreateTime(now); + onlineDictMapper.insert(onlineDict); + return onlineDict; + } + + /** + * 更新数据对象。 + * + * @param onlineDict 更新的对象。 + * @param originalOnlineDict 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlineDict onlineDict, OnlineDict originalOnlineDict) { + onlineDict.setUpdateTime(new Date()); + onlineDict.setCreateTime(originalOnlineDict.getCreateTime()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(onlineDict, onlineDict.getDictId()); + return onlineDictMapper.update(onlineDict, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param dictId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long dictId) { + return onlineDictMapper.deleteById(dictId) == 1; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineDictListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDictList(OnlineDict filter, String orderBy) { + return onlineDictMapper.getOnlineDictList(filter, orderBy); + } + + /** + * 根据指定字典Id集合返回字段对象数据列表。 + * + * @param dictIdSet 字典Id集合。 + * @return 查询后的字典对象列表。 + */ + @Override + public List getOnlineDictList(Set dictIdSet) { + return onlineDictMapper.selectBatchIds(dictIdSet); + } + + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineDictList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineDictListWithRelation(OnlineDict filter, String orderBy) { + List resultList = onlineDictMapper.getOnlineDictList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param onlineDict 最新数据对象。 + * @param originalOnlineDict 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + @Override + public CallResult verifyRelatedData(OnlineDict onlineDict, OnlineDict originalOnlineDict) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + //这里是基于字典的验证。 + if (this.needToVerify(onlineDict, originalOnlineDict, OnlineDict::getDblinkId) + && !dblinkService.existId(onlineDict.getDblinkId())) { + return CallResult.error(String.format(errorMessageFormat, "数据库链接主键id")); + } + return CallResult.ok(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineFormServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineFormServiceImpl.java new file mode 100644 index 00000000..ecf17d60 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineFormServiceImpl.java @@ -0,0 +1,262 @@ +package com.flow.demo.common.online.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.dao.OnlineFormDatasourceMapper; +import com.flow.demo.common.online.dao.OnlineFormMapper; +import com.flow.demo.common.online.model.OnlineForm; +import com.flow.demo.common.online.model.OnlineFormDatasource; +import com.flow.demo.common.online.service.OnlineFormService; +import com.flow.demo.common.online.service.OnlinePageService; +import com.flow.demo.common.online.service.OnlineTableService; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 在线表单数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlineFormService") +public class OnlineFormServiceImpl extends BaseService implements OnlineFormService { + + @Autowired + private OnlineFormMapper onlineFormMapper; + @Autowired + private OnlineFormDatasourceMapper onlineFormDatasourceMapper; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private OnlinePageService onlinePageService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlineFormMapper; + } + + /** + * 保存新增对象。 + * + * @param onlineForm 新增对象。 + * @param datasourceIdSet 在线表单关联的数据源Id集合。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public OnlineForm saveNew(OnlineForm onlineForm, Set datasourceIdSet) { + onlineForm.setFormId(idGenerator.nextLongId()); + Date now = new Date(); + onlineForm.setUpdateTime(now); + onlineForm.setCreateTime(now); + onlineFormMapper.insert(onlineForm); + if (CollUtil.isNotEmpty(datasourceIdSet)) { + for (Long datasourceId : datasourceIdSet) { + OnlineFormDatasource onlineFormDatasource = new OnlineFormDatasource(); + onlineFormDatasource.setId(idGenerator.nextLongId()); + onlineFormDatasource.setFormId(onlineForm.getFormId()); + onlineFormDatasource.setDatasourceId(datasourceId); + onlineFormDatasourceMapper.insert(onlineFormDatasource); + } + } + return onlineForm; + } + + /** + * 更新数据对象。 + * + * @param onlineForm 更新的对象。 + * @param originalOnlineForm 原有数据对象。 + * @param datasourceIdSet 在线表单关联的数据源Id集合。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlineForm onlineForm, OnlineForm originalOnlineForm, Set datasourceIdSet) { + onlineForm.setUpdateTime(new Date()); + onlineForm.setCreateTime(originalOnlineForm.getCreateTime()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(onlineForm, onlineForm.getFormId()); + if (onlineFormMapper.update(onlineForm, uw) != 1) { + return false; + } + OnlineFormDatasource formDatasourceFilter = new OnlineFormDatasource(); + formDatasourceFilter.setFormId(onlineForm.getFormId()); + onlineFormDatasourceMapper.delete(new QueryWrapper<>(formDatasourceFilter)); + if (CollUtil.isNotEmpty(datasourceIdSet)) { + for (Long datasourceId : datasourceIdSet) { + OnlineFormDatasource onlineFormDatasource = new OnlineFormDatasource(); + onlineFormDatasource.setId(idGenerator.nextLongId()); + onlineFormDatasource.setFormId(onlineForm.getFormId()); + onlineFormDatasource.setDatasourceId(datasourceId); + onlineFormDatasourceMapper.insert(onlineFormDatasource); + } + } + return true; + } + + /** + * 删除指定数据。 + * + * @param formId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long formId) { + if (onlineFormMapper.deleteById(formId) != 1) { + return false; + } + OnlineFormDatasource formDatasourceFilter = new OnlineFormDatasource(); + formDatasourceFilter.setFormId(formId); + onlineFormDatasourceMapper.delete(new QueryWrapper<>(formDatasourceFilter)); + return true; + } + + /** + * 根据PageId,删除其所属的所有表单,以及表单关联的数据源数据。 + * + * @param pageId 指定的pageId。 + * @return 删除数量。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public int removeByPageId(Long pageId) { + OnlineForm filter = new OnlineForm(); + filter.setPageId(pageId); + List formList = onlineFormMapper.selectList(new QueryWrapper<>(filter)); + Set formIdSet = formList.stream().map(OnlineForm::getFormId).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(formIdSet)) { + onlineFormDatasourceMapper.delete( + new QueryWrapper().lambda().in(OnlineFormDatasource::getFormId, formIdSet)); + } + return onlineFormMapper.delete(new QueryWrapper<>(filter)); + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineFormListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineFormList(OnlineForm filter, String orderBy) { + return onlineFormMapper.getOnlineFormList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineFormList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineFormListWithRelation(OnlineForm filter, String orderBy) { + List resultList = onlineFormMapper.getOnlineFormList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取使用指定数据表的表单列表。 + * + * @param tableId 数据表Id。 + * @return 使用该数据表的表单列表。 + */ + @Override + public List getOnlineFormListByTableId(Long tableId) { + OnlineForm filter = new OnlineForm(); + filter.setMasterTableId(tableId); + return onlineFormMapper.selectList(new QueryWrapper<>(filter)); + } + + /** + * 获取指定表单的数据源列表。 + * + * @param formId 指定的表单。 + * @return 表单和数据源的多对多关联对象列表。 + */ + @Override + public List getFormDatasourceListByFormId(Long formId) { + return onlineFormDatasourceMapper.selectList( + new QueryWrapper().lambda().eq(OnlineFormDatasource::getFormId, formId)); + } + + /** + * 查询正在使用当前数据源的表单。 + * + * @param datasourceId 数据源Id。 + * @return 正在使用当前数据源的表单列表。 + */ + @Override + public List getOnlineFormListByDatasourceId(Long datasourceId) { + List formDatasourceList = onlineFormDatasourceMapper.selectList( + new QueryWrapper().lambda().eq(OnlineFormDatasource::getDatasourceId, datasourceId)); + if (CollUtil.isEmpty(formDatasourceList)) { + return new LinkedList<>(); + } + Collection formIdSet = formDatasourceList.stream() + .map(OnlineFormDatasource::getFormId).collect(Collectors.toSet()); + return onlineFormMapper.selectList( + new QueryWrapper().lambda().in(OnlineForm::getFormId, formIdSet)); + } + + @Override + public List getOnlineFormListByPageIds(Set pageIdSet) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(OnlineForm::getPageId, pageIdSet); + return onlineFormMapper.selectList(queryWrapper); + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param onlineForm 最新数据对象。 + * @param originalOnlineForm 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + @Override + public CallResult verifyRelatedData(OnlineForm onlineForm, OnlineForm originalOnlineForm) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + //这里是基于字典的验证。 + if (this.needToVerify(onlineForm, originalOnlineForm, OnlineForm::getMasterTableId) + && !onlineTableService.existId(onlineForm.getMasterTableId())) { + return CallResult.error(String.format(errorMessageFormat, "表单主表id")); + } + //这里是一对多的验证 + if (this.needToVerify(onlineForm, originalOnlineForm, OnlineForm::getPageId) + && !onlinePageService.existId(onlineForm.getPageId())) { + return CallResult.error(String.format(errorMessageFormat, "页面id")); + } + return CallResult.ok(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineOperationServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineOperationServiceImpl.java new file mode 100644 index 00000000..b649e4a2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineOperationServiceImpl.java @@ -0,0 +1,973 @@ +package com.flow.demo.common.online.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.flow.demo.common.core.annotation.MyDataSourceResolver; +import com.flow.demo.common.core.constant.AggregationType; +import com.flow.demo.common.core.exception.NoDataPermException; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.object.MyWhereCriteria; +import com.flow.demo.common.core.object.TokenData; +import com.flow.demo.common.core.object.Tuple2; +import com.flow.demo.common.core.util.RedisKeyUtil; +import com.flow.demo.common.datafilter.constant.DataPermRuleType; +import com.flow.demo.common.datafilter.config.DataFilterProperties; +import com.flow.demo.common.online.model.constant.*; +import com.flow.demo.common.online.service.OnlineVirtualColumnService; +import com.flow.demo.common.online.util.OnlineOperationHelper; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.util.OnlineDataSourceResolver; +import com.flow.demo.common.online.util.OnlineConstant; +import com.flow.demo.common.online.dao.OnlineOperationMapper; +import com.flow.demo.common.online.dto.OnlineFilterDto; +import com.flow.demo.common.online.model.*; +import com.flow.demo.common.online.object.ColumnData; +import com.flow.demo.common.online.object.JoinTableInfo; +import com.flow.demo.common.online.service.OnlineDictService; +import com.flow.demo.common.online.service.OnlineOperationService; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 在线表单运行时数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@MyDataSourceResolver(resolver = OnlineDataSourceResolver.class) +@Slf4j +@Service("onlineOperationService") +public class OnlineOperationServiceImpl implements OnlineOperationService { + + @Autowired + private OnlineOperationMapper onlineOperationMapper; + @Autowired + private OnlineDictService onlineDictService; + @Autowired + private OnlineVirtualColumnService onlineVirtualColumnService; + @Autowired + private OnlineOperationHelper onlineOperationHelper; + @Autowired + private IdGeneratorWrapper idGenerator; + @Autowired + private RedissonClient redissonClient; + @Autowired + private DataFilterProperties dataFilterProperties; + + /** + * 聚合返回数据中,聚合键的常量字段名。 + * 如select groupColumn groupedKey, max(aggregationColumn) aggregatedValue。 + */ + public static final String KEY_NAME = "groupedKey"; + /** + * 聚合返回数据中,聚合值的常量字段名。 + * 如select groupColumn groupedKey, max(aggregationColumn) aggregatedValue。 + */ + public static final String VALUE_NAME = "aggregatedValue"; + + @Transactional(rollbackFor = Exception.class) + @Override + public Object saveNew(OnlineTable table, List columnDataList) { + String tableName = table.getTableName(); + String columnNames = this.makeColumnNames(columnDataList); + List columnValueList = new LinkedList<>(); + Object id = null; + // 这里逐个处理每一行数据,特别是非自增主键、createUserId、createTime、逻辑删除等特殊属性的字段。 + for (ColumnData columnData : columnDataList) { + if (!columnData.getColumn().getAutoIncrement()) { + this.makeupColumnValue(columnData); + columnValueList.add(columnData.getColumnValue()); + if (columnData.getColumn().getPrimaryKey()) { + id = columnData.getColumnValue(); + } + } + } + onlineOperationMapper.insert(tableName, columnNames, columnValueList); + return id; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Object saveNewAndSlaveRelation( + OnlineTable masterTable, + List columnDataList, + Map>> slaveDataListMap) { + Object id = this.saveNew(masterTable, columnDataList); + // 迭代多个一对多关联。 + for (Map.Entry>> entry : slaveDataListMap.entrySet()) { + Long masterColumnId = entry.getKey().getMasterColumnId(); + ColumnData masterColumnData = null; + for (ColumnData columnData : columnDataList) { + if (columnData.getColumn().getColumnId().equals(masterColumnId)) { + masterColumnData = columnData; + break; + } + } + Long slaveColumnId = entry.getKey().getSlaveColumnId(); + // 迭代一对多关联中的数据集合 + for (List slaveColumnDataList : entry.getValue()) { + // 迭代一对多关联记录的字段列表。 + for (ColumnData slaveColumnData : slaveColumnDataList) { + if (slaveColumnData.getColumn().getColumnId().equals(slaveColumnId)) { + slaveColumnData.setColumnValue(masterColumnData.getColumnValue()); + break; + } + } + this.saveNew(entry.getKey().getSlaveTable(), slaveColumnDataList); + } + } + return id; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlineTable table, List columnDataList) { + String tableName = table.getTableName(); + List updateColumnList = new LinkedList<>(); + List whereColumnList = new LinkedList<>(); + for (ColumnData columnData : columnDataList) { + this.makeupColumnValue(columnData); + // 对于以下几种类型的字段,忽略更新。 + if (columnData.getColumn().getPrimaryKey() + || ObjectUtil.equal(columnData.getColumn().getFieldKind(), FieldKind.LOGIC_DELETE)) { + whereColumnList.add(columnData); + continue; + } + if (ObjectUtil.notEqual(columnData.getColumn().getFieldKind(), FieldKind.CREATE_TIME) + && ObjectUtil.notEqual(columnData.getColumn().getFieldKind(), FieldKind.CREATE_USER_ID)) { + updateColumnList.add(columnData); + } + } + if (CollUtil.isEmpty(updateColumnList)) { + return true; + } + String dataPermFilter = this.buildDataPermFilter(table); + return onlineOperationMapper.update(tableName, updateColumnList, whereColumnList, dataPermFilter) == 1; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean updateColumn(OnlineTable table, String dataId, OnlineColumn column, T dataValue) { + List whereColumnList = new LinkedList<>(); + if (table.getLogicDeleteColumn() != null) { + ColumnData logicDeleteColumnData = new ColumnData(); + logicDeleteColumnData.setColumn(table.getLogicDeleteColumn()); + logicDeleteColumnData.setColumnValue(GlobalDeletedFlag.NORMAL); + whereColumnList.add(logicDeleteColumnData); + } + ColumnData primaryKeyColumnData = new ColumnData(); + primaryKeyColumnData.setColumn(table.getPrimaryKeyColumn()); + primaryKeyColumnData.setColumnValue( + onlineOperationHelper.convertToTypeValue(table.getPrimaryKeyColumn(), dataId)); + whereColumnList.add(primaryKeyColumnData); + List updateColumnList = new LinkedList<>(); + ColumnData updateColumnData = new ColumnData(); + updateColumnData.setColumn(column); + updateColumnData.setColumnValue(dataValue); + updateColumnList.add(updateColumnData); + List filterList = + this.makeDefaultFilter(table, table.getPrimaryKeyColumn(), dataId); + String dataPermFilter = this.buildDataPermFilter(table); + return onlineOperationMapper.update( + table.getTableName(), updateColumnList, whereColumnList, dataPermFilter) == 1; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean delete(OnlineTable table, List relationList, String dataId) { + Map masterData = null; + if (CollUtil.isNotEmpty(relationList)) { + for (OnlineDatasourceRelation relation : relationList) { + if (relation.getCascadeDelete() + && !relation.getMasterColumnId().equals(table.getPrimaryKeyColumn().getColumnId())) { + masterData = getMasterData(table, null, null, dataId); + break; + } + } + } + List filterList = + this.makeDefaultFilter(table, table.getPrimaryKeyColumn(), dataId); + String dataPermFilter = this.buildDataPermFilter(table); + if (table.getLogicDeleteColumn() == null) { + if (onlineOperationMapper.delete(table.getTableName(), filterList, dataPermFilter) != 1) { + return false; + } + } else { + if (!this.doLogicDelete(table, table.getPrimaryKeyColumn(), dataId, dataPermFilter)) { + return false; + } + } + if (CollUtil.isEmpty(relationList)) { + return true; + } + for (OnlineDatasourceRelation relation : relationList) { + if (!relation.getCascadeDelete()) { + continue; + } + OnlineTable slaveTable = relation.getSlaveTable(); + OnlineColumn slaveColumn = + relation.getSlaveTable().getColumnMap().get(relation.getSlaveColumnId()); + String columnValue = dataId; + if (!relation.getMasterColumnId().equals(table.getPrimaryKeyColumn().getColumnId())) { + OnlineColumn relationMasterColumn = table.getColumnMap().get(relation.getMasterColumnId()); + columnValue = masterData.get(relationMasterColumn.getColumnName()).toString(); + } + if (slaveTable.getLogicDeleteColumn() == null) { + List slaveFilterList = + this.makeDefaultFilter(relation.getSlaveTable(), slaveColumn, columnValue); + onlineOperationMapper.delete(slaveTable.getTableName(), slaveFilterList, null); + } else { + this.doLogicDelete(slaveTable, slaveColumn, columnValue, null); + } + } + return true; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void forceDelete(OnlineTable table, OnlineColumn column, String columnValue) { + List filterList = this.makeDefaultFilter(table, column, columnValue); + onlineOperationMapper.delete(table.getTableName(), filterList, null); + } + + @Override + public Map getMasterData( + OnlineTable table, + List oneToOneRelationList, + List allRelationList, + String dataId) { + List filterList = + this.makeDefaultFilter(table, table.getPrimaryKeyColumn(), dataId); + // 组件表关联数据。 + List joinInfoList = this.makeJoinInfoList(table, oneToOneRelationList); + // 拼接关联表的select fields字段。 + String selectFields = this.makeSelectFields(table, oneToOneRelationList); + String dataPermFilter = this.buildDataPermFilter(table); + List> resultList = onlineOperationMapper.getList( + table.getTableName(), joinInfoList, selectFields, filterList, dataPermFilter, null); + this.buildDataListWithDict(resultList, table, oneToOneRelationList); + if (CollUtil.isEmpty(resultList)) { + return null; + } + if (CollUtil.isNotEmpty(allRelationList)) { + // 针对一对多和多对多关联,计算虚拟聚合字段。 + List toManyRelationList = allRelationList.stream() + .filter(r -> !r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList()); + this.buildVirtualColumn(resultList, table, toManyRelationList); + } + return resultList.get(0); + } + + @Override + public Map getSlaveData(OnlineDatasourceRelation relation, String dataId) { + OnlineTable slaveTable = relation.getSlaveTable(); + List filterList = + this.makeDefaultFilter(slaveTable, slaveTable.getPrimaryKeyColumn(), dataId); + // 拼接关联表的select fields字段。 + String selectFields = this.makeSelectFields(slaveTable, relation.getVariableName()); + String dataPermFilter = this.buildDataPermFilter(slaveTable); + List> resultList = onlineOperationMapper.getList( + slaveTable.getTableName(), null, selectFields, filterList, dataPermFilter, null); + this.buildDataListWithDict(resultList, slaveTable, relation.getVariableName()); + return CollUtil.isEmpty(resultList) ? null : resultList.get(0); + } + + @Override + public List> getMasterDataList( + OnlineTable table, + List oneToOneRelationList, + List allRelationList, + List filterList, + String orderBy) { + // 如果主表中包含逻辑删除,需要在这里补充到过滤字段中。 + if (table.getLogicDeleteColumn() != null) { + if (filterList == null) { + filterList = new LinkedList<>(); + } + OnlineFilterDto filter = new OnlineFilterDto(); + filter.setTableName(table.getTableName()); + filter.setColumnName(table.getLogicDeleteColumn().getColumnName()); + filter.setColumnValue(GlobalDeletedFlag.NORMAL); + filterList.add(filter); + } + // 组件表关联数据。 + List joinInfoList = this.makeJoinInfoList(table, oneToOneRelationList); + // 拼接关联表的select fields字段。 + String selectFields = this.makeSelectFields(table, oneToOneRelationList); + String dataPermFilter = this.buildDataPermFilter(table); + List> resultList = onlineOperationMapper.getList( + table.getTableName(), joinInfoList, selectFields, filterList, dataPermFilter, orderBy); + this.buildDataListWithDict(resultList, table, oneToOneRelationList); + // 针对一对多和多对多关联,计算虚拟聚合字段。 + if (CollUtil.isNotEmpty(allRelationList)) { + List toManyRelationList = allRelationList.stream() + .filter(r -> !r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList()); + this.buildVirtualColumn(resultList, table, toManyRelationList); + } + return resultList; + } + + @Override + public List> getSlaveDataList( + OnlineDatasourceRelation relation, List filterList, String orderBy) { + OnlineTable slaveTable = relation.getSlaveTable(); + // 如果主表中包含逻辑删除,需要在这里补充到过滤字段中。 + if (slaveTable.getLogicDeleteColumn() != null) { + if (filterList == null) { + filterList = new LinkedList<>(); + } + OnlineFilterDto filter = new OnlineFilterDto(); + filter.setTableName(slaveTable.getTableName()); + filter.setColumnName(slaveTable.getLogicDeleteColumn().getColumnName()); + filter.setColumnValue(GlobalDeletedFlag.NORMAL); + filterList.add(filter); + } + // 拼接关联表的select fields字段。 + String selectFields = this.makeSelectFields(slaveTable, relation.getVariableName()); + String dataPermFilter = this.buildDataPermFilter(slaveTable); + List> resultList = onlineOperationMapper.getList( + slaveTable.getTableName(), null, selectFields, filterList, dataPermFilter, orderBy); + this.buildDataListWithDict(resultList, slaveTable, relation.getVariableName()); + return resultList; + } + + @Override + public List> getDictDataList(OnlineDict dict, List filterList) { + if (StrUtil.isNotEmpty(dict.getDeletedColumnName())) { + if (filterList == null) { + filterList = new LinkedList<>(); + } + OnlineFilterDto filter = new OnlineFilterDto(); + filter.setColumnName(dict.getDeletedColumnName()); + filter.setColumnValue(GlobalDeletedFlag.NORMAL); + filterList.add(filter); + } + String selectFields = this.makeDictSelectFields(dict, false); + String dataPermFilter = this.buildDataPermFilter( + dict.getTableName(), dict.getDeptFilterColumnName(), dict.getUserFilterColumnName()); + return onlineOperationMapper.getDictList(dict.getTableName(), selectFields, filterList, dataPermFilter); + } + + private void buildVirtualColumn( + List> resultList, OnlineTable table, List relationList) { + if (CollUtil.isEmpty(resultList) || CollUtil.isEmpty(relationList)) { + return; + } + OnlineVirtualColumn virtualColumnFilter = new OnlineVirtualColumn(); + virtualColumnFilter.setTableId(table.getTableId()); + virtualColumnFilter.setVirtualType(VirtualType.AGGREGATION); + List virtualColumnList = + onlineVirtualColumnService.getOnlineVirtualColumnList(virtualColumnFilter, null); + if (CollUtil.isEmpty(virtualColumnList)) { + return; + } + Map relationMap = + relationList.stream().collect(Collectors.toMap(OnlineDatasourceRelation::getRelationId, r -> r)); + for (OnlineVirtualColumn virtualColumn : virtualColumnList) { + OnlineDatasourceRelation relation = relationMap.get(virtualColumn.getRelationId()); + if (relation.getRelationType().equals(RelationType.ONE_TO_MANY)) { + this.doBuildVirtualColumnForOneToMany(table, resultList, virtualColumn, relation); + } + } + } + + private void doBuildVirtualColumnForOneToMany( + OnlineTable masterTable, + List> resultList, + OnlineVirtualColumn virtualColumn, + OnlineDatasourceRelation relation) { + String slaveTableName = relation.getSlaveTable().getTableName(); + OnlineColumn slaveColumn = + relation.getSlaveTable().getColumnMap().get(relation.getSlaveColumnId()); + String slaveColumnName = slaveColumn.getColumnName(); + OnlineColumn aggregationColumn = + relation.getSlaveTable().getColumnMap().get(virtualColumn.getAggregationColumnId()); + String aggregationColumnName = aggregationColumn.getColumnName(); + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + slaveTableName, slaveColumnName, slaveTableName, aggregationColumnName, virtualColumn.getAggregationType()); + String selectList = selectAndGroupByTuple.getFirst(); + String groupBy = selectAndGroupByTuple.getSecond(); + // 开始组装过滤从句。 + List criteriaList = new LinkedList<>(); + // 1. 组装主表数据对从表的过滤条件。 + MyWhereCriteria inlistFilter = new MyWhereCriteria(); + OnlineColumn masterColumn = masterTable.getColumnMap().get(relation.getMasterColumnId()); + String masterColumnName = masterColumn.getColumnName(); + Set masterIdSet = resultList.stream() + .map(r -> r.get(masterColumnName)).filter(Objects::nonNull).collect(Collectors.toSet()); + inlistFilter.setCriteria( + slaveTableName, slaveColumnName, slaveColumn.getObjectFieldType(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + criteriaList.add(inlistFilter); + // 2. 从表逻辑删除字段过滤。 + if (relation.getSlaveTable().getLogicDeleteColumn() != null) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + slaveTableName, + relation.getSlaveTable().getLogicDeleteColumn().getColumnName(), + relation.getSlaveTable().getLogicDeleteColumn().getObjectFieldType(), + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + if (StrUtil.isNotBlank(virtualColumn.getWhereClauseJson())) { + List whereClauseList = + JSONArray.parseArray(virtualColumn.getWhereClauseJson(), VirtualColumnWhereClause.class); + if (CollUtil.isNotEmpty(whereClauseList)) { + for (VirtualColumnWhereClause whereClause : whereClauseList) { + MyWhereCriteria whereClauseFilter = new MyWhereCriteria(); + OnlineColumn c = relation.getSlaveTable().getColumnMap().get(whereClause.getColumnId()); + whereClauseFilter.setCriteria( + slaveTableName, + c.getColumnName(), + c.getObjectFieldType(), + whereClause.getOperatorType(), + whereClause.getValue()); + criteriaList.add(whereClauseFilter); + } + } + } + String criteriaString = MyWhereCriteria.makeCriteriaString(criteriaList); + List> aggregationMapList = + onlineOperationMapper.getGroupedListByCondition(slaveTableName, selectList, criteriaString, groupBy); + this.doMakeAggregationData(resultList, aggregationMapList, masterColumnName, virtualColumn.getObjectFieldName()); + } + + private void doMakeAggregationData( + List> resultList, + List> aggregationMapList, + String masterColumnName, + String virtualColumnName) { + // 根据获取的分组聚合结果集,绑定到主表总的关联字段。 + if (CollectionUtils.isEmpty(aggregationMapList)) { + return; + } + Map relatedMap = new HashMap<>(aggregationMapList.size()); + for (Map map : aggregationMapList) { + relatedMap.put(map.get(KEY_NAME), map.get(VALUE_NAME)); + } + for (Map dataObject : resultList) { + Object masterIdValue = dataObject.get(masterColumnName); + if (masterIdValue != null) { + Object value = relatedMap.get(masterIdValue); + if (value != null) { + dataObject.put(virtualColumnName, value); + } + } + } + } + + private Tuple2 makeSelectListAndGroupByClause( + String groupTableName, + String groupColumnName, + String aggregationTableName, + String aggregationColumnName, + Integer aggregationType) { + String aggregationFunc = AggregationType.getAggregationFunction(aggregationType); + // 构建Select List + // 如:r_table.master_id groupedKey, SUM(r_table.aggr_column) aggregated_value + StringBuilder groupedSelectList = new StringBuilder(128); + groupedSelectList.append(groupTableName) + .append(".") + .append(groupColumnName) + .append(" ") + .append(KEY_NAME) + .append(", ") + .append(aggregationFunc) + .append("(") + .append(aggregationTableName) + .append(".") + .append(aggregationColumnName) + .append(") ") + .append(VALUE_NAME) + .append(" "); + StringBuilder groupBy = new StringBuilder(64); + groupBy.append(groupTableName).append(".").append(groupColumnName); + return new Tuple2<>(groupedSelectList.toString(), groupBy.toString()); + } + + private void buildDataListWithDict( + List> resultList, OnlineTable slaveTable, String relationVariableName) { + if (CollUtil.isEmpty(resultList)) { + return; + } + Set dictIdSet = new HashSet<>(); + // 先找主表字段对字典的依赖。 + Multimap dictColumnMap = LinkedHashMultimap.create(); + for (OnlineColumn column : slaveTable.getColumnMap().values()) { + if (column.getDictId() != null) { + dictIdSet.add(column.getDictId()); + dictColumnMap.put(column.getDictId(), + relationVariableName + OnlineConstant.RELATION_TABLE_COLUMN_SEPARATOR + column.getColumnName()); + } + } + this.doBuildDataListWithDict(resultList, dictIdSet, dictColumnMap); + } + + private void buildDataListWithDict( + List> resultList, OnlineTable masterTable, List relationList) { + if (CollUtil.isEmpty(resultList)) { + return; + } + Set dictIdSet = new HashSet<>(); + // 先找主表字段对字典的依赖。 + Multimap dictColumnMap = LinkedHashMultimap.create(); + for (OnlineColumn column : masterTable.getColumnMap().values()) { + if (column.getDictId() != null) { + dictIdSet.add(column.getDictId()); + dictColumnMap.put(column.getDictId(), column.getColumnName()); + } + } + // 再找关联表字段对字典的依赖。 + if (CollUtil.isNotEmpty(relationList)) { + for (OnlineDatasourceRelation relation : relationList) { + for (OnlineColumn column : relation.getSlaveTable().getColumnMap().values()) { + if (column.getDictId() != null) { + dictIdSet.add(column.getDictId()); + dictColumnMap.put(column.getDictId(), + relation.getVariableName() + OnlineConstant.RELATION_TABLE_COLUMN_SEPARATOR + column.getColumnName()); + } + } + } + } + this.doBuildDataListWithDict(resultList, dictIdSet, dictColumnMap); + } + + private void doBuildDataListWithDict( + List> resultList, Set dictIdSet, Multimap dictColumnMap) { + if (CollUtil.isEmpty(dictIdSet)) { + return; + } + List dictList = onlineDictService.getOnlineDictList(dictIdSet) + .stream().filter(d -> d.getDictType() == DictType.TABLE).collect(Collectors.toList()); + for (OnlineDict dict : dictList) { + Collection columnNameList = dictColumnMap.get(dict.getDictId()); + for (String columnName : columnNameList) { + Set dictIdDataSet = new HashSet<>(); + for (Map result : resultList) { + Object dictIdData = result.get(columnName); + if (ObjectUtil.isNotEmpty(dictIdData)) { + dictIdDataSet.add(dictIdData); + } + } + if (CollUtil.isEmpty(dictIdDataSet)) { + continue; + } + String selectFields = this.makeDictSelectFields(dict, true); + List filterList = new LinkedList<>(); + if (StrUtil.isNotBlank(dict.getDeletedColumnName())) { + OnlineFilterDto filter = new OnlineFilterDto(); + filter.setColumnName(dict.getDeletedColumnName()); + filter.setColumnValue(GlobalDeletedFlag.NORMAL); + filterList.add(filter); + } + OnlineFilterDto inlistFilter = new OnlineFilterDto(); + inlistFilter.setColumnName(dict.getKeyColumnName()); + inlistFilter.setColumnValueList(dictIdDataSet); + inlistFilter.setFilterType(FieldFilterType.IN_LIST_FILTER); + filterList.add(inlistFilter); + List> dictResultList = + onlineOperationMapper.getDictList(dict.getTableName(), selectFields, filterList, null); + if (CollUtil.isEmpty(dictResultList)) { + continue; + } + Map dictResultMap = new HashMap<>(dictResultList.size()); + for (Map dictResult : dictResultList) { + dictResultMap.put(dictResult.get("id"), dictResult.get("name")); + } + String dictKeyName = columnName + "__DictMap"; + for (Map result : resultList) { + Object dictIdData = result.get(columnName); + Object dictNameData = dictResultMap.get(dictIdData); + Map dictMap = new HashMap<>(2); + dictMap.put("id", dictIdData); + dictMap.put("name", dictNameData); + result.put(dictKeyName, dictMap); + } + } + } + } + + private List makeJoinInfoList( + OnlineTable masterTable, List relationList) { + if (CollUtil.isEmpty(relationList)) { + return null; + } + Map masterTableColumnMap = masterTable.getColumnMap(); + List joinInfoList = new LinkedList<>(); + for (OnlineDatasourceRelation relation : relationList) { + JoinTableInfo joinInfo = new JoinTableInfo(); + joinInfo.setLeftJoin(relation.getLeftJoin()); + joinInfo.setJoinTableName(relation.getSlaveTable().getTableName()); + // 根据配置动态拼接JOIN的关联条件,同时要考虑从表的逻辑删除过滤。 + OnlineColumn masterColumn = masterTableColumnMap.get(relation.getMasterColumnId()); + OnlineColumn slaveColumn = relation.getSlaveTable().getColumnMap().get(relation.getSlaveColumnId()); + StringBuilder conditionBuilder = new StringBuilder(64); + conditionBuilder + .append(masterTable.getTableName()) + .append(".") + .append(masterColumn.getColumnName()) + .append(" = ") + .append(relation.getSlaveTable().getTableName()) + .append(".") + .append(slaveColumn.getColumnName()); + if (relation.getSlaveTable().getLogicDeleteColumn() != null) { + conditionBuilder + .append(" AND ") + .append(relation.getSlaveTable().getTableName()) + .append(".") + .append(relation.getSlaveTable().getLogicDeleteColumn().getColumnName()) + .append(" = ") + .append(GlobalDeletedFlag.NORMAL); + } + joinInfo.setJoinCondition(conditionBuilder.toString()); + joinInfoList.add(joinInfo); + } + return joinInfoList; + } + + private String makeSelectFields(OnlineTable slaveTable, String relationVariableName) { + StringBuilder selectFieldBuider = new StringBuilder(512); + // 拼装主表的select fields字段。 + for (OnlineColumn column : slaveTable.getColumnMap().values()) { + OnlineColumn deletedColumn = slaveTable.getLogicDeleteColumn(); + if (deletedColumn != null && StrUtil.equals(column.getColumnName(), deletedColumn.getColumnName())) { + continue; + } + if (this.castToInteger(column)) { + selectFieldBuider + .append("CAST(") + .append(slaveTable.getTableName()) + .append(".") + .append(column.getColumnName()) + .append(" AS SIGNED) ") + .append(relationVariableName) + .append(OnlineConstant.RELATION_TABLE_COLUMN_SEPARATOR) + .append(column.getColumnName()) + .append(","); + } else { + selectFieldBuider + .append(slaveTable.getTableName()) + .append(".") + .append(column.getColumnName()) + .append(" ") + .append(relationVariableName) + .append(OnlineConstant.RELATION_TABLE_COLUMN_SEPARATOR) + .append(column.getColumnName()) + .append(","); + } + } + return selectFieldBuider.substring(0, selectFieldBuider.length() - 1); + } + + private String makeSelectFields(OnlineTable masterTable, List relationList) { + StringBuilder selectFieldBuider = new StringBuilder(512); + if (CollUtil.isNotEmpty(relationList)) { + for (OnlineDatasourceRelation relation : relationList) { + OnlineTable slaveTable = relation.getSlaveTable(); + Collection columnList = slaveTable.getColumnMap().values(); + for (OnlineColumn column : columnList) { + OnlineColumn deletedColumn = slaveTable.getLogicDeleteColumn(); + if (deletedColumn != null && StrUtil.equals(column.getColumnName(), deletedColumn.getColumnName())) { + continue; + } + if (this.castToInteger(column)) { + selectFieldBuider + .append("CAST(") + .append(slaveTable.getTableName()) + .append(".") + .append(column.getColumnName()) + .append(" AS SIGNED) ") + .append(relation.getVariableName()) + .append(OnlineConstant.RELATION_TABLE_COLUMN_SEPARATOR) + .append(column.getColumnName()) + .append(","); + } else { + selectFieldBuider + .append(slaveTable.getTableName()) + .append(".") + .append(column.getColumnName()) + .append(" ") + .append(relation.getVariableName()) + .append(OnlineConstant.RELATION_TABLE_COLUMN_SEPARATOR) + .append(column.getColumnName()) + .append(","); + } + } + } + } + // 拼装主表的select fields字段。 + for (OnlineColumn column : masterTable.getColumnMap().values()) { + OnlineColumn deletedColumn = masterTable.getLogicDeleteColumn(); + if (deletedColumn != null && StrUtil.equals(column.getColumnName(), deletedColumn.getColumnName())) { + continue; + } + if (this.castToInteger(column)) { + selectFieldBuider + .append("CAST(") + .append(masterTable.getTableName()) + .append(".") + .append(column.getColumnName()) + .append(" AS SIGNED) ") + .append(column.getColumnName()) + .append(","); + } else { + selectFieldBuider + .append(masterTable.getTableName()) + .append(".") + .append(column.getColumnName()) + .append(","); + } + } + return selectFieldBuider.substring(0, selectFieldBuider.length() - 1); + } + + private String makeDictSelectFields(OnlineDict onlineDict, boolean ignoreParentId) { + StringBuilder sb = new StringBuilder(128); + sb.append(onlineDict.getKeyColumnName()).append(" id, "); + sb.append(onlineDict.getValueColumnName()).append(" name"); + if (!ignoreParentId && onlineDict.getTreeFlag()) { + sb.append(", ").append(onlineDict.getParentKeyColumnName()).append(" parentId"); + } + return sb.toString(); + } + + private boolean castToInteger(OnlineColumn column) { + return "tinyint(1)".equals(column.getFullColumnType()); + } + + private String makeColumnNames(List columnDataList) { + StringBuilder sb = new StringBuilder(512); + for (ColumnData columnData : columnDataList) { + if (columnData.getColumn().getAutoIncrement()) { + continue; + } + sb.append(columnData.getColumn().getColumnName()).append(","); + } + return sb.substring(0, sb.length() - 1); + } + + private void makeupColumnValue(ColumnData columnData) { + if (columnData.getColumn().getAutoIncrement()) { + return; + } + if (columnData.getColumn().getPrimaryKey()) { + if (columnData.getColumnValue() == null) { + if ("Long".equals(columnData.getColumn().getObjectFieldType())) { + columnData.setColumnValue(idGenerator.nextLongId()); + } else { + columnData.setColumnValue(idGenerator.nextStringId()); + } + } + } else if (columnData.getColumn().getFieldKind() != null) { + switch (columnData.getColumn().getFieldKind()) { + case FieldKind.CREATE_TIME: + case FieldKind.UPDATE_TIME: + columnData.setColumnValue(new Date()); + break; + case FieldKind.CREATE_USER_ID: + case FieldKind.UPDATE_USER_ID: + columnData.setColumnValue(TokenData.takeFromRequest().getUserId()); + break; + case FieldKind.LOGIC_DELETE: + columnData.setColumnValue(GlobalDeletedFlag.NORMAL); + break; + default: + break; + } + } + } + + private List makeDefaultFilter(OnlineTable table, OnlineColumn column, String columnValue) { + List filterList = new LinkedList<>(); + OnlineFilterDto dataIdFilter = new OnlineFilterDto(); + dataIdFilter.setTableName(table.getTableName()); + dataIdFilter.setColumnName(column.getColumnName()); + dataIdFilter.setColumnValue(onlineOperationHelper.convertToTypeValue(column, columnValue)); + filterList.add(dataIdFilter); + if (table.getLogicDeleteColumn() != null) { + OnlineFilterDto filter = new OnlineFilterDto(); + filter.setTableName(table.getTableName()); + filter.setColumnName(table.getLogicDeleteColumn().getColumnName()); + filter.setColumnValue(GlobalDeletedFlag.NORMAL); + filterList.add(filter); + } + return filterList; + } + + private boolean doLogicDelete( + OnlineTable table, OnlineColumn filterColumn, String filterColumnValue, String dataPermFilter) { + List updateColumnList = new LinkedList<>(); + ColumnData logicDeleteColumnData = new ColumnData(); + logicDeleteColumnData.setColumn(table.getLogicDeleteColumn()); + logicDeleteColumnData.setColumnValue(GlobalDeletedFlag.DELETED); + updateColumnList.add(logicDeleteColumnData); + List whereColumnList = new LinkedList<>(); + ColumnData relationSlaveColumnData = new ColumnData(); + relationSlaveColumnData.setColumn(filterColumn); + relationSlaveColumnData.setColumnValue( + onlineOperationHelper.convertToTypeValue(filterColumn, filterColumnValue)); + whereColumnList.add(relationSlaveColumnData); + return onlineOperationMapper.update( + table.getTableName(), updateColumnList, whereColumnList, dataPermFilter) != 0; + } + + private String buildDataPermFilter(String tableName, String deptFilterColumnName, String userFilterColumnName) { + if (!dataFilterProperties.getEnabledDataPermFilter()) { + return null; + } + return processDataPerm(tableName, deptFilterColumnName, userFilterColumnName); + } + + private String buildDataPermFilter(OnlineTable table) { + if (!dataFilterProperties.getEnabledDataPermFilter()) { + return null; + } + String deptFilterColumnName = null; + String userFilterColumnName = null; + for (OnlineColumn column : table.getColumnMap().values()) { + if (column.getDeptFilter()) { + deptFilterColumnName = column.getColumnName(); + } + if (column.getUserFilter()) { + userFilterColumnName = column.getColumnName(); + } + } + return processDataPerm(table.getTableName(), deptFilterColumnName, userFilterColumnName); + } + + private String processDataPerm(String tableName, String deptFilterColumnName, String userFilterColumnName) { + TokenData tokenData = TokenData.takeFromRequest(); + if (Boolean.TRUE.equals(tokenData.getIsAdmin())) { + return null; + } + String dataPermSessionKey = + RedisKeyUtil.makeSessionDataPermIdKey(tokenData.getSessionId()); + RBucket bucket = redissonClient.getBucket(dataPermSessionKey); + String dataPermData = bucket.get(); + if (StrUtil.isBlank(dataPermData)) { + throw new NoDataPermException("No Related DataPerm found."); + } + Map dataPermMap = new HashMap<>(8); + for (Map.Entry entry : JSON.parseObject(dataPermData).entrySet()) { + dataPermMap.put(Integer.valueOf(entry.getKey()), entry.getValue().toString()); + } + if (MapUtil.isEmpty(dataPermMap)) { + throw new NoDataPermException("No Related DataPerm found."); + } + if (dataPermMap.containsKey(DataPermRuleType.TYPE_ALL)) { + return null; + } + return doProcessDataPerm(tableName, deptFilterColumnName, userFilterColumnName, dataPermMap); + } + + private String doProcessDataPerm( + String tableName, String deptFilterColumnName, String userFilterColumnName, Map dataPermMap) { + List criteriaList = new LinkedList<>(); + for (Map.Entry entry : dataPermMap.entrySet()) { + String filterClause = processDataPermRule( + tableName, deptFilterColumnName, userFilterColumnName, entry.getKey(), entry.getValue()); + if (StrUtil.isNotBlank(filterClause)) { + criteriaList.add(filterClause); + } + } + if (CollUtil.isEmpty(criteriaList)) { + return null; + } + StringBuilder filterBuilder = new StringBuilder(128); + filterBuilder.append("("); + filterBuilder.append(CollUtil.join(criteriaList, " OR ")); + filterBuilder.append(")"); + return filterBuilder.toString(); + } + + private String processDataPermRule( + String tableName, String deptFilterColumnName, String userFilterColumnName, Integer ruleType, String deptIds) { + TokenData tokenData = TokenData.takeFromRequest(); + StringBuilder filter = new StringBuilder(128); + if (ruleType == DataPermRuleType.TYPE_USER_ONLY) { + if (StrUtil.isNotBlank(userFilterColumnName)) { + if (dataFilterProperties.getAddTableNamePrefix()) { + filter.append(tableName).append("."); + } + filter.append(userFilterColumnName) + .append(" = ") + .append(tokenData.getUserId()); + } + } else { + if (StrUtil.isNotBlank(deptFilterColumnName)) { + if (ruleType == DataPermRuleType.TYPE_DEPT_ONLY) { + if (dataFilterProperties.getAddTableNamePrefix()) { + filter.append(tableName).append("."); + } + filter.append(deptFilterColumnName) + .append(" = ") + .append(tokenData.getDeptId()); + } else if (ruleType == DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT) { + filter.append(" EXISTS ") + .append("(SELECT 1 FROM ") + .append(dataFilterProperties.getDeptRelationTablePrefix()) + .append("sys_dept_relation WHERE ") + .append(dataFilterProperties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.parent_dept_id = ") + .append(tokenData.getDeptId()) + .append(" AND "); + if (dataFilterProperties.getAddTableNamePrefix()) { + filter.append(tableName).append("."); + } + filter.append(deptFilterColumnName) + .append(" = ") + .append(dataFilterProperties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.dept_id) "); + } else if (ruleType == DataPermRuleType.TYPE_MULTI_DEPT_AND_CHILD_DEPT) { + filter.append(" EXISTS ") + .append("(SELECT 1 FROM ") + .append(dataFilterProperties.getDeptRelationTablePrefix()) + .append("sys_dept_relation WHERE ") + .append(dataFilterProperties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.parent_dept_id IN (") + .append(deptIds) + .append(") AND "); + if (dataFilterProperties.getAddTableNamePrefix()) { + filter.append(tableName).append("."); + } + filter.append(deptFilterColumnName) + .append(" = ") + .append(dataFilterProperties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.dept_id) "); + } else if (ruleType == DataPermRuleType.TYPE_CUSTOM_DEPT_LIST) { + if (dataFilterProperties.getAddTableNamePrefix()) { + filter.append(tableName).append("."); + } + filter.append(deptFilterColumnName) + .append(" IN (") + .append(deptIds) + .append(") "); + } + } + } + return filter.toString(); + } + + @Data + static class VirtualColumnWhereClause { + private Long tableId; + private Long columnId; + private Integer operatorType; + private Object value; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlinePageServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlinePageServiceImpl.java new file mode 100644 index 00000000..1bf0f4c9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlinePageServiceImpl.java @@ -0,0 +1,233 @@ +package com.flow.demo.common.online.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.online.service.OnlineDatasourceService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.dao.OnlinePageDatasourceMapper; +import com.flow.demo.common.online.dao.OnlinePageMapper; +import com.flow.demo.common.online.model.OnlinePage; +import com.flow.demo.common.online.model.OnlinePageDatasource; +import com.flow.demo.common.online.model.constant.PageStatus; +import com.flow.demo.common.online.service.OnlineFormService; +import com.flow.demo.common.online.service.OnlinePageService; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +/** + * 在线表单页面数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlinePageService") +public class OnlinePageServiceImpl extends BaseService implements OnlinePageService { + + @Autowired + private OnlinePageMapper onlinePageMapper; + @Autowired + private OnlinePageDatasourceMapper onlinePageDatasourceMapper; + @Autowired + private OnlineFormService onlineFormService; + @Autowired + private OnlineDatasourceService onlineDatasourceService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlinePageMapper; + } + + /** + * 保存新增对象。 + * + * @param onlinePage 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public OnlinePage saveNew(OnlinePage onlinePage) { + onlinePage.setPageId(idGenerator.nextLongId()); + Date now = new Date(); + onlinePage.setUpdateTime(now); + onlinePage.setCreateTime(now); + onlinePage.setPublished(false); + MyModelUtil.setDefaultValue(onlinePage, "status", PageStatus.BASIC); + onlinePageMapper.insert(onlinePage); + return onlinePage; + } + + /** + * 更新数据对象。 + * + * @param onlinePage 更新的对象。 + * @param originalOnlinePage 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlinePage onlinePage, OnlinePage originalOnlinePage) { + onlinePage.setUpdateTime(new Date()); + onlinePage.setCreateTime(originalOnlinePage.getCreateTime()); + onlinePage.setPublished(originalOnlinePage.getPublished()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(onlinePage, onlinePage.getPageId()); + return onlinePageMapper.update(onlinePage, uw) == 1; + } + + /** + * 更新页面对象的发布状态。 + * + * @param pageId 页面对象Id。 + * @param published 新的状态。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void updatePublished(Long pageId, Boolean published) { + OnlinePage onlinePage = new OnlinePage(); + onlinePage.setPageId(pageId); + onlinePage.setPublished(published); + onlinePageMapper.updateById(onlinePage); + } + + /** + * 删除指定数据,及其包含的表单和数据源等。 + * + * @param pageId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long pageId) { + if (onlinePageMapper.deleteById(pageId) == 0) { + return false; + } + // 开始删除关联表单。 + onlineFormService.removeByPageId(pageId); + // 先获取出关联的表单和数据源。 + OnlinePageDatasource pageDatasourceFilter = new OnlinePageDatasource(); + pageDatasourceFilter.setPageId(pageId); + List pageDatasourceList = + onlinePageDatasourceMapper.selectList(new QueryWrapper<>(pageDatasourceFilter)); + if (CollUtil.isNotEmpty(pageDatasourceList)) { + for (OnlinePageDatasource pageDatasource : pageDatasourceList) { + onlineDatasourceService.remove(pageDatasource.getDatasourceId()); + } + } + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlinePageListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlinePageList(OnlinePage filter, String orderBy) { + return onlinePageMapper.getOnlinePageList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlinePageList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlinePageListWithRelation(OnlinePage filter, String orderBy) { + List resultList = onlinePageMapper.getOnlinePageList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 批量添加多对多关联关系。 + * + * @param onlinePageDatasourceList 多对多关联表对象集合。 + * @param pageId 主表Id。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void addOnlinePageDatasourceList(List onlinePageDatasourceList, Long pageId) { + for (OnlinePageDatasource onlinePageDatasource : onlinePageDatasourceList) { + onlinePageDatasource.setPageId(pageId); + onlinePageDatasourceMapper.insert(onlinePageDatasource); + } + } + + /** + * 获取中间表数据。 + * + * @param pageId 主表Id。 + * @param datasourceId 从表Id。 + * @return 中间表对象。 + */ + @Override + public OnlinePageDatasource getOnlinePageDatasource(Long pageId, Long datasourceId) { + OnlinePageDatasource filter = new OnlinePageDatasource(); + filter.setPageId(pageId); + filter.setDatasourceId(datasourceId); + return onlinePageDatasourceMapper.selectOne(new QueryWrapper<>(filter)); + } + + @Override + public List getOnlinePageDatasourceListByPageId(Long pageId) { + OnlinePageDatasource filter = new OnlinePageDatasource(); + filter.setPageId(pageId); + return onlinePageDatasourceMapper.selectList(new QueryWrapper<>(filter)); + } + + /** + * 根据数据源Id,返回使用该数据源的OnlinePage对象。 + * + * @param datasourceId 数据源Id。 + * @return 使用该数据源的页面列表。 + */ + @Override + public List getOnlinePageListByDatasourceId(Long datasourceId) { + return onlinePageMapper.getOnlinePageListByDatasourceId(datasourceId); + } + + /** + * 移除单条多对多关系。 + * + * @param pageId 主表Id。 + * @param datasourceId 从表Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean removeOnlinePageDatasource(Long pageId, Long datasourceId) { + OnlinePageDatasource filter = new OnlinePageDatasource(); + filter.setPageId(pageId); + filter.setDatasourceId(datasourceId); + return onlinePageDatasourceMapper.delete(new QueryWrapper<>(filter)) > 0; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineRuleServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineRuleServiceImpl.java new file mode 100644 index 00000000..da468e9c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineRuleServiceImpl.java @@ -0,0 +1,181 @@ +package com.flow.demo.common.online.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.constant.GlobalDeletedFlag; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.util.MyModelUtil; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.dao.OnlineColumnRuleMapper; +import com.flow.demo.common.online.dao.OnlineRuleMapper; +import com.flow.demo.common.online.model.OnlineColumnRule; +import com.flow.demo.common.online.model.OnlineRule; +import com.flow.demo.common.online.service.OnlineRuleService; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Set; + +/** + * 验证规则数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlineRuleService") +public class OnlineRuleServiceImpl extends BaseService implements OnlineRuleService { + + @Autowired + private OnlineRuleMapper onlineRuleMapper; + @Autowired + private OnlineColumnRuleMapper onlineColumnRuleMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlineRuleMapper; + } + + /** + * 保存新增对象。 + * + * @param onlineRule 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public OnlineRule saveNew(OnlineRule onlineRule) { + onlineRule.setRuleId(idGenerator.nextLongId()); + Date now = new Date(); + onlineRule.setUpdateTime(now); + onlineRule.setCreateTime(now); + onlineRule.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.setDefaultValue(onlineRule, "pattern", ""); + onlineRuleMapper.insert(onlineRule); + return onlineRule; + } + + /** + * 更新数据对象。 + * + * @param onlineRule 更新的对象。 + * @param originalOnlineRule 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlineRule onlineRule, OnlineRule originalOnlineRule) { + onlineRule.setUpdateTime(new Date()); + onlineRule.setCreateTime(originalOnlineRule.getCreateTime()); + UpdateWrapper uw = this.createUpdateQueryForNullValue(onlineRule, onlineRule.getRuleId()); + return onlineRuleMapper.update(onlineRule, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param ruleId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long ruleId) { + if (onlineRuleMapper.deleteById(ruleId) == 0) { + return false; + } + // 开始删除多对多父表的关联 + OnlineColumnRule onlineColumnRule = new OnlineColumnRule(); + onlineColumnRule.setRuleId(ruleId); + onlineColumnRuleMapper.delete(new QueryWrapper<>(onlineColumnRule)); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineRuleListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineRuleList(OnlineRule filter, String orderBy) { + return onlineRuleMapper.getOnlineRuleList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineRuleList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineRuleListWithRelation(OnlineRule filter, String orderBy) { + List resultList = onlineRuleMapper.getOnlineRuleList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param columnId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getNotInOnlineRuleListByColumnId(Long columnId, OnlineRule filter, String orderBy) { + List resultList = + onlineRuleMapper.getNotInOnlineRuleListByColumnId(columnId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + /** + * 在多对多关系中,当前Service的数据表为从表,返回与指定主表主键Id存在对多对关系的列表。 + * + * @param columnId 主表主键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineRuleListByColumnId(Long columnId, OnlineRule filter, String orderBy) { + List resultList = + onlineRuleMapper.getOnlineRuleListByColumnId(columnId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + /** + * 返回指定字段Id列表关联的字段规则对象列表。 + * + * @param columnIdSet 指定的字段Id列表。 + * @return 关联的字段规则对象列表。 + */ + @Override + public List getOnlineColumnRuleListByColumnIds(Set columnIdSet) { + return onlineColumnRuleMapper.getOnlineColumnRuleListByColumnIds(columnIdSet); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineTableServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineTableServiceImpl.java new file mode 100644 index 00000000..2de6c033 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineTableServiceImpl.java @@ -0,0 +1,236 @@ +package com.flow.demo.common.online.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.util.RedisKeyUtil; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.flow.demo.common.online.dao.OnlineTableMapper; +import com.flow.demo.common.online.model.OnlineColumn; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.model.constant.FieldKind; +import com.flow.demo.common.online.object.SqlTable; +import com.flow.demo.common.online.service.OnlineColumnService; +import com.flow.demo.common.online.service.OnlineTableService; +import com.github.pagehelper.Page; +import com.google.common.base.CaseFormat; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 数据表数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlineTableService") +public class OnlineTableServiceImpl extends BaseService implements OnlineTableService { + + @Autowired + private OnlineTableMapper onlineTableMapper; + @Autowired + private OnlineColumnService onlineColumnService; + @Autowired + private IdGeneratorWrapper idGenerator; + @Autowired + private RedissonClient redissonClient; + + /** + * 在线对象表的缺省缓存时间(小时)。 + */ + private static final int DEFAULT_CACHED_TABLE_HOURS = 168; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlineTableMapper; + } + + /** + * 基于数据库表保存新增对象。 + * + * @param sqlTable 数据库表对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public OnlineTable saveNewFromSqlTable(SqlTable sqlTable) { + OnlineTable onlineTable = new OnlineTable(); + onlineTable.setDblinkId(sqlTable.getDblinkId()); + onlineTable.setTableId(idGenerator.nextLongId()); + onlineTable.setTableName(sqlTable.getTableName()); + String modelName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, sqlTable.getTableName()); + onlineTable.setModelName(modelName); + Date now = new Date(); + onlineTable.setUpdateTime(now); + onlineTable.setCreateTime(now); + onlineTableMapper.insert(onlineTable); + List columnList = onlineColumnService.saveNewList(sqlTable.getColumnList(), onlineTable.getTableId()); + onlineTable.setColumnList(columnList); + return onlineTable; + } + + /** + * 更新数据对象。 + * + * @param onlineTable 更新的对象。 + * @param originalOnlineTable 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlineTable onlineTable, OnlineTable originalOnlineTable) { + this.evictTableCache(onlineTable.getTableId()); + onlineTable.setUpdateTime(new Date()); + onlineTable.setCreateTime(originalOnlineTable.getCreateTime()); + UpdateWrapper uw = this.createUpdateQueryForNullValue(onlineTable, onlineTable.getTableId()); + return onlineTableMapper.update(onlineTable, uw) == 1; + } + + /** + * 删除指定表及其关联的字段数据。 + * + * @param tableId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long tableId) { + if (onlineTableMapper.deleteById(tableId) == 0) { + return false; + } + this.evictTableCache(tableId); + onlineColumnService.removeByTableId(tableId); + return true; + } + + /** + * 删除指定数据表Id集合中的表,及其关联字段。 + * + * @param tableIdSet 待删除的数据表Id集合。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void removeByTableIdSet(Set tableIdSet) { + tableIdSet.forEach(this::evictTableCache); + onlineTableMapper.delete( + new QueryWrapper().lambda().in(OnlineTable::getTableId, tableIdSet)); + onlineColumnService.removeByTableIdSet(tableIdSet); + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineTableListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineTableList(OnlineTable filter, String orderBy) { + return onlineTableMapper.getOnlineTableList(filter, orderBy); + } + + /** + * 获取指定在线表Id集合的对象列表。 + * + * @param tableIdSet 主键Id集合。 + * @return 指定的数据表对象列表。 + */ + @Override + public List getOnlineTableList(Set tableIdSet) { + return onlineTableMapper.selectBatchIds(tableIdSet); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineTableList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineTableListWithRelation(OnlineTable filter, String orderBy) { + List resultList = onlineTableMapper.getOnlineTableList(filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 根据数据源Id,获取该数据源及其关联所引用的数据表列表。 + * + * @param datasourceId 指定的数据源Id。 + * @return 该数据源及其关联所引用的数据表列表。 + */ + @Override + public List getOnlineTableListByDatasourceId(Long datasourceId) { + return onlineTableMapper.getOnlineTableListByDatasourceId(datasourceId); + } + + /** + * 从缓存中获取指定的表数据及其关联字段列表。优先从缓存中读取,如果不存在则从数据库中读取,并同步到缓存。 + * 该接口方法仅仅用户在线表单的动态数据操作接口,而非在线表单的配置接口。 + * + * @param tableId 表主键Id。 + * @return 查询后的在线表对象。 + */ + @Override + public OnlineTable getOnlineTableFromCache(Long tableId) { + String redisKey = RedisKeyUtil.makeOnlineTableKey(tableId); + RBucket tableBucket = redissonClient.getBucket(redisKey); + if (tableBucket.isExists()) { + String tableInfo = tableBucket.get(); + return JSON.parseObject(tableInfo, OnlineTable.class); + } + OnlineTable table = this.getByIdWithRelation(tableId, MyRelationParam.full()); + if (table == null) { + return null; + } + for (OnlineColumn column : table.getColumnList()) { + if (column.getPrimaryKey()) { + table.setPrimaryKeyColumn(column); + continue; + } + if (ObjectUtil.equal(column.getFieldKind(), FieldKind.LOGIC_DELETE)) { + table.setLogicDeleteColumn(column); + } + } + Map columnMap = + table.getColumnList().stream().collect(Collectors.toMap(OnlineColumn::getColumnId, c -> c)); + table.setColumnMap(columnMap); + table.setColumnList(null); + tableBucket.set(JSON.toJSONString(table)); + tableBucket.expire(DEFAULT_CACHED_TABLE_HOURS, TimeUnit.HOURS); + return table; + } + + private void evictTableCache(Long tableId) { + String tableIdKey = RedisKeyUtil.makeOnlineTableKey(tableId); + redissonClient.getBucket(tableIdKey).delete(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineVirtualColumnServiceImpl.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineVirtualColumnServiceImpl.java new file mode 100644 index 00000000..9950641b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/service/impl/OnlineVirtualColumnServiceImpl.java @@ -0,0 +1,175 @@ +package com.flow.demo.common.online.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.flow.demo.common.core.base.dao.BaseDaoMapper; +import com.flow.demo.common.core.object.CallResult; +import com.flow.demo.common.core.object.MyRelationParam; +import com.flow.demo.common.core.base.service.BaseService; +import com.flow.demo.common.online.dao.OnlineVirtualColumnMapper; +import com.flow.demo.common.online.model.OnlineDatasource; +import com.flow.demo.common.online.model.OnlineVirtualColumn; +import com.flow.demo.common.online.model.constant.VirtualType; +import com.flow.demo.common.online.service.OnlineColumnService; +import com.flow.demo.common.online.service.OnlineDatasourceRelationService; +import com.flow.demo.common.online.service.OnlineDatasourceService; +import com.flow.demo.common.online.service.OnlineVirtualColumnService; +import com.flow.demo.common.sequence.wrapper.IdGeneratorWrapper; +import com.github.pagehelper.Page; +import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 虚拟字段数据操作服务类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Service("onlineVirtualColumnService") +public class OnlineVirtualColumnServiceImpl + extends BaseService implements OnlineVirtualColumnService { + + @Autowired + private OnlineVirtualColumnMapper onlineVirtualColumnMapper; + @Autowired + private OnlineDatasourceService onlineDatasourceService; + @Autowired + private OnlineDatasourceRelationService onlineDatasourceRelationService; + @Autowired + private OnlineColumnService onlineColumnService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return onlineVirtualColumnMapper; + } + + /** + * 保存新增对象。 + * + * @param virtualColumn 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public OnlineVirtualColumn saveNew(OnlineVirtualColumn virtualColumn) { + virtualColumn.setVirtualColumnId(idGenerator.nextLongId()); + if (virtualColumn.getVirtualType().equals(VirtualType.AGGREGATION)) { + OnlineDatasource datasource = onlineDatasourceService.getById(virtualColumn.getDatasourceId()); + virtualColumn.setTableId(datasource.getMasterTableId()); + } + onlineVirtualColumnMapper.insert(virtualColumn); + return virtualColumn; + } + + /** + * 更新数据对象。 + * + * @param virtualColumn 更新的对象。 + * @param originalVirtualColumn 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(OnlineVirtualColumn virtualColumn, OnlineVirtualColumn originalVirtualColumn) { + if (virtualColumn.getVirtualType().equals(VirtualType.AGGREGATION)) { + if (!virtualColumn.getDatasourceId().equals(originalVirtualColumn.getDatasourceId())) { + OnlineDatasource datasource = onlineDatasourceService.getById(virtualColumn.getDatasourceId()); + virtualColumn.setTableId(datasource.getMasterTableId()); + } + } + UpdateWrapper uw = + this.createUpdateQueryForNullValue(virtualColumn, virtualColumn.getVirtualColumnId()); + return onlineVirtualColumnMapper.update(virtualColumn, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param virtualColumnId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long virtualColumnId) { + return onlineVirtualColumnMapper.deleteById(virtualColumnId) == 1; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getOnlineVirtualColumnListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineVirtualColumnList(OnlineVirtualColumn filter, String orderBy) { + return onlineVirtualColumnMapper.getOnlineVirtualColumnList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getOnlineVirtualColumnList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getOnlineVirtualColumnListWithRelation(OnlineVirtualColumn filter, String orderBy) { + List resultList = onlineVirtualColumnMapper.getOnlineVirtualColumnList(filter, orderBy); + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 根据数据表的集合,查询关联的虚拟字段数据列表。 + * @param tableIdSet 在线数据表Id集合。 + * @return 关联的虚拟字段数据列表。 + */ + @Override + public List getOnlineVirtualColumnListByTableIds(Set tableIdSet) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(OnlineVirtualColumn::getTableId, tableIdSet); + return onlineVirtualColumnMapper.selectList(queryWrapper); + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param virtualColumn 最新数据对象。 + * @param originalVirtualColumn 原有数据对象。 + * @return 数据全部正确返回true,否则false。 + */ + @Override + public CallResult verifyRelatedData(OnlineVirtualColumn virtualColumn, OnlineVirtualColumn originalVirtualColumn) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + if (this.needToVerify(virtualColumn, originalVirtualColumn, OnlineVirtualColumn::getDatasourceId) + && !onlineDatasourceService.existId(virtualColumn.getDatasourceId())) { + return CallResult.error(String.format(errorMessageFormat, "数据源Id")); + } + if (this.needToVerify(virtualColumn, originalVirtualColumn, OnlineVirtualColumn::getRelationId) + && !onlineDatasourceRelationService.existId(virtualColumn.getRelationId())) { + return CallResult.error(String.format(errorMessageFormat, "数据源关联Id")); + } + if (this.needToVerify(virtualColumn, originalVirtualColumn, OnlineVirtualColumn::getAggregationColumnId) + && !onlineColumnService.existId(virtualColumn.getAggregationColumnId())) { + return CallResult.error(String.format(errorMessageFormat, "聚合字段Id")); + } + return CallResult.ok(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineConstant.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineConstant.java new file mode 100644 index 00000000..ec9c7329 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineConstant.java @@ -0,0 +1,15 @@ +package com.flow.demo.common.online.util; + +/** + * 在线表单使用的常量数据。。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class OnlineConstant { + + /** + * 数据源关联变量名和从表字段名之间的连接字符串。 + */ + public static final String RELATION_TABLE_COLUMN_SEPARATOR = "__"; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineDataSourceResolver.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineDataSourceResolver.java new file mode 100644 index 00000000..4b0bde89 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineDataSourceResolver.java @@ -0,0 +1,50 @@ +package com.flow.demo.common.online.util; + +import com.flow.demo.common.core.util.DataSourceResolver; +import com.flow.demo.common.online.model.OnlineDatasourceRelation; +import com.flow.demo.common.online.model.OnlineDblink; +import com.flow.demo.common.online.model.OnlineDict; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.service.OnlineDblinkService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.Serializable; + +/** + * 目前仅仅应用于在线表单服务对象的多数据源切换的动态解析。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Component +public class OnlineDataSourceResolver implements DataSourceResolver { + + @Autowired + private OnlineDblinkService onlineDblinkService; + + /** + * 动态解析方法。 + * 先判断第一个参数的类型,在根据具体的类型去获取dblinkId,并根据该值进行多数据源的切换。 + * + * @param arg 可选的入参。MyDataSourceResolver注解中的arg参数。 + * @param methodArgs 被织入方法的所有参数。 + * @return 返回用于多数据源切换的类型值。DataSourceResolveAspect 切面方法会根据该返回值和配置信息,进行多数据源切换。 + */ + @Override + public int resolve(String arg, Object[] methodArgs) { + Serializable id; + if (methodArgs[0] instanceof OnlineTable) { + id = ((OnlineTable) methodArgs[0]).getDblinkId(); + } else if (methodArgs[0] instanceof OnlineDict) { + id = ((OnlineDict) methodArgs[0]).getDblinkId(); + } else if (methodArgs[0] instanceof OnlineDatasourceRelation) { + id = ((OnlineDatasourceRelation) methodArgs[0]).getSlaveTable().getDblinkId(); + } else { + throw new IllegalArgumentException("动态表单操作服务方法,不支持类型 [" + + methodArgs[0].getClass().getSimpleName() + "] 作为第一个参数!"); + } + OnlineDblink dblink = onlineDblinkService.getById(id); + return dblink.getDblinkConfigConstant(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineOperationHelper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineOperationHelper.java new file mode 100644 index 00000000..680d12b9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineOperationHelper.java @@ -0,0 +1,388 @@ +package com.flow.demo.common.online.util; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.flow.demo.common.core.constant.ErrorCodeEnum; +import com.flow.demo.common.core.object.ResponseResult; +import com.flow.demo.common.core.upload.BaseUpDownloader; +import com.flow.demo.common.core.upload.UpDownloaderFactory; +import com.flow.demo.common.core.upload.UploadResponseInfo; +import com.flow.demo.common.core.upload.UploadStoreTypeEnum; +import com.flow.demo.common.online.config.OnlineProperties; +import com.flow.demo.common.online.model.OnlineColumn; +import com.flow.demo.common.online.model.OnlineDatasource; +import com.flow.demo.common.online.model.OnlineDatasourceRelation; +import com.flow.demo.common.online.model.OnlineTable; +import com.flow.demo.common.online.model.constant.FieldKind; +import com.flow.demo.common.online.model.constant.RelationType; +import com.flow.demo.common.online.object.ColumnData; +import com.flow.demo.common.online.service.OnlineDatasourceRelationService; +import com.flow.demo.common.online.service.OnlineDatasourceService; +import com.flow.demo.common.online.service.OnlineOperationService; +import com.flow.demo.common.online.service.OnlineTableService; +import com.flow.demo.common.redis.cache.SessionCacheHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 在线表单操作的通用帮助对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +@Component +public class OnlineOperationHelper { + + @Autowired + private OnlineDatasourceService onlineDatasourceService; + @Autowired + private OnlineDatasourceRelationService onlineDatasourceRelationService; + @Autowired + private OnlineTableService onlineTableService; + @Autowired + private OnlineOperationService onlineOperationService; + @Autowired + private OnlineProperties onlineProperties; + @Autowired + private UpDownloaderFactory upDownloaderFactory; + @Autowired + private SessionCacheHelper cacheHelper; + + /** + * 验证并获取数据源数据。 + * + * @param datasourceId 数据源Id。 + * @return 数据源详情数据。 + */ + public ResponseResult verifyAndGetDatasource(Long datasourceId) { + String errorMessage; + OnlineDatasource datasource = onlineDatasourceService.getById(datasourceId); + if (datasource == null) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + OnlineTable masterTable = onlineTableService.getOnlineTableFromCache(datasource.getMasterTableId()); + if (masterTable == null) { + errorMessage = "数据验证失败,数据源主表Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + datasource.setMasterTable(masterTable); + return ResponseResult.success(datasource); + } + + /** + * 验证并获取数据源的关联数据。 + * + * @param datasourceId 数据源Id。 + * @param relationId 数据源关联Id。 + * @return 数据源的关联详情数据。 + */ + public ResponseResult verifyAndGetRelation(Long datasourceId, Long relationId) { + String errorMessage; + OnlineDatasourceRelation relation = onlineDatasourceRelationService.getById(relationId); + if (relation == null || !relation.getDatasourceId().equals(datasourceId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + OnlineTable slaveTable = onlineTableService.getOnlineTableFromCache(relation.getSlaveTableId()); + if (slaveTable == null) { + errorMessage = "数据验证失败,数据源关联 [" + relation.getRelationName() + " ] 引用的从表不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + relation.setSlaveTable(slaveTable); + return ResponseResult.success(relation); + } + + /** + * 验证并获取数据源的一对多关联数据。 + * + * @param datasourceId 数据源Id。 + * @param relationId 数据源一对多关联Id。 + * @return 数据源的一对多关联详情数据。 + */ + public ResponseResult verifyAndGetOneToManyRelation(Long datasourceId, Long relationId) { + String errorMessage; + OnlineDatasourceRelation relation = onlineDatasourceRelationService.getById(relationId); + if (relation == null || !relation.getDatasourceId().equals(datasourceId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + if (!relation.getRelationType().equals(RelationType.ONE_TO_MANY)) { + errorMessage = "数据验证失败,数据源关联 [" + relation.getRelationName() + " ] 不是一对多关联,不能调用该接口!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + OnlineTable slaveTable = onlineTableService.getOnlineTableFromCache(relation.getSlaveTableId()); + if (slaveTable == null) { + errorMessage = "数据验证失败,数据源关联 [" + relation.getRelationName() + " ] 引用的从表不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + relation.setSlaveTable(slaveTable); + relation.setSlaveColumn(slaveTable.getColumnMap().get(relation.getSlaveColumnId())); + return ResponseResult.success(relation); + } + + /** + * 验证并获取数据源的指定类型关联数据。 + * + * @param datasourceId 数据源Id。 + * @param relationType 数据源关联类型。 + * @return 数据源指定关联类型的关联数据详情列表。 + */ + public ResponseResult> verifyAndGetRelationList( + Long datasourceId, Integer relationType) { + String errorMessage; + Set datasourceIdSet = CollUtil.newHashSet(datasourceId); + List relationList = onlineDatasourceRelationService + .getOnlineDatasourceRelationListByDatasourceIds(datasourceIdSet, relationType); + for (OnlineDatasourceRelation relation : relationList) { + OnlineTable slaveTable = onlineTableService.getOnlineTableFromCache(relation.getSlaveTableId()); + if (slaveTable == null) { + errorMessage = "数据验证失败,数据源关联 [" + relation.getRelationName() + "] 的从表Id不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + relation.setSlaveTable(slaveTable); + } + return ResponseResult.success(relationList); + } + + /** + * 构建在线表的数据记录。 + * + * @param table 在线数据表对象。 + * @param tableData 在线数据表数据。 + * @param forUpdate 是否为更新。 + * @param ignoreSetColumnId 忽略设置的字段Id。 + * @return 在线表的数据记录。 + */ + public ResponseResult> buildTableData( + OnlineTable table, JSONObject tableData, boolean forUpdate, Long ignoreSetColumnId) { + List columnDataList = new LinkedList<>(); + String errorMessage; + for (OnlineColumn column : table.getColumnMap().values()) { + // 判断一下是否为需要自动填入的字段,如果是,这里就都暂时给空值了,后续操作会自动填补。 + // 这里还能避免一次基于tableData的查询,能快几纳秒也是好的。 + if (this.isAutoSettingField(column) || ObjectUtil.equal(column.getColumnId(), ignoreSetColumnId)) { + columnDataList.add(new ColumnData(column, null)); + continue; + } + Object value = tableData.get(column.getColumnName()); + // 对于主键数据的处理。 + if (column.getPrimaryKey()) { + // 如果是更新则必须包含主键参数。 + if (forUpdate && value == null) { + errorMessage = "数据验证失败,数据表 [" + + table.getTableName() + "] 主键字段 [" + column.getColumnName() + "] 不能为空值!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } else { + if (value == null && !column.getNullable()) { + errorMessage = "数据验证失败,数据表 [" + + table.getTableName() + "] 字段 [" + column.getColumnName() + "] 不能为空值!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + columnDataList.add(new ColumnData(column, value)); + } + return ResponseResult.success(columnDataList); + } + + /** + * 构建多个一对多从表的数据列表。 + * + * @param datasourceId 数据源Id。 + * @param slaveData 多个一对多从表数据的JSON对象。 + * @return 构建后的多个一对多从表数据列表。 + */ + public ResponseResult>>> buildSlaveDataList( + Long datasourceId, JSONObject slaveData) { + Map>> relationDataMap = new HashMap<>(slaveData.size()); + for (String key : slaveData.keySet()) { + Long relationId = Long.parseLong(key); + ResponseResult relationResult = this.verifyAndGetRelation(datasourceId, relationId); + if (!relationResult.isSuccess()) { + return ResponseResult.errorFrom(relationResult); + } + OnlineDatasourceRelation relation = relationResult.getData(); + List> relationDataList = new LinkedList<>(); + relationDataMap.put(relation, relationDataList); + OnlineTable slaveTable = relation.getSlaveTable(); + JSONArray slaveObjectArray = slaveData.getJSONArray(key); + for (int i = 0; i < slaveObjectArray.size(); i++) { + JSONObject slaveObject = slaveObjectArray.getJSONObject(i); + ResponseResult> slaveColumnDataListResult = + this.buildTableData(slaveTable, slaveObject, false, relation.getSlaveColumnId()); + if (!slaveColumnDataListResult.isSuccess()) { + return ResponseResult.errorFrom(slaveColumnDataListResult); + } + relationDataList.add(slaveColumnDataListResult.getData()); + } + } + return ResponseResult.success(relationDataMap); + } + + /** + * 将字符型字段值转换为与参数字段类型匹配的字段值。 + * + * @param column 在线表单字段。 + * @param dataId 字符型字段值。 + * @return 转换后与参数字段类型匹配的字段值。 + */ + public Object convertToTypeValue(OnlineColumn column, String dataId) { + if ("Long".equals(column.getObjectFieldType())) { + return Long.valueOf(dataId); + } else if ("Integer".equals(column.getObjectFieldType())) { + return Integer.valueOf(dataId); + } + return dataId; + } + + /** + * 将字符型字段值集合转换为与参数字段类型匹配的字段值集合。 + * + * @param column 在线表单字段。 + * @param dataIdSet 字符型字段值集合。 + * @return 转换后与参数字段类型匹配的字段值集合。 + */ + public Set convertToTypeValue(OnlineColumn column, Set dataIdSet) { + if ("Long".equals(column.getObjectFieldType())) { + return dataIdSet.stream().map(Long::valueOf).collect(Collectors.toSet()); + } else if ("Integer".equals(column.getObjectFieldType())) { + return dataIdSet.stream().map(Integer::valueOf).collect(Collectors.toSet()); + } + return dataIdSet; + } + + /** + * 下载数据。 + * + * @param table 在线表对象。 + * @param dataId 在线表数据主键Id。 + * @param fieldName 数据表字段名。 + * @param filename 下载文件名。 + * @param asImage 是否为图片。 + * @param response HTTP 应对对象。 + */ + public void doDownload( + OnlineTable table, String dataId, String fieldName, String filename, Boolean asImage, HttpServletResponse response) { + // 使用try来捕获异常,是为了保证一旦出现异常可以返回500的错误状态,便于调试。 + // 否则有可能给前端返回的是200的错误码。 + try { + // 如果请求参数中没有包含主键Id,就判断该文件是否为当前session上传的。 + if (ObjectUtil.isEmpty(dataId)) { + if (!cacheHelper.existSessionUploadFile(filename)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN); + return; + } + } else { + Map dataMap = + onlineOperationService.getMasterData(table, null, null, dataId); + if (dataMap == null) { + ResponseResult.output(HttpServletResponse.SC_NOT_FOUND); + return; + } + String fieldJsonData = (String) dataMap.get(fieldName); + if (fieldJsonData == null) { + ResponseResult.output(HttpServletResponse.SC_BAD_REQUEST); + return; + } + if (!BaseUpDownloader.containFile(fieldJsonData, filename)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN); + return; + } + } + OnlineColumn downloadColumn = null; + for (OnlineColumn column : table.getColumnMap().values()) { + if (column.getColumnName().equals(fieldName)) { + if (asImage) { + if (ObjectUtil.notEqual(column.getFieldKind(), FieldKind.UPLOAD_IMAGE)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FIELD)); + return; + } + } else { + if (ObjectUtil.notEqual(column.getFieldKind(), FieldKind.UPLOAD)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FIELD)); + return; + } + } + downloadColumn = column; + break; + } + } + if (downloadColumn == null) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.INVALID_DATA_FIELD)); + return; + } + BaseUpDownloader upDownloader = upDownloaderFactory.get(UploadStoreTypeEnum.LOCAL_SYSTEM); + upDownloader.doDownload(onlineProperties.getUploadFileBaseDir(), + table.getModelName(), fieldName, filename, asImage, response); + } catch (Exception e) { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + log.error(e.getMessage(), e); + } + } + + /** + * 上传数据。 + * + * @param table 在线表对象。 + * @param fieldName 数据表字段名。 + * @param asImage 是否为图片。 + * @param uploadFile 上传的文件。 + */ + public void doUpload(OnlineTable table, String fieldName, Boolean asImage, MultipartFile uploadFile) throws Exception { + OnlineColumn uploadColumn = null; + for (OnlineColumn column : table.getColumnMap().values()) { + if (column.getColumnName().equals(fieldName)) { + if (asImage) { + if (ObjectUtil.notEqual(column.getFieldKind(), FieldKind.UPLOAD_IMAGE)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FIELD)); + return; + } + } else { + if (ObjectUtil.notEqual(column.getFieldKind(), FieldKind.UPLOAD)) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FIELD)); + return; + } + } + uploadColumn = column; + break; + } + } + if (uploadColumn == null) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.INVALID_DATA_FIELD)); + return; + } + BaseUpDownloader upDownloader = upDownloaderFactory.get(UploadStoreTypeEnum.LOCAL_SYSTEM); + UploadResponseInfo responseInfo = upDownloader.doUpload(null, + onlineProperties.getUploadFileBaseDir(), table.getModelName(), fieldName, asImage, uploadFile); + if (responseInfo.getUploadFailed()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.UPLOAD_FAILED, responseInfo.getErrorMessage())); + return; + } + // 动态表单的下载url和普通表单有所不同,由前端负责动态拼接。 + responseInfo.setDownloadUri(null); + cacheHelper.putSessionUploadFile(responseInfo.getFilename()); + ResponseResult.output(ResponseResult.success(responseInfo)); + } + + private boolean isAutoSettingField(OnlineColumn column) { + return (ObjectUtil.equal(column.getFieldKind(), FieldKind.CREATE_TIME) + || ObjectUtil.equal(column.getFieldKind(), FieldKind.CREATE_USER_ID) + || ObjectUtil.equal(column.getFieldKind(), FieldKind.UPDATE_TIME) + || ObjectUtil.equal(column.getFieldKind(), FieldKind.UPDATE_USER_ID) + || ObjectUtil.equal(column.getFieldKind(), FieldKind.LOGIC_DELETE)); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineUtil.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineUtil.java new file mode 100644 index 00000000..9254027f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/util/OnlineUtil.java @@ -0,0 +1,30 @@ +package com.flow.demo.common.online.util; + +/** + * 在线表单的工具类。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class OnlineUtil { + + /** + * 根据输入参数,拼接在线表单操作的查看权限字。 + * + * @param datasourceVariableName 数据源变量名。 + * @return 拼接后的在线表单操作的查看权限字。 + */ + public static String makeViewPermCode(String datasourceVariableName) { + return "online:" + datasourceVariableName + ":view"; + } + + /** + * 根据输入参数,拼接在线表单操作的编辑权限字。 + * + * @param datasourceVariableName 数据源变量名。 + * @return 拼接后的在线表单操作的编辑权限字。 + */ + public static String makeEditPermCode(String datasourceVariableName) { + return "online:" + datasourceVariableName + ":edit"; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineColumnRuleVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineColumnRuleVo.java new file mode 100644 index 00000000..0a8c70c0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineColumnRuleVo.java @@ -0,0 +1,28 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +/** + * 在线表单数据表字段规则和字段多对多关联VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineColumnRuleVo { + + /** + * 字段Id。 + */ + private Long columnId; + + /** + * 规则Id。 + */ + private Long ruleId; + + /** + * 规则属性数据。 + */ + private String propDataJson; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineColumnVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineColumnVo.java new file mode 100644 index 00000000..ea24b4ca --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineColumnVo.java @@ -0,0 +1,136 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单数据表字段规则和字段多对多关联VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineColumnVo { + + /** + * 主键Id。 + */ + private Long columnId; + + /** + * 字段名。 + */ + private String columnName; + + /** + * 数据表Id。 + */ + private Long tableId; + + /** + * 数据表中的字段类型。 + */ + private String columnType; + + /** + * 数据表中的完整字段类型(包括了精度和刻度)。 + */ + private String fullColumnType; + + /** + * 是否为主键。 + */ + private Boolean primaryKey; + + /** + * 是否是自增主键(0: 不是 1: 是)。 + */ + private Boolean autoIncrement; + + /** + * 是否可以为空 (0: 不可以为空 1: 可以为空)。 + */ + private Boolean nullable; + + /** + * 缺省值。 + */ + private String columnDefault; + + /** + * 字段在数据表中的显示位置。 + */ + private Integer columnShowOrder; + + /** + * 数据表中的字段注释。 + */ + private String columnComment; + + /** + * 对象映射字段名称。 + */ + private String objectFieldName; + + /** + * 对象映射字段类型。 + */ + private String objectFieldType; + + /** + * 过滤类型。 + */ + private Integer filterType; + + /** + * 是否是主键的父Id。 + */ + private Boolean parentKey; + + /** + * 是否部门过滤字段。 + */ + private Boolean deptFilter; + + /** + * 是否用户过滤字段。 + */ + private Boolean userFilter; + + /** + * 字段类别。 + */ + private Integer fieldKind; + + /** + * 包含的文件文件数量,0表示无限制。 + */ + private Integer maxFileCount; + + /** + * 字典Id。 + */ + private Long dictId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * fieldKind 常量字典关联数据。 + */ + private Map fieldKindDictMap; + + /** + * dictId 的一对一关联。 + */ + private Map dictInfo; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDatasourceRelationVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDatasourceRelationVo.java new file mode 100644 index 00000000..9962d235 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDatasourceRelationVo.java @@ -0,0 +1,111 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单的数据源关联VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineDatasourceRelationVo { + + /** + * 主键Id。 + */ + private Long relationId; + + /** + * 关联名称。 + */ + private String relationName; + + /** + * 变量名。 + */ + private String variableName; + + /** + * 主数据源Id。 + */ + private Long datasourceId; + + /** + * 关联类型。 + */ + private Integer relationType; + + /** + * 主表关联字段Id。 + */ + private Long masterColumnId; + + /** + * 从表Id。 + */ + private Long slaveTableId; + + /** + * 从表关联字段Id。 + */ + private Long slaveColumnId; + + /** + * 删除主表的时候是否级联删除一对一和一对多的从表数据,多对多只是删除关联,不受到这个标记的影响。。 + */ + private Boolean cascadeDelete; + + /** + * 是否左连接。 + */ + private Boolean leftJoin; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * masterColumnId 的一对一关联数据对象,数据对应类型为OnlineColumnVo。 + */ + private Map masterColumn; + + /** + * slaveTableId 的一对一关联数据对象,数据对应类型为OnlineTableVo。 + */ + private Map slaveTable; + + /** + * slaveColumnId 的一对一关联数据对象,数据对应类型为OnlineColumnVo。 + */ + private Map slaveColumn; + + /** + * masterColumnId 字典关联数据。 + */ + private Map masterColumnIdDictMap; + + /** + * slaveTableId 字典关联数据。 + */ + private Map slaveTableIdDictMap; + + /** + * slaveColumnId 字典关联数据。 + */ + private Map slaveColumnIdDictMap; + + /** + * relationType 常量字典关联数据。 + */ + private Map relationTypeDictMap; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDatasourceVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDatasourceVo.java new file mode 100644 index 00000000..264b0488 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDatasourceVo.java @@ -0,0 +1,67 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 在线表单的数据源VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineDatasourceVo { + + /** + * 主键Id。 + */ + private Long datasourceId; + + /** + * 数据源名称。 + */ + private String datasourceName; + + /** + * 数据源变量名,会成为数据访问url的一部分。 + */ + private String variableName; + + /** + * 数据库链接Id。 + */ + private Long dblinkId; + + /** + * 主表Id。 + */ + private Long masterTableId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * datasourceId 的多对多关联表数据对象,数据对应类型为OnlinePageDatasourceVo。 + */ + private Map onlinePageDatasource; + + /** + * masterTableId 字典关联数据。 + */ + private Map masterTableIdDictMap; + + /** + * 当前数据源及其关联,引用的数据表对象列表。 + */ + private List tableList; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDblinkVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDblinkVo.java new file mode 100644 index 00000000..644b78a1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDblinkVo.java @@ -0,0 +1,45 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * 在线表单数据表所在数据库链接VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineDblinkVo { + + /** + * 主键Id。 + */ + private Long dblinkId; + + /** + * 链接中文名称。 + */ + private String dblinkName; + + /** + * 链接英文名称。 + */ + private String variableName; + + /** + * 链接描述。 + */ + private String dblinkDesc; + + /** + * 数据源配置常量。 + */ + private Integer dblinkConfigConstant; + + /** + * 创建时间。 + */ + private Date createTime; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDictVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDictVo.java new file mode 100644 index 00000000..b4d4da4d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineDictVo.java @@ -0,0 +1,116 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单关联的字典VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineDictVo { + + /** + * 主键Id。 + */ + private Long dictId; + + /** + * 字典名称。 + */ + private String dictName; + + /** + * 字典类型。 + */ + private Integer dictType; + + /** + * 数据库链接Id。 + */ + private Long dblinkId; + + /** + * 字典表名称。 + */ + private String tableName; + + /** + * 字典表键字段名称。 + */ + private String keyColumnName; + + /** + * 字典表父键字段名称。 + */ + private String parentKeyColumnName; + + /** + * 字典值字段名称。 + */ + private String valueColumnName; + + /** + * 逻辑删除字段。 + */ + private String deletedColumnName; + + /** + * 用户过滤滤字段名称。 + */ + private String userFilterColumnName; + + /** + * 部门过滤字段名称。 + */ + private String deptFilterColumnName; + + /** + * 租户过滤字段名称。 + */ + private String tenantFilterColumnName; + + /** + * 是否树形标记。 + */ + private Boolean treeFlag; + + /** + * 获取字典数据的url。 + */ + private String dictListUrl; + + /** + * 根据主键id批量获取字典数据的url。 + */ + private String dictIdsUrl; + + /** + * 字典的JSON数据。 + */ + private String dictDataJson; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * dictType 常量字典关联数据。 + */ + private Map dictTypeDictMap; + + /** + * 数据库链接Id字典关联数据。 + */ + private Map dblinkIdDictMap; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineFormVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineFormVo.java new file mode 100644 index 00000000..e3193e56 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineFormVo.java @@ -0,0 +1,92 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 在线表单VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineFormVo { + + /** + * 主键Id。 + */ + private Long formId; + + /** + * 页面Id。 + */ + private Long pageId; + + /** + * 表单编码。 + */ + private String formCode; + + /** + * 表单名称。 + */ + private String formName; + + /** + * 表单类型。 + */ + private Integer formType; + + /** + * 表单类别。 + */ + private Integer formKind; + + /** + * 表单主表Id。 + */ + private Long masterTableId; + + /** + * 表单组件JSON。 + */ + private String widgetJson; + + /** + * 表单参数JSON。 + */ + private String paramsJson; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * masterTableId 的一对一关联数据对象,数据对应类型为OnlineTableVo。 + */ + private Map onlineTable; + + /** + * masterTableId 字典关联数据。 + */ + private Map masterTableIdDictMap; + + /** + * formType 常量字典关联数据。 + */ + private Map formTypeDictMap; + + /** + * 当前表单关联的数据源Id集合。 + */ + private List datasourceIdList; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlinePageDatasourceVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlinePageDatasourceVo.java new file mode 100644 index 00000000..669ff6de --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlinePageDatasourceVo.java @@ -0,0 +1,28 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +/** + * 在线表单页面和数据源多对多关联VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlinePageDatasourceVo { + + /** + * 主键Id。 + */ + private Long id; + + /** + * 页面主键Id。 + */ + private Long pageId; + + /** + * 数据源主键Id。 + */ + private Long datasourceId; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlinePageVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlinePageVo.java new file mode 100644 index 00000000..efec4989 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlinePageVo.java @@ -0,0 +1,66 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单所在页面VO对象。这里我们可以把页面理解为表单的容器。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlinePageVo { + + /** + * 主键Id。 + */ + private Long pageId; + + /** + * 页面编码。 + */ + private String pageCode; + + /** + * 页面名称。 + */ + private String pageName; + + /** + * 页面类型。 + */ + private Integer pageType; + + /** + * 页面编辑状态。 + */ + private Integer status; + + /** + * 是否发布。 + */ + private Boolean published; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * pageType 常量字典关联数据。 + */ + private Map pageTypeDictMap; + + /** + * status 常量字典关联数据。 + */ + private Map statusDictMap; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineRuleVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineRuleVo.java new file mode 100644 index 00000000..b3739a3b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineRuleVo.java @@ -0,0 +1,61 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * 在线表单数据表字段验证规则VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineRuleVo { + + /** + * 主键Id。 + */ + private Long ruleId; + + /** + * 规则名称。 + */ + private String ruleName; + + /** + * 规则类型。 + */ + private Integer ruleType; + + /** + * 内置规则标记。 + */ + private Boolean builtin; + + /** + * 自定义规则的正则表达式。 + */ + private String pattern; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 创建时间。 + */ + private Date createTime; + + /** + * ruleId 的多对多关联表数据对象,数据对应类型为OnlineColumnRuleVo。 + */ + private Map onlineColumnRule; + + /** + * ruleType 常量字典关联数据。 + */ + private Map ruleTypeDictMap; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineTableVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineTableVo.java new file mode 100644 index 00000000..9ef43d88 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineTableVo.java @@ -0,0 +1,45 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * 在线表单的数据表VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineTableVo { + + /** + * 主键Id。 + */ + private Long tableId; + + /** + * 表名称。 + */ + private String tableName; + + /** + * 实体名称。 + */ + private String modelName; + + /** + * 数据库链接Id。 + */ + private Long dblinkId; + + /** + * 更新时间。 + */ + private Date updateTime; + + /** + * 创建时间。 + */ + private Date createTime; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineVirtualColumnVo.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineVirtualColumnVo.java new file mode 100644 index 00000000..eb4c3d05 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/java/com/flow/demo/common/online/vo/OnlineVirtualColumnVo.java @@ -0,0 +1,73 @@ +package com.flow.demo.common.online.vo; + +import lombok.Data; + +/** + * 在线数据表虚拟字段VO对象。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +public class OnlineVirtualColumnVo { + + /** + * 主键Id。 + */ + private Long virtualColumnId; + + /** + * 所在表Id。 + */ + private Long tableId; + + /** + * 字段名称。 + */ + private String objectFieldName; + + /** + * 属性类型。 + */ + private String objectFieldType; + + /** + * 字段提示名。 + */ + private String columnPrompt; + + /** + * 虚拟字段类型(0: 聚合)。 + */ + private Integer virtualType; + + /** + * 关联数据源Id。 + */ + private Long datasourceId; + + /** + * 关联Id。 + */ + private Long relationId; + + /** + * 聚合字段所在关联表Id。 + */ + private Long aggregationTableId; + + /** + * 关联表聚合字段Id。 + */ + private Long aggregationColumnId; + + /** + * 聚合类型(0: count 1: sum 2: avg 3: max 4:min)。 + */ + private Integer aggregationType; + + /** + * 存储过滤条件的json。 + */ + private String whereClauseJson; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/resources/META-INF/spring.factories b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..bc04bebf --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-online/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.flow.demo.common.online.config.OnlineAutoConfig \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/pom.xml new file mode 100644 index 00000000..68795430 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/pom.xml @@ -0,0 +1,29 @@ + + + + common + com.flow.demo + 1.0.0 + + 4.0.0 + + common-redis + 1.0.0 + common-redis + jar + + + + com.flow.demo + common-core + 1.0.0 + + + org.redisson + redisson + ${redisson.version} + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/RedisDictionaryCache.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/RedisDictionaryCache.java new file mode 100644 index 00000000..55d61179 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/RedisDictionaryCache.java @@ -0,0 +1,412 @@ +package com.flow.demo.common.redis.cache; + +import com.alibaba.fastjson.JSON; +import com.flow.demo.common.core.cache.DictionaryCache; +import com.flow.demo.common.core.constant.ApplicationConstant; +import com.flow.demo.common.core.exception.RedisCacheAccessException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RMap; +import org.redisson.api.RedissonClient; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 字典数据Redis缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class RedisDictionaryCache implements DictionaryCache { + + /** + * redisson客户端。 + */ + protected final RedissonClient redissonClient; + /** + * 数据存储对象。 + */ + protected final RMap dataMap; + /** + * 字典值对象类型。 + */ + protected final Class valueClazz; + /** + * 由于大部分场景是读取操作,所以使用读写锁提高并发的伸缩性。 + */ + protected final ReadWriteLock lock; + /** + * 获取字典主键数据的函数对象。 + */ + protected final Function idGetter; + /** + * 超时时长。单位毫秒。 + */ + protected static final long TIMEOUT = 2000L; + + /** + * 当前对象的构造器函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的字典内存缓存对象。 + */ + public static RedisDictionaryCache create( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + return new RedisDictionaryCache<>(redissonClient, dictionaryName, valueClazz, idGetter); + } + + /** + * 构造函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。确保全局唯一。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + */ + public RedisDictionaryCache( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter) { + this.redissonClient = redissonClient; + this.dataMap = redissonClient.getMap(dictionaryName + ApplicationConstant.DICT_CACHE_NAME_SUFFIX); + this.lock = new ReentrantReadWriteLock(); + this.valueClazz = valueClazz; + this.idGetter = idGetter; + } + + /** + * 按照数据插入的顺序返回全部字典对象的列表。 + * + * @return 全部字段数据列表。 + */ + @Override + public List getAll() { + Collection dataList; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList = dataMap.readAllValues(); + } finally { + // 如果上面的操作时间超过redisson.lockWatchdogTimeout的时长, + // redis会将与该锁关联的键删除,此后调用unlock的时候,就会抛出运行时异常。 + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::getAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (CollectionUtils.isEmpty(dataList)) { + return new LinkedList<>(); + } + return dataList.stream() + .map(data -> JSON.parseObject(data, valueClazz)) + .collect(Collectors.toCollection(LinkedList::new)); + } + + /** + * 获取缓存中与键列表对应的对象列表。 + * + * @param keys 主键集合。 + * @return 对象列表。 + */ + @Override + public List getInList(Set keys) { + if (CollectionUtils.isEmpty(keys)) { + return new LinkedList<>(); + } + Collection dataList; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList = dataMap.getAll(keys).values(); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (dataList == null) { + return new LinkedList<>(); + } + return dataList.stream() + .map(data -> JSON.parseObject(data, valueClazz)) + .collect(Collectors.toCollection(LinkedList::new)); + } + + /** + * 从缓存中获取指定的数据。 + * + * @param id 数据的key。 + * @return 获取到的数据,如果没有返回null。 + */ + @Override + public V get(K id) { + if (id == null) { + return null; + } + String data; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + data = dataMap.get(id); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::get] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (data == null) { + return null; + } + return JSON.parseObject(data, valueClazz); + } + + /** + * 获取缓存中数据条目的数量。 + * + * @return 返回缓存的数据数量。 + */ + @Override + public int getCount() { + return dataMap.size(); + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + Map map = dataList.stream() + .collect(Collectors.toMap(idGetter, JSON::toJSONString)); + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.putAll(map, 1000); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::putAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param data 字典数据对象。 + */ + @Override + public void put(K id, V data) { + if (id == null || data == null) { + return; + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.fastPut(id, JSON.toJSONString(data)); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::put] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + Map map = null; + if (CollectionUtils.isNotEmpty(dataList)) { + map = dataList.stream().collect(Collectors.toMap(idGetter, JSON::toJSONString)); + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + // 如果不强制刷新,需要先判断缓存中是否存在数据。 + if (!force && this.getCount() > 0) { + return; + } + dataMap.clear(); + if (map != null) { + dataMap.putAll(map, 1000); + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::reload] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + if (id == null) { + return null; + } + String data; + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + data = dataMap.remove(id); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::invalidate] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (data == null) { + return null; + } + return JSON.parseObject(data, valueClazz); + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @SuppressWarnings("unchecked") + @Override + public void invalidateSet(Set keys) { + if (CollectionUtils.isEmpty(keys)) { + return; + } + Object[] keyArray = keys.toArray(new Object[]{}); + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.fastRemove((K[]) keyArray); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::invalidateSet] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::invalidateAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/RedisTreeDictionaryCache.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/RedisTreeDictionaryCache.java new file mode 100644 index 00000000..8dc48708 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/RedisTreeDictionaryCache.java @@ -0,0 +1,354 @@ +package com.flow.demo.common.redis.cache; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import com.flow.demo.common.core.constant.ApplicationConstant; +import com.flow.demo.common.core.exception.RedisCacheAccessException; +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.Multimap; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RListMultimap; +import org.redisson.api.RedissonClient; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 树形字典数据Redis缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2021-06-06 + */ +@Slf4j +public class RedisTreeDictionaryCache extends RedisDictionaryCache { + + /** + * 树形数据存储对象。 + */ + private final RListMultimap allTreeMap; + /** + * 获取字典父主键数据的函数对象。 + */ + protected final Function parentIdGetter; + + /** + * 当前对象的构造器函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的树形字典内存缓存对象。 + */ + public static RedisTreeDictionaryCache create( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter, + Function parentIdGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + if (parentIdGetter == null) { + throw new IllegalArgumentException("ParentIdGetter can't be NULL."); + } + return new RedisTreeDictionaryCache<>( + redissonClient, dictionaryName, valueClazz, idGetter, parentIdGetter); + } + + /** + * 构造函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + */ + public RedisTreeDictionaryCache( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter, + Function parentIdGetter) { + super(redissonClient, dictionaryName, valueClazz, idGetter); + this.allTreeMap = redissonClient.getListMultimap( + dictionaryName + ApplicationConstant.TREE_DICT_CACHE_NAME_SUFFIX); + this.parentIdGetter = parentIdGetter; + } + + /** + * 获取该父主键的子数据列表。 + * + * @param parentId 父主键Id。如果parentId为null,则返回所有一级节点数据。 + * @return 子数据列表。 + */ + public List getListByParentId(K parentId) { + List dataList; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList = allTreeMap.get(parentId); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::getListByParentId] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (CollectionUtils.isEmpty(dataList)) { + return new LinkedList<>(); + } + List resultList = new LinkedList<>(); + dataList.forEach(data -> resultList.add(JSON.parseObject(data, valueClazz))); + return resultList; + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + // 锁外执行数据结构组装,降低锁的粒度,提高并发性。 + Map map = dataList.stream() + .collect(Collectors.toMap(idGetter, JSON::toJSONString)); + Multimap treeMap = LinkedListMultimap.create(); + for (V data : dataList) { + treeMap.put(parentIdGetter.apply(data), JSON.toJSONString(data)); + } + Set>> entries = treeMap.asMap().entrySet(); + String exceptionMessage; + try { + if (this.lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.putAll(map, 1000); + for (Map.Entry> entry : entries) { + allTreeMap.removeAll(entry.getKey()); + allTreeMap.putAll(entry.getKey(), entry.getValue()); + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::putAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param data 字典数据对象。 + */ + @Override + public void put(K id, V data) { + if (id == null || data == null) { + return; + } + String stringData = JSON.toJSONString(data); + K parentId = parentIdGetter.apply(data); + String exceptionMessage; + try { + if (this.lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + String oldData = dataMap.put(id, stringData); + if (oldData != null) { + allTreeMap.remove(parentId, oldData); + } + allTreeMap.put(parentId, stringData); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::put] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 行为等同于接口中的描述。这里之所以重写,是因为不确定redisson的读写锁, + * 是否为可重入锁。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + // 锁外执行数据结构组装,降低锁的粒度,提高并发性。 + Map map = null; + Set>> entries = null; + if (CollectionUtils.isNotEmpty(dataList)) { + map = dataList.stream().collect(Collectors.toMap(idGetter, JSON::toJSONString)); + Multimap treeMap = LinkedListMultimap.create(); + for (V data : dataList) { + treeMap.put(parentIdGetter.apply(data), JSON.toJSONString(data)); + } + entries = treeMap.asMap().entrySet(); + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + // 如果不强制刷新,需要先判断缓存中是否存在数据。 + if (!force && this.getCount() > 0) { + return; + } + dataMap.clear(); + allTreeMap.clear(); + if (map != null) { + dataMap.putAll(map, 1000); + for (Map.Entry> entry : entries) { + allTreeMap.removeAll(entry.getKey()); + allTreeMap.putAll(entry.getKey(), entry.getValue()); + } + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::reload] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + if (id == null) { + return null; + } + V data = null; + String exceptionMessage; + try { + if (this.lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + String stringData = dataMap.remove(id); + if (stringData != null) { + data = JSON.parseObject(stringData, valueClazz); + K parentId = parentIdGetter.apply(data); + allTreeMap.remove(parentId, stringData); + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::invalidate] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + return data; + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @Override + public void invalidateSet(Set keys) { + if (CollectionUtils.isEmpty(keys)) { + return; + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + keys.forEach(id -> { + if (id != null) { + String stringData = dataMap.remove(id); + if (stringData != null) { + K parentId = parentIdGetter.apply(JSON.parseObject(stringData, valueClazz)); + allTreeMap.remove(parentId, stringData); + } + } + }); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::invalidateSet] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + allTreeMap.clear(); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::invalidateAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/RedissonCacheConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/RedissonCacheConfig.java new file mode 100644 index 00000000..8a49fc05 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/RedissonCacheConfig.java @@ -0,0 +1,67 @@ +package com.flow.demo.common.redis.cache; + +import com.google.common.collect.Maps; +import org.redisson.api.RedissonClient; +import org.redisson.spring.cache.CacheConfig; +import org.redisson.spring.cache.RedissonSpringCacheManager; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; + +/** + * 使用Redisson作为Redis的分布式缓存库。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +@EnableCaching +public class RedissonCacheConfig { + + private static final int DEFAULT_TTL = 3600000; + + /** + * 定义cache名称、超时时长(毫秒)。 + */ + public enum CacheEnum { + /** + * session下上传文件名的缓存(时间是24小时)。 + */ + UPLOAD_FILENAME_CACHE(86400000), + /** + * 缺省全局缓存(时间是24小时)。 + */ + GLOBAL_CACHE(86400000); + + /** + * 缓存的时长(单位:毫秒) + */ + private int ttl = DEFAULT_TTL; + + CacheEnum() { + } + + CacheEnum(int ttl) { + this.ttl = ttl; + } + + public int getTtl() { + return ttl; + } + } + + /** + * 初始化缓存配置。 + */ + @Bean + CacheManager cacheManager(RedissonClient redissonClient) { + Map config = Maps.newHashMap(); + for (CacheEnum c : CacheEnum.values()) { + config.put(c.name(), new CacheConfig(c.getTtl(), 0)); + } + return new RedissonSpringCacheManager(redissonClient, config); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/SessionCacheHelper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/SessionCacheHelper.java new file mode 100644 index 00000000..bc0f0ff3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/cache/SessionCacheHelper.java @@ -0,0 +1,74 @@ +package com.flow.demo.common.redis.cache; + +import com.flow.demo.common.core.object.TokenData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.stereotype.Component; + +import java.util.HashSet; +import java.util.Set; + +/** + * Session数据缓存辅助类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@SuppressWarnings("unchecked") +@Component +public class SessionCacheHelper { + + @Autowired + private CacheManager cacheManager; + + /** + * 缓存当前session内,上传过的文件名。 + * + * @param filename 通常是本地存储的文件名,而不是上传时的原始文件名。 + */ + public void putSessionUploadFile(String filename) { + if (filename != null) { + Set sessionUploadFileSet = null; + Cache cache = cacheManager.getCache(RedissonCacheConfig.CacheEnum.UPLOAD_FILENAME_CACHE.name()); + Cache.ValueWrapper valueWrapper = cache.get(TokenData.takeFromRequest().getSessionId()); + if (valueWrapper != null) { + sessionUploadFileSet = (Set) valueWrapper.get(); + } + if (sessionUploadFileSet == null) { + sessionUploadFileSet = new HashSet<>(); + } + sessionUploadFileSet.add(filename); + cache.put(TokenData.takeFromRequest().getSessionId(), sessionUploadFileSet); + } + } + + /** + * 判断参数中的文件名,是否有当前session上传。 + * + * @param filename 通常是本地存储的文件名,而不是上传时的原始文件名。 + * @return true表示该文件是由当前session上传并存储在本地的,否则false。 + */ + public boolean existSessionUploadFile(String filename) { + if (filename == null) { + return false; + } + Cache cache = cacheManager.getCache(RedissonCacheConfig.CacheEnum.UPLOAD_FILENAME_CACHE.name()); + Cache.ValueWrapper valueWrapper = cache.get(TokenData.takeFromRequest().getSessionId()); + if (valueWrapper == null) { + return false; + } + return ((Set) valueWrapper.get()).contains(filename); + } + + /** + * 清除当前session的所有缓存数据。 + * + * @param sessionId 当前会话的SessionId。 + */ + public void removeAllSessionCache(String sessionId) { + for (RedissonCacheConfig.CacheEnum c : RedissonCacheConfig.CacheEnum.values()) { + cacheManager.getCache(c.name()).evict(sessionId); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/config/RedissonConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/config/RedissonConfig.java new file mode 100644 index 00000000..f9ed1c91 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/java/com/flow/demo/common/redis/config/RedissonConfig.java @@ -0,0 +1,102 @@ +package com.flow.demo.common.redis.config; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import com.flow.demo.common.core.exception.InvalidRedisModeException; +import org.redisson.Redisson; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Redisson配置类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Configuration +@ConditionalOnProperty(name = "redis.redisson.enabled", havingValue = "true") +public class RedissonConfig { + + @Value("${redis.redisson.lockWatchdogTimeout}") + private Integer lockWatchdogTimeout; + + @Value("${redis.redisson.mode}") + private String mode; + + /** + * 仅仅用于sentinel模式。 + */ + @Value("${redis.redisson.masterName:}") + private String masterName; + + @Value("${redis.redisson.address}") + private String address; + + @Value("${redis.redisson.timeout}") + private Integer timeout; + + @Value("${redis.redisson.password:}") + private String password; + + @Value("${redis.redisson.pool.poolSize}") + private Integer poolSize; + + @Value("${redis.redisson.pool.minIdle}") + private Integer minIdle; + + @Bean + public RedissonClient redissonClient() { + if (StrUtil.isBlank(password)) { + password = null; + } + Config config = new Config(); + if ("single".equals(mode)) { + config.setLockWatchdogTimeout(lockWatchdogTimeout) + .useSingleServer() + .setPassword(password) + .setAddress(address) + .setConnectionPoolSize(poolSize) + .setConnectionMinimumIdleSize(minIdle) + .setConnectTimeout(timeout); + } else if ("cluster".equals(mode)) { + String[] clusterAddresses = StrUtil.splitToArray(address, ','); + config.setLockWatchdogTimeout(lockWatchdogTimeout) + .useClusterServers() + .setPassword(password) + .addNodeAddress(clusterAddresses) + .setConnectTimeout(timeout) + .setMasterConnectionPoolSize(poolSize); + } else if ("sentinel".equals(mode)) { + String[] sentinelAddresses = StrUtil.splitToArray(address, ','); + config.setLockWatchdogTimeout(lockWatchdogTimeout) + .useSentinelServers() + .setPassword(password) + .setMasterName(masterName) + .addSentinelAddress(sentinelAddresses) + .setConnectTimeout(timeout) + .setMasterConnectionPoolSize(poolSize); + } else if ("master-slave".equals(mode)) { + String[] masterSlaveAddresses = StrUtil.splitToArray(address, ','); + if (masterSlaveAddresses.length == 1) { + throw new IllegalArgumentException( + "redis.redisson.address MUST have multiple redis addresses for master-slave mode."); + } + String[] slaveAddresses = new String[masterSlaveAddresses.length - 1]; + ArrayUtil.copy(masterSlaveAddresses, 1, slaveAddresses, 0, slaveAddresses.length); + config.setLockWatchdogTimeout(lockWatchdogTimeout) + .useMasterSlaveServers() + .setPassword(password) + .setMasterAddress(masterSlaveAddresses[0]) + .addSlaveAddress(slaveAddresses) + .setConnectTimeout(timeout) + .setMasterConnectionPoolSize(poolSize); + } else { + throw new InvalidRedisModeException(mode); + } + return Redisson.create(config); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/resources/META-INF/spring.factories b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..029891f9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-redis/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.flow.demo.common.redis.config.RedissonConfig \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/pom.xml new file mode 100644 index 00000000..3cde959c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/pom.xml @@ -0,0 +1,24 @@ + + + + common + com.flow.demo + 1.0.0 + + 4.0.0 + + common-sequence + 1.0.0 + common-sequence + jar + + + + com.flow.demo + common-core + 1.0.0 + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/config/IdGeneratorAutoConfig.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/config/IdGeneratorAutoConfig.java new file mode 100644 index 00000000..d933ff02 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/config/IdGeneratorAutoConfig.java @@ -0,0 +1,14 @@ +package com.flow.demo.common.sequence.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-sequence模块的自动配置引导类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@EnableConfigurationProperties({IdGeneratorProperties.class}) +public class IdGeneratorAutoConfig { + +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/config/IdGeneratorProperties.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/config/IdGeneratorProperties.java new file mode 100644 index 00000000..9d844b06 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/config/IdGeneratorProperties.java @@ -0,0 +1,20 @@ +package com.flow.demo.common.sequence.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * common-sequence模块的配置类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Data +@ConfigurationProperties(prefix = "sequence") +public class IdGeneratorProperties { + + /** + * 基础版生成器所需的WorkNode参数值。仅当advanceIdGenerator为false时生效。 + */ + private Integer snowflakeWorkNode = 1; +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/generator/BasicIdGenerator.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/generator/BasicIdGenerator.java new file mode 100644 index 00000000..8e852116 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/generator/BasicIdGenerator.java @@ -0,0 +1,48 @@ +package com.flow.demo.common.sequence.generator; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +/** + * 基础版snowflake计算工具类。 + * 和SnowflakeIdGenerator相比,相同点是均为基于Snowflake算法的生成器。不同点在于当前类的 + * WorkNodeId是通过配置文件静态指定的。而SnowflakeIdGenerator的WorkNodeId是由zk生成的。 + * + * @author Jerry + * @date 2021-06-06 + */ +public class BasicIdGenerator implements MyIdGenerator { + + private final Snowflake snowflake; + + /** + * 构造函数。 + * + * @param workNode 工作节点。 + */ + public BasicIdGenerator(Integer workNode) { + snowflake = IdUtil.createSnowflake(workNode, 0); + } + + /** + * 获取基于Snowflake算法的数值型Id。 + * 由于底层实现为synchronized方法,因此计算过程串行化,且线程安全。 + * + * @return 计算后的全局唯一Id。 + */ + @Override + public long nextLongId() { + return this.snowflake.nextId(); + } + + /** + * 获取基于Snowflake算法的字符串Id。 + * 由于底层实现为synchronized方法,因此计算过程串行化,且线程安全。 + * + * @return 计算后的全局唯一Id。 + */ + @Override + public String nextStringId() { + return this.snowflake.nextIdStr(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/generator/MyIdGenerator.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/generator/MyIdGenerator.java new file mode 100644 index 00000000..aed14393 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/generator/MyIdGenerator.java @@ -0,0 +1,24 @@ +package com.flow.demo.common.sequence.generator; + +/** + * 分布式Id生成器的统一接口。 + * + * @author Jerry + * @date 2021-06-06 + */ +public interface MyIdGenerator { + + /** + * 获取数值型分布式Id。 + * + * @return 生成后的Id。 + */ + long nextLongId(); + + /** + * 获取字符型分布式Id。 + * + * @return 生成后的Id。 + */ + String nextStringId(); +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/wrapper/IdGeneratorWrapper.java b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/wrapper/IdGeneratorWrapper.java new file mode 100644 index 00000000..8c90af4a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/java/com/flow/demo/common/sequence/wrapper/IdGeneratorWrapper.java @@ -0,0 +1,52 @@ +package com.flow.demo.common.sequence.wrapper; + +import com.flow.demo.common.sequence.config.IdGeneratorProperties; +import com.flow.demo.common.sequence.generator.BasicIdGenerator; +import com.flow.demo.common.sequence.generator.MyIdGenerator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 分布式Id生成器的封装类。该对象可根据配置选择不同的生成器实现类。 + * + * @author Jerry + * @date 2021-06-06 + */ +@Component +public class IdGeneratorWrapper { + + @Autowired + private IdGeneratorProperties properties; + /** + * Id生成器接口对象。 + */ + private MyIdGenerator idGenerator; + + /** + * 今后如果支持更多Id生成器时,可以在该函数内实现不同生成器的动态选择。 + */ + @PostConstruct + public void init() { + idGenerator = new BasicIdGenerator(properties.getSnowflakeWorkNode()); + } + + /** + * 由于底层实现为synchronized方法,因此计算过程串行化,且线程安全。 + * + * @return 计算后的全局唯一Id。 + */ + public long nextLongId() { + return idGenerator.nextLongId(); + } + + /** + * 由于底层实现为synchronized方法,因此计算过程串行化,且线程安全。 + * + * @return 计算后的全局唯一Id。 + */ + public String nextStringId() { + return idGenerator.nextStringId(); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/resources/META-INF/spring.factories b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..5a44fb00 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/common-sequence/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.flow.demo.common.sequence.config.IdGeneratorAutoConfig \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/common/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/common/pom.xml new file mode 100644 index 00000000..fe16716c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/common/pom.xml @@ -0,0 +1,25 @@ + + + + com.flow.demo + DemoFlow + 1.0.0 + + 4.0.0 + + common + pom + + + common-core + common-log + common-datafilter + common-online + common-online-api + common-flow-online + common-flow + common-redis + common-sequence + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/pom.xml b/orange-demo-flowable/orange-demo-flowable-service/pom.xml new file mode 100644 index 00000000..af832d75 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/pom.xml @@ -0,0 +1,210 @@ + + + 4.0.0 + + com.flow.demo + DemoFlow + 1.0.0 + DemoFlow + pom + + + 2.3.10.RELEASE + Cairo-SR8 + 2.3.1 + UTF-8 + 1.8 + 1.8 + 1.8 + DemoFlow + + 4.4 + 1.8 + 4.1.2 + 5.6.4 + 0.9.1 + 1.2.76 + 1.1.5 + 3.0.2 + 1.4.2.Final + 1.18.20 + 3.4.3 + 6.2.0.Final + 6.6.0 + + 1.2.6 + 3.4.2 + 1.3.0 + 3.15.4 + 2.0.0 + + + + application-webadmin + common + + + + + + org.springframework.boot + spring-boot-starter-web + + + spring-boot-starter-logging + org.springframework.boot + + + + + + org.springframework.boot + spring-boot-starter-freemarker + + + + javax.servlet + javax.servlet-api + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + + org.springframework.boot + spring-boot-starter-aop + + + + org.springframework.boot + spring-boot-starter-cache + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.springframework.security + spring-security-crypto + + + + org.springframework.boot + spring-boot-starter-actuator + + + + de.codecentric + spring-boot-admin-starter-client + ${spring-boot-admin.version} + + + + org.hibernate + hibernate-validator + ${hibernate-validator.version} + + + + org.mapstruct + mapstruct + ${mapstruct.version} + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + provided + + + + org.projectlombok + lombok + provided + + + + com.lmax + disruptor + ${disruptor.version} + + + + org.springframework.plugin + spring-plugin-core + 2.0.0.RELEASE + + + org.springframework.plugin + spring-plugin-metadata + 2.0.0.RELEASE + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + mysql + mysql-connector-java + 8.0.22 + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + io.spring.platform + platform-bom + ${spring-platform.version} + pom + import + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + ${maven.compiler.target} + ${maven.compiler.source} + UTF-8 + + + org.projectlombok + lombok + ${lombok.version} + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/db-scripts/zzdemo-online.sql b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/db-scripts/zzdemo-online.sql new file mode 100644 index 00000000..1a83707f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/db-scripts/zzdemo-online.sql @@ -0,0 +1,7977 @@ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for ACT_EVT_LOG +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_EVT_LOG`; +CREATE TABLE `ACT_EVT_LOG` ( + `LOG_NR_` bigint(20) NOT NULL AUTO_INCREMENT, + `TYPE_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TIME_STAMP_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `DATA_` longblob, + `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, + `IS_PROCESSED_` tinyint(4) DEFAULT '0', + PRIMARY KEY (`LOG_NR_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_GE_BYTEARRAY +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_GE_BYTEARRAY`; +CREATE TABLE `ACT_GE_BYTEARRAY` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `BYTES_` longblob, + `GENERATED_` tinyint(4) DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_FK_BYTEARR_DEPL` (`DEPLOYMENT_ID_`), + CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `ACT_RE_DEPLOYMENT` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_GE_BYTEARRAY +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('1a075ec9-1c4e-11ec-94ee-5ef70686b817', 1, 'flowLeave.bpmn', '1a075ec8-1c4e-11ec-94ee-5ef70686b817', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A62706D6E323D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A64633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E222069643D226469616772616D5F666C6F774C6561766522207873693A736368656D614C6F636174696F6E3D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2042504D4E32302E787364223E0A20203C70726F636573732069643D22666C6F774C6561766522206E616D653D22E8AFB7E58187E794B3E8AFB72220697345786563757461626C653D2274727565223E0A202020203C657874656E73696F6E456C656D656E74733E0A2020202020203C666C6F7761626C653A657865637574696F6E4C697374656E6572206576656E743D22656E642220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E557064617465466C6F775374617475734C697374656E6572223E3C2F666C6F7761626C653A657865637574696F6E4C697374656E65723E0A202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C73746172744576656E742069643D224576656E745F316339756B6B71223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D2241637469766974795F3073633279756622206E616D653D22E8AFB7E58187E5BD95E585A52220666C6F7761626C653A61737369676E65653D22247B7374617274557365724E616D657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934353431313335343236373634382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A66616C73652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383733363935353822206C6162656C3D22E68F90E4BAA42220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F303566793977682220736F757263655265663D224576656E745F316339756B6B7122207461726765745265663D2241637469766974795F30736332797566223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F316A773575323022206E616D653D22E983A8E997A8E9A286E5AFBCE5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22247B64657074506F73744C65616465727D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934353431313335343236373634382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550545F504F53545F4C45414445522671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E44657074506F73744C65616465724C697374656E6572223E3C2F666C6F7761626C653A7461736B4C697374656E65723E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383733383937333422206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383733393331313622206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30706D653076722220736F757263655265663D2241637469766974795F3073633279756622207461726765745265663D2241637469766974795F316A7735753230223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F306F6C7861747622206E616D653D224852E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303936343232313835353630303634302220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934353431313335343236373634382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B504F53542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383831343737323722206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383831353130363922206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3168626F62333722206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F316A773575323022207461726765745265663D2241637469766974795F306F6C78617476223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C656E644576656E742069643D224576656E745F30346279787237223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30736F3831306122206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F306F6C7861747622207461726765745265663D224576656E745F30346279787237223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3031326864347622206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F316A773575323022207461726765745265663D2241637469766974795F30736332797566223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3164706E797A3622206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F306F6C7861747622207461726765745265663D2241637469766974795F30736332797566223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F666C6F774C65617665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22666C6F774C65617665222069643D2242504D4E506C616E655F666C6F774C65617665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F316339756B6B71222069643D2242504D4E53686170655F4576656E745F316339756B6B71223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223133322E302220793D223332322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30736332797566222069643D2242504D4E53686170655F41637469766974795F30736332797566223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223232302E302220793D223330302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F316A7735753230222069643D2242504D4E53686170655F41637469766974795F316A7735753230223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223338302E302220793D223330302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F306F6C78617476222069643D2242504D4E53686170655F41637469766974795F306F6C78617476223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223534302E302220793D223330302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F30346279787237222069643D2242504D4E53686170655F4576656E745F30346279787237223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223730322E302220793D223332322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30313268643476222069643D2242504D4E456467655F466C6F775F30313268643476223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223433302E302220793D223330302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223433302E302220793D223237302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223237302E302220793D223237302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223237302E302220793D223330302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223333392E302220793D223235322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30736F38313061222069643D2242504D4E456467655F466C6F775F30736F38313061223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223634302E302220793D223334302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223730322E302220793D223334302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D223636302E302220793D223332322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F3168626F623337222069643D2242504D4E456467655F466C6F775F3168626F623337223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223438302E302220793D223334302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223534302E302220793D223334302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D223439392E302220793D223332322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30706D65307672222069643D2242504D4E456467655F466C6F775F30706D65307672223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223332302E302220793D223334302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223338302E302220793D223334302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30356679397768222069643D2242504D4E456467655F466C6F775F30356679397768223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136382E302220793D223334302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223232302E302220793D223334302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F3164706E797A36222069643D2242504D4E456467655F466C6F775F3164706E797A36223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223539302E302220793D223338302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223539302E302220793D223432302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223237302E302220793D223432302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223237302E302220793D223338302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223431392E302220793D223430322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('1ba32d21-1c51-11ec-94ee-5ef70686b817', 1, 'flowContract.bpmn', '1ba32d20-1c51-11ec-94ee-5ef70686b817', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A62706D6E323D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A64633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E222069643D226469616772616D5F666C6F77436F6E747261637422207873693A736368656D614C6F636174696F6E3D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2042504D4E32302E787364223E0A20203C70726F636573732069643D22666C6F77436F6E747261637422206E616D653D22E59088E5908CE5AEA1E689B92220697345786563757461626C653D2274727565223E0A202020203C657874656E73696F6E456C656D656E74733E0A2020202020203C666C6F7761626C653A657865637574696F6E4C697374656E6572206576656E743D22656E642220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E557064617465466C6F775374617475734C697374656E6572223E3C2F666C6F7761626C653A657865637574696F6E4C697374656E65723E0A202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C73746172744576656E742069643D224576656E745F3170736D697364223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D2241637469766974795F306E796C61317222206E616D653D22E59088E5908CE5BD95E585A52220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935343932303334383934363433322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A66616C73652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839363537313222206C6162656C3D22E68F90E4BAA42220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F303063657865612220736F757263655265663D224576656E745F3170736D69736422207461726765745265663D2241637469766974795F306E796C613172223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3175637268353222206E616D653D22E4B89AE58AA1E983A8E9A286E5AFBCE5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22247B64657074506F73744C65616465727D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935343932303334383934363433322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550545F504F53545F4C45414445522671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E44657074506F73744C65616465724C697374656E6572223E3C2F666C6F7761626C653A7461736B4C697374656E65723E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839373234353522206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30346B63616A632220736F757263655265663D2241637469766974795F306E796C61317222207461726765745265663D2241637469766974795F31756372683532223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30323666766E712220736F757263655265663D2241637469766974795F3175637268353222207461726765745265663D22476174657761795F30396364787466223E3C2F73657175656E6365466C6F773E0A202020203C706172616C6C656C476174657761792069643D22476174657761795F30396364787466223E3C2F706172616C6C656C476174657761793E0A202020203C757365725461736B2069643D2241637469766974795F3133386D346E6E22206E616D653D22E5B7A5E7A88BE983A8E5AEA1E689B92220666C6F7761626C653A63616E64696461746555736572733D2261646D696E2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353139343939313937323335322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839373831303122206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F307A7A307539672220736F757263655265663D22476174657761795F3039636478746622207461726765745265663D2241637469766974795F3133386D346E6E223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F30746D336D706822206E616D653D22E980A0E4BBB7E983A8E5AEA1E689B92220666C6F7761626C653A61737369676E65653D2261646D696E2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353139343939313937323335322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839383233373722206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F317978716265302220736F757263655265663D22476174657761795F3039636478746622207461726765745265663D2241637469766974795F30746D336D7068223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31323465387A332220736F757263655265663D2241637469766974795F3133386D346E6E22207461726765745265663D22476174657761795F306F79366F666C223E3C2F73657175656E6365466C6F773E0A202020203C706172616C6C656C476174657761792069643D22476174657761795F306F79366F666C223E3C2F706172616C6C656C476174657761793E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3175766A3364732220736F757263655265663D2241637469766974795F30746D336D706822207461726765745265663D22476174657761795F306F79366F666C223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3179757579696522206E616D653D22E8B4A2E58AA1E983A8E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303936343531393339353333323039362C313434303936343531393339313133373739322220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353132373739303833333636342671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B504F53542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383930333738313422206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383930343234383922206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F316B79686E6C7A2220736F757263655265663D22476174657761795F306F79366F666C22207461726765745265663D2241637469766974795F31797575796965223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3039386E63767722206E616D653D22E6B395E58AA1E983A8E4BC9AE7ADBE2220666C6F7761626C653A61737369676E65653D22247B61737369676E65657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353030313039333439323733362671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383931393036363222206C6162656C3D22E5908CE6848F2220747970653D226D756C74695F6167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383931393734303622206C6162656C3D22E68B92E7BB9D2220747970653D226D756C74695F726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D2266616C73652220666C6F7761626C653A636F6C6C656374696F6E3D2261737369676E65654C6973742220666C6F7761626C653A656C656D656E745661726961626C653D2261737369676E6565223E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B6E724F66496E7374616E636573203D3D206E724F66436F6D706C65746564496E7374616E6365737D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3064693671613622206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F3179757579696522207461726765745265663D2241637469766974795F31656577743031223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D22476174657761795F316D356672757A223E3C2F6578636C7573697665476174657761793E0A202020203C73657175656E6365466C6F772069643D22466C6F775F306A7976317A622220736F757263655265663D2241637469766974795F3039386E63767722207461726765745265663D22476174657761795F316D356672757A223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F316833706E787922206E616D653D22E680BBE7BB8FE79086E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303931313431303538313231333431362220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935343932303334383934363433322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383934343935303822206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383934353238353022206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31663879786F7622206E616D653D22E5908CE6848FE4BABAE695B0E5A4A7E4BA8E3430252220736F757263655265663D22476174657761795F316D356672757A22207461726765745265663D2241637469766974795F316833706E7879223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6D756C74694167726565436F756E74202F206E724F66496E7374616E636573203E20302E347D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C656E644576656E742069643D224576656E745F3132616A6F3364223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31613371636C6D22206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F316833706E787922207461726765745265663D224576656E745F3132616A6F3364223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F306C6C6F79353622206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F3179757579696522207461726765745265663D2241637469766974795F306E796C613172223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3165657774303122206E616D653D22E6B395E58AA1E983A8E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303936343338373937393339393136382220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353030313039333439323733362671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B504F53542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383933333730323422206C6162656C3D22E4BC9AE7ADBE2220747970653D226D756C74695F7369676E222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383933343139303122206C6162656C3D22E58AA0E7ADBE2220747970653D226D756C74695F636F6E7369676E222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F307A6D736E33782220736F757263655265663D2241637469766974795F3165657774303122207461726765745265663D2241637469766974795F3039386E637677223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3176737269766222206E616D653D22E5908CE6848FE4BABAE695B0E5B08FE4BA8E3430252220736F757263655265663D22476174657761795F316D356672757A22207461726765745265663D2241637469766974795F306E796C613172223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6D756C74694167726565436F756E74202F206E724F66496E7374616E636573203C3D20302E347D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F316D323430366622206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F316833706E787922207461726765745265663D2241637469766974795F306E796C613172223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F666C6F77436F6E7472616374223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22666C6F77436F6E7472616374222069643D2242504D4E506C616E655F666C6F77436F6E7472616374223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F3170736D697364222069643D2242504D4E53686170655F4576656E745F3170736D697364223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D2239322E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F306E796C613172222069643D2242504D4E53686170655F41637469766974795F306E796C613172223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223138302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31756372683532222069643D2242504D4E53686170655F41637469766974795F31756372683532223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223334302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F30396364787466222069643D2242504D4E53686170655F476174657761795F30396364787466223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D223530352E302220793D223330352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F3133386D346E6E222069643D2242504D4E53686170655F41637469766974795F3133386D346E6E223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223636302E302220793D223136302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30746D336D7068222069643D2242504D4E53686170655F41637469766974795F30746D336D7068223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223636302E302220793D223339302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F306F79366F666C222069643D2242504D4E53686170655F476174657761795F306F79366F666C223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D223835352E302220793D223330352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31797575796965222069643D2242504D4E53686170655F41637469766974795F31797575796965223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313030302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F3039386E637677222069643D2242504D4E53686170655F41637469766974795F3039386E637677223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313336302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F316D356672757A222069643D2242504D4E53686170655F476174657761795F316D356672757A223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D22313531352E302220793D223330352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F316833706E7879222069643D2242504D4E53686170655F41637469766974795F316833706E7879223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313637302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F3132616A6F3364222069643D2242504D4E53686170655F4576656E745F3132616A6F3364223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D22313836322E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31656577743031222069643D2242504D4E53686170655F41637469766974795F31656577743031223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313139302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F316D3234303666222069643D2242504D4E456467655F466C6F775F316D3234303666223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313732302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313732302E302220793D223534302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231302E302220793D223534302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223935342E302220793D223532322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31767372697662222069643D2242504D4E456467655F466C6F775F31767372697662223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313534302E302220793D223330352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313534302E302220793D223133302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223133302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223239302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2238392E302220783D223834312E302220793D223131322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F307A6D736E3378222069643D2242504D4E456467655F466C6F775F307A6D736E3378223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313239302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313336302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F306C6C6F793536222069643D2242504D4E456467655F466C6F775F306C6C6F793536223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313035302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313035302E302220793D223530302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223530302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223632392E302220793D223438322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31613371636C6D222069643D2242504D4E456467655F466C6F775F31613371636C6D223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313737302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313836322E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D22313830352E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31663879786F76222069643D2242504D4E456467655F466C6F775F31663879786F76223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313536352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313637302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2238392E302220783D22313537332E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F306A7976317A62222069643D2242504D4E456467655F466C6F775F306A7976317A62223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313436302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313531352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30646936716136222069643D2242504D4E456467655F466C6F775F30646936716136223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313130302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313139302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D22313133342E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F316B79686E6C7A222069643D2242504D4E456467655F466C6F775F316B79686E6C7A223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223930352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313030302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F3175766A336473222069643D2242504D4E456467655F466C6F775F3175766A336473223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223736302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223335352E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31323465387A33222069643D2242504D4E456467655F466C6F775F31323465387A33223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223736302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223330352E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31797871626530222069643D2242504D4E456467655F466C6F775F31797871626530223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223335352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223636302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F307A7A30753967222069643D2242504D4E456467655F466C6F775F307A7A30753967223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223330352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223636302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30323666766E71222069643D2242504D4E456467655F466C6F775F30323666766E71223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223434302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223530352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30346B63616A63222069643D2242504D4E456467655F466C6F775F30346B63616A63223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223238302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223334302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30306365786561222069643D2242504D4E456467655F466C6F775F30306365786561223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223132382E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223138302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('1bbbe542-1c51-11ec-94ee-5ef70686b817', 1, 'flowContract.flowContract.png', '1ba32d20-1c51-11ec-94ee-5ef70686b817', 0x89504E470D0A1A0A0000000D4948445200000774000002260806000000AB78BB71000069854944415478DAECDD07981D55D938F05014AC34FB5F6CE0A7D83F15151B114114145009D98426862F8496DD0D298A88A11B5BB27743899F48533F0145098A81ECBD1702482F22016921B484D02142820AF39F77D859EE6E76934DB26576F7F77B9EF3E496B96577DF9C79CF79E7CC0C1B06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000834CE389D52D1B7FF6D757AC6ABBC9D32E7FCD4127565FDDDDE7279D587D93DF2E000000000000402A8AA9F5A5CA5F56D6F2826B7A7B7C6373F93BD11A9ACBB736942A67B4DD2F951B3A7BFFC6E66A7D7DA97A40C7C70F3CE9B24D1A9A2BA7C7EBEA9BAB7BA5EFF5C7A953A7AE9B3E76F7CABE6FFD8CF2E7D36D4FE9ECB9F4BDFEB7CB9FA3A9F2B3EEFE4EE27B747CECD0D2851BACF858F5AD63675DF7325104000000000000F48AD6C2EA8D8DCD977EB0B316CFC536B16D43A9B2736373A5B1A154BEB9A1B9BA5BD64A953BD3FB07C6739DBD7F7DA932A9B1A9BA6FC7C763756F1466EB9BAA273496AACDF5A5F2110DD3E7BD397DEC9186A6F2D4688DA5F22756785DA9B26D146E3BFBAC6CD570FEBD9BCA13E3FDF3FB8796CA5B74DC7ECAACB91BA5DBDC54DF5C1D993D9024EBA4F74F4ADBC28652F5C2F83EAD3FC3F8F899D3CFBE62C439E7AC973DD65CD9B1A1A97A717E1F000000000000A0C76505DD52E5F286A6CA842850B66F5951F4F2D8A6B1A9B247AC9E6D2C5516A48FDD17B75BDB03F9EDC6A66A5DC7F7AF6FAA9E5C5FAA4EE9F8F884A6CA4EE9FBDC92B6246D8BE273D2CF189BFE5B6E2D10DF7E68A9E57DB16DAC988DEDE3766D4137FD8EDF1B3BEB825776F67365DFB7A97274573FF7D4D3AA1B3694AAF3E2F30F69BEF49DADEF77707A7F4EB652B8A9F2DD585D9C1579D39FB1F16773364D9F9B3BBEA9FA81F14D97BE3BBD7DFDC1335B36134100000000000040AFC90BBA71EDDAFA1995F7B46F2D6FCC0BBAB16DC3F44BB74AEFFFAAA1543EADB6353695CFCA8BAF1DC5AAD6F435F7765CC97A48F3C56FA92F956F489F3B3BDDE6BAACF0DB54F9657ABBE5B099E5B7C7E7BCF41E2D9F8BC75BDFEFA5826E9CF2B9A932F6C5EF56DD380AB3794BDFFB90F4F999B58FC536B1EDD4A9D5F51B4AD5D9E9F3A7A6EDE1EC435E2CDCDE1D9F1577EB9B2BBB3496AAE7642B899BCBB7B6AEE65D38F1E48BDE90BEF69AF477F321D103000000000000F4AABCA03B79DAE5AF7971A56C143AB362E7A22880B62BE83697B78B226CDA7E52DB62B56A3CD7F1BDA3E819AB70EB9BABE7D53757BE59FB5CEB299B87D7972AC74D28553F35E1C44B374FB7AD66AB669BAAFB37962A47E5DBA6B79BD2F718D37ABBADA09BBEFFD6F1FED9ED99D5AF66D7E47DA95D9A3EF7B7768FC569A15F2CDCA6B7ABD3E33B3436952F88D71FD65C7D6F149EDBBE5F536542FA593FCA3EB3B9FC9DF8191A4BE5AFC5B57ED3D7EE9EBEC767C63755BEE81ABA00000000000040AFC90BBA87962E7C6D1453F3C7A3B89A3F575BD06D68AE5C15C5D6DA966E7375C7826E9CB6B8BEB9F2E76C75ED89D52DA3C01A2B63F3E71B4BE52FA5AFBB287DFDE3E9BFBF8FCF8EE26876AAE452E5A986E9D58FC476F54D73DF969DD6B975756DC76BE8C6678F6F2A7FBAE3CFD5D529971B9BCBE3D2D73C9D1574E354D3A5CAF5F533CA9F6F2DD6FEA9F6E78FF768F7DA52F598F4E73C36AEB91B2B86E37B64A76506000000000000E80DED0BBA95875E3A9572E5A18E05DDFA52657CACAACD56ACA6B763E56C763DD9E6F257EA9BAB7BD5BE6F3CD758AA36E7F71B9A2BC7A7AFF9CB4127565FFDD236D5735EBC5E6EB9A1A1A93CB575BBCFA49FF9EFC6E92DEFCAEE972A3F6D6CAE1C54F3BEED0BBA4DE5BDD336A3E3CFD5554137BEEF84A6962F448BEBF4A6AF3D344EA3DC5A38BE2ABB7E6EFAF3E4B7DB3E2756E596AAB363856FFADEBF8B4275FAF34C8ADF8528020000000000007A455EB48DDBD929966B5A142FE314CBD93633CB1F4DB7BBECD052798B28764EFCF145AFCAAE7B3BB3658728A8C6E98DE314C88D3F9BB36943A9FC87B87E6DED8ADCECFD63756B5C3777FABC3767F7A3185BAA2C4FDB7FEA4BD50362556E5CAF367DFDA8EC74C9E97687962EDCA0B6B01A85E3C652E5E7F9FD58D53B76D605AFECF8734511B8F6B4CD1DBD781DDDCAD238D574DB6B4AD5E6F4B3EF8855BBB5D7046E3D75F4B551F4CEEE972A47A6F77F9BFE7B5B5C0B581401000000000000BD62CAACB91BD59E6A3917D79BCDAE7F5B2ADF90AD4A2D55B78FD5B1AD85D039F5A5CA9551088E7F273455769A50AA7CB86166CB3651EC8CE26C579FD7D854199B3E3F2556C6C6F568E3D4CB07CF6CD92C5E97ADD8CD4FB53CB36587FAA6EA096DAF9BDEF2AE28A0468BD32377F9FECDD58F67A7802E55FE1EA7525EDDDF47ED0AE2B6DFC5F44BB7EA58B88D9FB7B6180C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014445D5D5DA2699AA6699AA6699AA6699AA6699AD6D3CDEC2B00400F1574FD1600000000809E64DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205C0109424C9CB172C5870CE95575EF9AF72B99CCC9D3B57EBE396FEDE5F98376FDEA24AA5B2AB88040000BA62DE1100406205C010B460C18273E7CD9B972C59B22459B66C59F2DC73CF697DDCE2F71EBFFF4B2EB9E4A9B973E7EE2C2A010080CE987704009058013004C5CADC28262AACF67F5BBC78F1A373E7CEBD46540200009D31EF080020B10260088AD32C5B995B9C95BA73E7CE5D2E2A010080CE987704009058013004C5355C15538BD3E2EF212A010080CE98770400905801300475B7A0FBCF2717270BAE3D2D99DF7274D6E2763CA608ABA00B0000F40DF38E0000122B0086A0EE1474973EF16072CB45DF4FFEF6E749ED5A3C16CF29C42AE8020000BDCFBC230080C40A8021A83B05DDFBE7CF5EA1989BB707E65FA010ABA00B0000F401F38E0000122B0086A0EE14746FAB4EEBB2A01BCF29C42AE8020000BDCFBC230080C40A8021A83B05DD5BE64EEDB2A01BCF29C42AE8020000BDCFBC230080C40A8021484157411700001818CC3B020048AC001882BA53D09DDF72749705DD784E215641170000E87DE61D01002456000C41DD29E8DE79C5CC2E0BBAF19C42AC822E0000D0FBCC3B020048AC001882BA53D07DECC19B935B2EFEC18AA75B4E1F8BE714621574010080DE67DE1100406205C010D49D826EB47BAE3B7385826E3CA608ABA00B0000F40DF38E0000122B0086A06E1574972F4FEEFCEBC92B9E6E397D2C9E538855D00500007A9F7947000089150043D0AA0ABA4B9F7830B9E38AE62EAFA11BCFC5368AB10ABA000040EF32EF080020B1026008EAB2A0BB7C79B2F8CE4AF2F739877759CCCD5B6C13DB5AADABA00B0000F41EF38E0000122B0086A0CE0ABAAB5A956BB5AE822E0000D0F7CC3B020048AC0018823A2BE8766755EECA56EB2ACC2AE80200003DCFBC230080C40A8021A8B382EE9A1673F3A630ABA00B0000F43CF38E0000122B0086A02EAFA1AB29E80200008562DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000CAEFD51356DC357B59D82AE822E00003060C679C60B0000122B0006D3FEA8B5ADB4B0ABA0ABA00B00000C9C719EDF020080C40A8041B43FEAD03A2DEC2AE82AE802000003679CE7B7000020B1026010ED8FBA68ED0ABB0ABA0ABA0000C0C019E7F92D000048AC001844FBA355B4ACB0ABA0ABA00B00000C9C719EDF020080C40A1862FD95A615B1A0BB6CD9B264E9D2A5ABDC6ED1A245C96DB7DDB65AEFBD64C992E4CA2BAFECF2F9471E7924993F7F7E767BE1C285C9934F3E997D9F7FFCE31FDDFA4E6BDBC4E4E06FF63E000098770400905801E8AF28CC2997CF3AEBACE4A73FFD6997EDF4D34FCFB6BBFCF2CB937DF7DD37F9D8C73E96BCE215AF480E3AE8A0E4FDEF7F7FF2BEF7BDAF5D5BBE7C79B278F1E2E4B2CB2E4B76DB6DB7E4831FFC60763BDAF7BFFFFD76DBC6674771F684134E686B3BEFBC73B2EEBAEB26C71E7B6CBBC7EFBCF3CEEC7BFCFAD7BF4E5EFFFAD767B737DA68A3E4ECB3CF4E1E7CF0C1F8BF925C77DD7556E8A2DF0500403E090020B102D05FD1337FDF95157273BD5DD0DD6FBFFD92ADB7DE3A6B1FF8C007B2C268FC9B3F16DF2DB6AB56ABC92EBBEC92ACB3CE3AC911471C915C73CD35D9B651F43DEFBCF392638E3926BB1FAB65CF3CF3CCEC76C7B6CF3EFB249FFDEC67931FFFF8C7D9FDD9B36727E79E7B6EB2FEFAEB275FFEF297BB6CB1ED85175E98DC7DF7DDC9E4C993938D37DE382997CB0ABAE8770100904F020048AC00F457F4DEDF776585DC5C5F9E72394E5B9C7E6472F3CD3777FADCF9E79F9FAD9E3DFEF8E3936BAFBD36DBF6C0030F4C8E3BEEB8E480030E682BE8C6F651783DFAE8A3B315BBDB6DB75D72EAA9A726DFFEF6B793BDF6DA2BF9D18F7E94ADB27DE69967928B2EBA285BE97BCF3DF7642D4EB71CEF138FE78F7DF8C31F4EAEB8E28A64FAF4E9C9061B6C901595DFFBDEF76605DD33CE3823DB265E3375EAD4649B6DB6E9F4FB2BE8A2DF0500403E090020B102D05FB13A7FDF951672734529E8C64ADC57BDEA55D9F3AF7DED6B939FFCE427C937BEF18D766DF7DD77CF0AB877DC714756E07DC73BDE91ADC08DD79C72CA29593137DA873EF4A1AC109CBF779C467958272B7AF3169F5DBB6DED2997E3F9CF7DEE73D9BFF1FDC68D1B977DBE822EFA5D0000E4930000122B00FD15BDAE2805DD6853A64CC99E9F38716252A954B2026EC7162B69C78F1FDF696176871D7648468D1A956CB5D55659C1B7B648BBE9A69B26D75F7F7D766AE5D8360AC1717F8B2DB658A1A01B05E538CD731474E35ABB717DDF784D7CB6532EA3DF0500403E090020B102D05FD1678A52D08D55AF1B6EB861F6FCCB5EF6B2AC307BF8E18767D7C58DC71A1B1BB3FB37DD7453B64A77D6AC59C949279DD4D62EB8E082B6532E5F7DF5D5C9CB5FFEF2E4BEFBEE5BAD15BA71BDDC38FD723CF695AF7CC53574D1EF0200209F0400905801E8AFE85F4529E846E176E79D774ED65B6FBDE4A8A38ECA56C8C6E98D77D96597EC3563C68C490E3AE8A0B6ED63BBCD37DF3CBBD6EDC61B6F9C1560F3826E3C1FD7CD9D366D5A5B4177934D3649AEBAEAAA64F6ECD9D9FBFDE637BFC9EED7AED08D6BF86EBFFDF6C9EB5EF7BAB6532E772CE8FEF39FFF54D045BF0B00807C1200406205A0BFA26F14A5A07BDC71C76505D328D456ABD5E4E1871FCE0ABABBEDB65BF69AFDF6DB6F8582EE9C3973B2DB871C72485B4177DB6DB74D264F9E9C6CB6D9665931766DAFA1DBB1A0BBC71E7BB4DB5E4117FD2E0000F2490000891580FE8A5ED39B05DDD34F3F3D2BB0E66DEBADB7CE0AA39FF8C427DA3DFECB5FFE3279F6D967DB0AB551D08D42EA8C193392830F3E387BCD09279C90DDCFBF6F6CB7DD76DB257BEEB967F29EF7BCA7ADA01BD7D9FDC217BE9015831F7BECB16CDB2BAFBC323B6573ACAEBDF3CE3BB3F7BBF6DA6BB3FBF1BE2D2D2DD9760F3DF450B63A380ABAF17C7CC6473EF29164D75D77CD5E3373E6CCE4DDEF7E77D2D4D4A4A08B7E170000F9240080C40A407F45EFEBCD82EE25975C921C79E491AB6C7941B5B6A01BA758FEE4273FB9423BFEF8E3DBB6FBEA57BF9A156EE3F4CA1D4FB9DC555BB87061569CBDF1C61B5778EE17BFF845F6DCD7BFFEF5EC9ABC6F7DEB5BB3F72F97CB59113A9E7BCB5BDE92CC9F3F5F4117FD2E0000F2490000891580FE8ADED797A75CEE4EBBF7DE7BBB759DDABBEEBA2B59BA7469DBCADA458B16258B172FCEFE5DD9EB9E79E699E49A6BAE697B6D6D8BCF8DF788DBCB972F5FE1F9A79E7AAAD3C71574D1EF0200209F0400905801E8AFE815452BE80EF5A6A0ABDF050000F9240080C40A407F451B055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF28A872B9FCC2B265CB14530BD0D2BFC3A2B973E72E1795FA5D0000904F020048AC00F45764E6CD9BB768C992250AAA0568F7DE7BEF6FE7CE9D7B8DA8D4EF0200807C1200406205A0BF2253A95476BDE4924B9E5ABC78F1A356EAF6DBCADCC50B172EFCCDDCB973EF4BDBCEA252BF0B0000F2490000891580FE8A3651448C95A1697B2EAEE1AAF5797BAEF5F7AF98ABDF050000F9240080C40A407F05A0DF0500403E090020B102D05F01A0DF0500403E090020B102D05F01E8770100904F020020B102F45700E8770100904F020048AC00F45700FA5D0000904F020048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B00FD15807E170000F9240000122B407F05807E170000F9240080C40A407F05A0DF0500403E090080C40AD05F01A0DF0500403E090020B102D05F01E8770100403E090020B102D05F01E8770100904F020048AC00F45700E8770100904F020048AC00F45700FA5D0000E493000048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B407F05807E170000F9240080C40A407F05A0DFF55B0000403E090020B102D05F01E8770100904F020020B102F45700E8770100904F020048AC00F45700FA5D0000E493000048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B00FD15807E170000F9240000122B407F05807E170000F9240080C40A407F05A0DF0500403E090080C40AD05F01A0DF0500403E090020B102D05F01E8770100403E090020B102F457FA2B00FD2E0000F2490000891580FE0A00FD2E0000F2490000891580FE0A40BF0B00807C1200008915A0BF0240BF0B00807C1200406205A0BF02D0EF0200209F944F020048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B00FD15807E170000F9240000122B407F05807E170000F9240080C40A407F05A0DF0500403E0900C0AA93A86A2452AB6855BF29C0401000FD2E0000F2490080BE4FA28677A3A03BDC6F0A30100440BF0B00807C1200A07F12A9AAD5B980812000FA5D0000E4930000C54CA4865B9D0B180802A0DF0500403E090050DC64AA6A752E602008807E170000F92400403193A9E156E702068200E8770100904F02001437A1AA5A9D0B180802A0DF0500403E090050CC846AB8D5B980812000FA5D0000E4930000C54DAAAA122BC0401000FD2E0000F2490080622655C3255680812000FA5D0000E49300C0A09324C9CB172C5870CE95575EF9AF72B99CCC9D3B7740B648AC06EA774F7FEF2FCC9B376F51A552D955FCCDD5C49F812000FA5DE493F249C4BDB817A79A38954FA25FD3F46B00B97427746EDA09264B962C49962D5B963CF7DC735A1FB7F8BDC7EFFF924B2E792ADD31ED2CFE34F1672008807E17F9A47C12712FEEC5A9264EE593E8D734FD1A40268E288A4ED00EA1FFDBE2C58B1F4D7744D7883F4DFC190802A0DF453E299F44DC8B7B71AA8953F924FA354DBF069089D34338A2A8384718A53BA2E5E24F137F068200E877914FCA2711F7E25E9C6AE2543E897E4DD3AF0164E2DCF37602C569F1F7107F9AF833100440BF8B7C523E89B817F7E25413A7F249F46B9A7E0D60B57644FF7C7271B2E0DAD392F92D47672D6EC763761E7644E24FFC61200850A03EB61AFDEC2A5AD56F4A3E299F944F8A7B4DDC8B53718A713CFA35FD1AC0A0DA112D7DE2C1E4968BBE9FFCEDCF93DAB5782C9EB303B123127FE20F03418082F4B1C3BB51D01DEE37259F944FCA27C5BD7815F7E2549C621C8F7E4DBF0630A87644F7CF9FBDC24E286F0FCCBFC00EC48E48FC893F0C04018AD4CF56ADCE954FCA27E593E25EDC8B7B71AA8953E378F46BFA358021B523BAAD3AADCB1D513C6707624724FEC41F06820005EA67875B9D2B9F944FCA27C5BDB817F7E25413A7C6F1E8D7F46B00436A4774CBDCA95DEE88E2393B103B22F127FE30100428585F5BB53A573E299F944F8A7B712FEEC5A9264E8DE3D1AFE9D700EC88EC88EC88C49FF8C34010A0987DED70AB73E593F249F9A4B817F7E25E9C6AE2D4381EFD9A7E0D60C8EC88E6B71CDDE58E289EB303B123127FE20F03418002F6B755AB73E593F249F9A4B817F7E25E9C6AE2D4381EFD9A7E0D6048EC88EEBC6266973BA278CE0EC48E48FC893F0C04010AD8DF0EB73A573E299F944F8A7B712FEEC5A9264E8DE3D1AFE9D70086C48EE8B1076F4E6EB9F8072B9E26227D2C9EB303B123127FE20F03418082F6B955FDAE7C523E299F14F7E25EDC8B53712A4E8DE3D1AFE9D70006FD8E28DA3DD79DB9C28E281EB3F3B023127FE20F03418002F7B9C3478C18A1DF954FCA27E593E25EDC8B7B712A4E318E47BFA65F0318E43BA2E5CB933BFF7AF28AA789481F8BE7EC40EC88C49FF8A3DBB66D1D086EEB5701D037FDEE861B6EA8DF954FCA27E593E25EDC8B7B712A4E318E47BFA65F0318BC3BA2A54F3C98DC71457397E7FE8FE7621B3B113B22F127FE58F520306D4BD236B1F55F834100FD2EF249F924E25EDC8B53712A4EE593E8D734FD1AC01AEE88962F4F16DF5949FE3EE7F02E7742798B6D625B4719D911893FF1C72A0781DB76711F00FD2EF249F924E25EDC8B53712A4EE593E8D734FD1A40F77644AB3A9AC851467644E24FFCB15683C0553D0E807E17F9A47C12712FEEC5A93815A7F249F46B9A7E0DA0EB1D51778E265AD9514676287644E24FFCD1EDC19EC120807E17F9A47C12712FEEC5A93815A7F249F46B9A7E0D60F576446BBA13CA9B1D8A1D91F8137FACD620CF601040BF8B7C523E89B817F7E2549C8A53F924FA354DBF06D0FD1D91664724FEC41F7D3608341804D0EF229F944F22EEC5BD38D5C4A97C12FD9AA65F1B34BEF5AD6F6D5C5757B7FBC891234BE9BFE5B4DD93B667D396B4FE1BF7CBADCFEF1EDBFBAD0D414F3DF5D4A6B367CF3E7AE6CC997F3BEAA8A31E9D3265CAB2030F3CF085089471E3C6FD7BE2C4894F7FEF7BDFBBEFE8A38FBE60D2A4495F4E5FB28E1D911D801D91F8D32442FD3808341804D0EF229F944F1640E389D52D1B7FF6D757887BCD384A9C8A53F9E460C927BBBB6F9B3CEDF2D71C7462F5D5DD7D7ED289D537ADECFD0E2D5DF8DA29B3E66EA45FD3F46B033FF75C1DA3468DDAA1AEAEEEBCB43DD75ABCED6E8BEDCF8BD7DB250D01575F7DF5B81933663C78C001072453A64C49CE3DF7DCE4FAEBAF4FEEBEFBEEE4B1C71E4B42FC1BF7E3F1787EF2E4C92F8C1933E6B94993265D347AF4E87749B0353B22F127FEE8A741A0E202807E17F9A47CB287C484737DA9F29795B57C523ABD3DBEB1B9FC9D680DCDE55B1B4A9533DAEE97CA0DE25E338E12A7E2543E59847CB2B7F76D8DCDD5FAFA52F5808E8F1F78D2659B3434574E8FD7D53757F74ADFEB8F53A74E5D377DECEE957DDFF80EF5A5F2219D3D97BED7FF76F97334557ED6DDDF497C8F8E8F1D5ABA7083151FABBE75ECACEB5EA65FD3AFC93D7BCFA851A3B6A9ABABBB6A358BB85DB5ABE2FDEC9E06A19B6FBE79A7934E3A69D1D8B16393DFFFFEF7C9238F3C92AC8ED83E5E3766CC987F3536369E9306CAEB24D89A1D91F8137FF4D2202EA9698A0B00FA5DE493F2C95ED03AF97C6363F3A51FECACC573B1CD8B93CA959D1B9B2B8D0DA5F2CD0DCDD5DDB256AADC99DE3F309E13F79A71943815A7433E9FECCBF7E9B77D5B7DA932A9B1A9BA6FC7C763F560FA9A53EA9BAA273496AACDF5A5F2110DD3E7BD397DEC9186A6F2D4688DA5F22756785DA97278637379BFCE3E2B5B95987FEFA6F2C478FFFCFEA1A5F2161DB78F95BEE93637D5375747BE98E127EBA4F74F4ADBC28652F5C2F83EAD3FC3F8F899D3CFBE62C439E7AC973DD65CD9B1A1A97A717E5FBFA65F937BF6AC6F7DEB5B1B8E1C39F2C4BABABA173A16661B1A1A925FFFFAD72B5D7819CFC7769D14755F88F78DF7B7AB1A04D2BFFB7A175E78E1EC28E49E71C619C9D2A54B93B511AF8FF74903E4D9BDF6DA6B3709B626C1167FE28F5E18BC75A7B0A0B800A0DF453E299F5CDB49B552E5F286A6CA8498C46DDFB289E3CB639BC6A6CA1EB1C2A8B15459903E765FDC6E6D0FE4B71B9BAA75E25E338E12A7E27448E793FDF57E7DBA6FAB6FAA9E5C5FAA4EE9F8F884A6CA4EE9FBDC92B6246D8BE273D2CF189BFE5B6E2D40DD7E68A9E57DF54D73DFD6582A7F296FE9E3673796AAC7D43E76D8CCF2DB3BBE7FF67D9B2A4777F5734F3DADBA6143A93A2F3EFF90E64BDF198FA53FF3C1E9FD39D94AE1A6CA7763757156E44D7FC6C69FCDD9347D6EEEF8A6EA07C6375DFAEEF4F6F507CF6CD94CBFA65F937BF6BCBABABACD478D1AF5B7DA42ECE8D1A39359B366250F3CF0C06AD5E762FB785DBCBE4361F7A6F81CBBAC012CFDFB6E7CD65967DD71F0C107270B162C487A52BCDFD8B163978D1933E62809B626C1167FE28F1E1EB475B7B0A0B800A0DF453E299F5CCB49B5B8BE5FFD8CCA7BDAB79637E6936AD9A4F0F44BB74AEFFFAAA1543EADB6353695CF8A096A71AF19478953713AE4F3C922BC6FAFEFDB62556BFA9A7B3BAE643DA4F9E2B7D497CA37BC58A0AD5C97157E9B2ABF4C6FB74481363EE7C5D7B77CAEA1A932ADAD952A8F6545AB9AC7D2D77EB6617A75E328CCE62D4ECB9C6E3BB3F6B1D826DE73EAD4EAFA0DA5EAECF4F953D3F6706B61609D170B622D9F8BBBF5CD955D1A4BD573B295C4CDE55B5B57F32E9C78F2456F485F7B4DFABBF9907E4DBF26F7EC79A3468D7A6FDA1EAC2DBE4E9B362DB9FFFEFBD7AA3E17AF8FF7E950D4BD3F3ECFAE6B008A626EA9547AE288238E489E78E289A437C4FB4E9932E5D97DF6D9E74C09B626C1167FE28F1E1CACAD4E6141710140BF8B7C523EB916936A93A75DFE9A175713C564703621BC282689DB4DAA3597B78B89EAB4FDA4B6C58A9E784EDC6BC651E2549C0EF97CB210EFDF9BFBB6287AC62ADCFAE6EA79F5CD956FD63ED77A4AD8E1F5A5CA71134AD54F4D38F1D2CDD36DABD9AAD9A6EAFE8DA5CA0A8BA226942EFDEF749BBBD26DFE1AA7576EF75933AB5FCDAEC9FB52BB34DDF66FED1E8BD3CEBE58B84D6F57A7C777686C2A5F10AF3FACB9FADE283CB77DBFA6CA84F43BFC286EC73548E367682C95BF16D7FA4D5FBB7BFA1E9F19DF54F9A26BE8EAD7E49E3DA77565EE83B5AB7267CF9EDDA335BA78BF0EAB75EFB752778089D32C9F75D65977463137FED3F6A678FF8913273EB9E79E7B7E4F82AD49B0C59FF8A3870669AB5B58505C00D0EF229F944FAEE1A4DAA1A50B5F1B13CE6D93BEA54A357FAE7652ADA1B972554C48D7B6749BAB157435E328712A4E07753EB94EDAF66DFD776D74F63E3D9E4FF6D6BE2D4E5B5CDF5CF973AC788DE26B145863656CFE7CEBE9932F4A5FFF78FAEFEFE3B3A3389A9D3AB65479AA617AF5231DBF6BAC98CD4E3DDB5CF94C145857F6737575CAE5C6E6F2B8F4FD9FCE0ABA712ADB52E5FAFA19E5CFB7166BFF54FBF3C77B74F8FC63D29FF3D8B8E66EAC246E2895FF373B2DB37E4DBF26F75C6B714DDBDAD32CEFB7DF7EC98D37DED82B35BA78DF78FFDAD32FBBA6EE0012D7CC3DE490437A6D656E672B75F7DF7FFFA7D340D94582AD49B0C59FF8A30706676B5258505C00D0EF229F944FAEF1A45AE5A1974E675779A8E3A45A7DA9323E561E65AB7AD2DB8DA54A5376CDBDE6F257EA9BAB7B897BCD384A9C8AD341994F46F1F5D4D61CF1D4616B5ED45DD9FBF4683ED95BFBB678AEB1546DCEEF3734578E4F5FF397834EACBEFAA56DAAE7BC78BDDC72434353796AEB769F493FF3DF8DD35BDED5EEFD9AAA7551C4CA4FDD1CA7914D3FE3F0AE7EAEAE0ABAF17D2734B57C215A5CA737FDDC43E334CA71ADDE288665D7CF4D7F9EFC76DBF78F55B9A5EAEC58E19BBEF7EFA2509DFE3C93E277A15FD3AFC93DD7DEC891234FAC5D99DB5BC5DCDAA26EED4ADDF87CBBB30120FDC3ED3C76ECD81EBF666E77AEA9BBD75E7B3D3162C488D74BB03509B6F8137FACE5A06C4D0B0B8A0B807E57BF8B7C523EB99A936AD9C46E9CE6AEA6C5046F9CE62EDB6666F9A3E976971D5A2A6F1113C2137F7CD1ABB26B03CE6CD9A1A1A93C234E01593FA3656B71AF19478953713AE8F2C97D3BE4896B52D4AD2DE6E66D9FDECA277B7ADFD6F8B3399B3694CA7F88EBD7D6AEC8CDDE3F56B7C67573A7CF7B7376BFA9BC77BADDF2B4FDA7BE543D2056E5C6F56AD3D78FCA4E979C6E17AB76D3CF2BA58FDD91BF2E4C9D7ACECB5B4FA3FCDBB1B32E7865C79FABB1B9725067A76D7EE9F5711DDDCAD238956DDB6B4AD5E6EC734A95EB6BAF39DA7AEAE86BA3A896DD2F558E8CCF4DFFBD2DAE05AC5FD3AFC93DD7CEA851A3B6A9ABAB7B3E2FAE5E70C1057D52A38BCFA959A5FB7C7C0F9956C19D74D2498BCE38E38CA43F9C7CF2C98BD2406992606B126CF127FE1415D67230B6368505C50540BFABDF453E299FEC8629B3E66E547BBABBB609EA5265E7EC1A81A5F20DD9CA9D5275FBC65265DBD6C9E239F5A5CA95311917FF4E68AAEC34A154F970C3CC966DC4BD661C254EC5E9A0CB273B2BC6AE4E51B7B3D7FFA28BD7F7483ED9D3FBB628764671B6ABCF6B6CAA8C4D9F9F122B63E37AB471EAE58367B66C16AFCB56ECB69E6A390A51F54DD5131A9A2B93D3ED4E8D025567EFD7D054F96EED698FD3DB1FCF4E315BAAFC3D4EA5BCBABF8FDA15C46D9F31FDD2AD3A166EE3E7AD2D06EBD7F46B72CF3557575777555E589D366D5A9FD6E8E2F36A8ABA57C9B40AECEAABAF1E17AB739F7EFAE97E29E8C6E7EEBDF7DE4F8D1E3DFA5D126C4D822DFEC49F41E05ABCC7DA1616141700FDAE7E17F9A47C52DC8B37712F4E3571BAF679DC9A167557A7983B74F2C9245947BFA6E9D706AF3DF6D863FBDA532DDF7FFFFD7D5AA38BCFAB3DF5727C1F7F95829A3163C683E79D775ED29FCE3CF3CCBBD340996547A4D911893FF16710D8CF8505C50540BFABDF453E299F14F79AB817A79A385DFBFC6D758BBA6B52CC954FEAD734FDDA80575757775E5E4C9D356B56BFD4E8E2736B56E99EE7AF52404F3FFDF466E3C68D4B1E7EF8E17E2DE8A69FFF9FD1A3472FA9BDC8BA1D91664724FEC49F41603F15160C0601FDAE7E17F9E480CB2707DB785ADC6BC651E2549C0E8A7CB2BB45DDB529E6CA27F56B9ABC73C01A3D7AF426757575CFE5C5D4BE5E9D5BBB4AB7A6A0FB5C7C2F7F9D82F9D39FFE74D49429539222D87FFFFD17A681F2E981F07B4BBF67356DC3ED8824D8E24F33C0EB7E4CF6C160AB270B0B0683C0509F7CD3EF0E62F2C9C1954F3EF4D043EFBCEFBEFB6EB9E1861B9E3BF2C8238F1F3E7CF8FAA25CDC1B4789534D9C16681CBFAAA26E4F1473E593FA354DDE3920E33F7D7EF7BC90DAD0D0D0AF35BAF8FC9AA2EEEEFE8205D3DCDCFCF773CF3DB71005DD534E39E5A634487E3840FE23E641BDD2FF907644126CF1A70D91826EB762B20F06593D5D583018040613FD2EF2C941964FA6C3E8F5EEB8E38EE9CB972F7F3E1F57A7DBFDFBECB3CF7E70BFFDF6FBB44817F7C651E25413A7051AC77755D45D7758CF1573E593FA354DDE39E0E23F7DBC39DFEE57BFFA55BFD6E8E2F36BBE73B3BF60C11C75D4518F5E7FFDF58528E8CE9B37EFE6912347CE1E60FF1157FA1FD28E48822DFEB42156D0EDEE80B0B70657BD51583018040603FD2EF2C941964FDE73CF3DDB2E59B2A4CB6B272D5CB8F05FD3A64D3B77C488111B8978716F1C254E35715A90717C6745DDDB87F56C31573EA95FD3E49D032AFE478D1A55C99FBFEEBAEBFAB546179F9F7F97F85EFE82053379F2E4650B162C284441F7F6DB6F8F532E5F3B40FF2376FA1FD28E48822DFEB4215AD05D5992DE9B83AADE2A2C180C0203997E17F9E420CA2753AFB9EBAEBBFEFCFCF3CFAF728CFD422A7DCDD2C6C6C67D45BDB8378E12A79A382DC838BEB3A26E4F1773E593FA354DDE3960E23FFDF7BEFCF1FEAED5C5E7D77CC7FBFC050B66DCB8712F3CFEF8E38528E83EF6D8634BD320797080FF476CF71FD28E48822DFEB4215ED0ED98A47467309514A0190C0283857E17F9E4206A575E7965F2D4534F2D5BDDB1F6134F3CF1AF534E39E5FA112346BC53DC8B7BE32871AA89D35E18C7AFAE38CD72C795B9B7B73EDE1FF930FA354DDED99FF1FF4C7EBFBF6B75F1F9352B749FF6172C98BDF7DE3BF9F7BFFF5D88826EFA3D9EEE46800FA8D6DF3BA2679E7926EB7CE3DFFEF8FCA79F7E3A3AFEC2EC88065B7CF566FCC5DFEDFEFBEFCF6EDF7BEFBD2BFD3BC6913B0F3CF0C02ADF73D1A245C96DB7DDD6ADCF8FF77BF8E1877B2D16962C5992FDDFE8EAF9471E7924993F7F7E767BE1C285C9934F3E992C5BB62CF9C73FFE912C5DBA54FCAD414B13B964C30D378C41DAC455EC9A8A5C5818D6FAFD6330F84A59045070AF6CEDAF067CBF3BD4F7A143753C1379D7E2C58BFB24F7ECCF1CB1BB2D7E9E9FFCE427C9A38F3EBADA63ED784DBC564C1723EE9F7DF6D9151EBBFBEEBB93871E7AA84FC75C0321EE8DA356DE86529CAE6A7EEB89279E58E1B3632E23E6A5CC37F5C9387E75AC6C85EEA9C37A7685AE7CD2FE7785D6B1FFB9E69A6B92E5CB97AFB0DD3DF7DCD3ABDF43DEA975D6FABB56179F5FF37DFE635AA5600E38E0807F1765856EDA49DD350856E816E65411D1C97FE52B5FC912A29D76DA29BBDF31B17DCF7BDEB3CA9617F5E2FCE95B6EB965A7EDC4134FECF43B6CBBEDB6C997BEF4A5E49FFFFCA723260758FCFDE637BF495EF39AD764B737D86083E4DC73CFED74BB18CCBDF9CD6F4E3EFAD18F26BFFEF5AFDBB5D881C736311177D9659725BBEDB65BF2C10F7E30BB1DEDFBDFFF7EF2BEF7BDAFAD9D75D6596D83C04D36D924F9AFFFFAAFEC3DB6D9669B76DB456B6E6ECEB6FDF18F7FBCC273B52D4F7022013AE18413DADACE3BEF9CACBBEEBAC9B1C71EDBEEF13BEFBC33DB3EBEFFEB5FFFFAECF6461B6D949C7DF6D9C9830F3E98FD7F8AFF0B8E2C5FB3981C66A518405FD3EF52D8F14C4C9ED5E66DEF7FFFFBB349AAFCF9FFFEEFFF4E66CC98D1ABB9671172C4D569E79D775EB2FFFEFB5F5CA9541E79E185179EEFC630FB3FE9EFE3B7DFFEF6B7FF9EFE5D2FB442B7FFE33E62EEAD6F7D6B72FEF9E7B77BFCBDEF7D6FF2C31FFEB04FC65C032DEEADD01D9A71DAB158BBE38E3B663117FFC63C66C7CF9F3C7972B2CE3AEB24A79D765AF6995124D9628B2D92CF7FFEF36DDFE3861B6E10A7BD378E5F9B62EEEDBD5CD4954FEAD7DADA05175C90BCEC652F6B2BA4461F147177D14517B5DBEEEF7FFF7BD6A7C4F3D1AF44DF56DBA64D9BD6969B8D1F3FBEAD1D70C0019DCE4FC60131F24EF1DF55FCC74A582B74E996C30E3BECE9A25C43F7D65B6FBD6E005F43B75017738F24F9B39FFD6CF28E77BC239933674EF2F6B7BF3DBB1F47FEE4DBDC75D75DD90EE088238E4866CE9CB9423BFCF0C3B3E763BBFCA8A05FFDEA57C9E9A79FDEAEBDE52D6F498E3BEEB84EBFC75FFFFAD7E495AF7C653269D22405DD01127FF951B8DD29E8C6D1AF51B48F3879E73BDF99B588B9B8BFFEFAEB67C94A6C77E69967763A79BBCF3EFB64711945D9B83F7BF6EC6C122FDEF3939FFC64F2C52F7E31D975D75DB3D79F7AEAA9592C8D1D3B36BB9D272E13274ECC0ABF31E0AB6DDFFDEE77B3F7CC8FC68DEF1FDFE9CB5FFE72972DB6BFF0C20BB3EF1D83C18D37DE382997CB0ABA3D18937D3098722D4700FD2E03643C73C9259724AF7AD5AB92E9D3A76793F91147318E89D510D1B6DA6AAB64EAD4A96D676DE98DDCB30839E29AE493A3468DDA23FD9DA5C3BB250F7735BE7EFEF9E76F9C366DDAB9E9DFF581D85ED41723EE63BCF5ED6F7F3B8BBB18D7444C45DB6CB3CDB2F8CEEFC7CA1871AFA03B94E334FF2EF7DD775FF2894F7C225B4C103F731469E37EED6ADC58B010F3059B6FBE79561C897FE3A0A078AF982F887F63C142A95412A7FD3B8EEFAC981BD7CC5DB793C77BAAA82B9FD4AFB53BF0248AB3EF7EF7BBB3A26CDCDE7AEBAD93B7BDED6DD9EDDA33101C7AE8A1C9C73FFEF1ECF6D5575F9D1D64182DCE761A31FAF39FFF3C7BEE97BFFC65F2A94F7D2AEBEBF6D8638F6C6153CC67467137F69DF17C6C1FAB82E59DE2BFABF8770D5DBAED88238EB8FFFAEBAF2F4441B7A5A5A53C72E4C8D903EC3FE2CA929D7E29E8C60E288EDE89A4353F3544FC478C9DD51BDFF8C6B6231DF3826E9C02218A671D5B9E48E705DDFC68CCCE92EFAE0ABAD17EFAD39F661335DD39ED8E8160FFC6DF8D37DE98C54E14413B2BE8C6113AF1FC2DB7DC92155E6340F4A637BD2979C52B5E916CB7DD7659C2317CF8F064D34D375DE1C8B648428E3EFAE8EC1426B16D0C0A6380B8D75E7B253FFAD18FB2F78D53271D7FFCF1D9E7C6F67FF8C31FB2F78ACF89E42A622DB68BDBF9CF1605DD612B59F1931774E3FBC4AA8F7C82308EC41BD67A045EFED8873FFCE1E48A2BAEC82615E3678E23F122E623693AE38C33B26DE23531B118AB866FBEF9661311AB19937D30A8EAADC282412030D0E97729DC78260ABA3149B5E79E7BC6D1FF6D93FA1DF3B9830F3EB8D772CF22E4886B9A4F8E183162A3F47777729AB73FF99FFFFCE7D99AA1F5D3D75D77DDE9E9730FA47FDB93623B115F9CB88F03A5A358F5FBDFFF3E99376F5E7656AD68AF7EF5ABB3B8CAEFC744AEB81FF205DD211DA751548EF88B988BD5BCF9D9E3A2C0FB810F7C203BAB57535353F6F9279D7452566C8E79A71D76D8215B2117FFC6FBC79C40ED5C9838EDB7717C57C5DC7556F2FCDA1675E593FAB5762D8AA0115B7160481C3898B798331F5653248DB35C461FF3BBDFFD2E3B80E4B7BFFD6DF6F8B5D75E9BF56B71C048ED299AE360957C0E75DF7DF7CD0E6889D7BDFCE52F4FBEF6B5AFB51574E59DE2BFABF81F356A5425DF2EE2B03FC5E7D7ACD0ADF80B164CFA9FFF8228D414C1B1C71E7B5E1A283F1C20FF11BB95ECF47541F7C0030FCC3AF548B2DFF08637B4DB3945721D3B9778BEB1B1B1ADA01BA74FE86C856EECB486B51674E368C7889358911B4716D5B638A54E4CC2C4F3713EFF8EDF294EA513EFD3D0D0A0A05BF0F88B5363478CFCE94F7FEAB4A0FBC73FFE311B08E5A7C28B23C462703761C28476936EDFFBDEF7B25393E4C9CD1D77DC910DA822A189F7896D4E39E5946CC016ED431FFA5016BBF9299423AEA64C99920DDAE2678855B971C45C0CFCE200814888E2142979413756895F7AE9A5C955575DD5AEC50AF1389AEEFFFEEFFFDA4E55326C25C5DF78EFFC77D1F1B426F1FCE73EF7B9ECDF384061DCB871D9CF652262F562B20F0657BD5158300804060BFD2E851ACF7456D08D2242ACD2CDCF1614078EC6A9367B2BF72C428EB8B6F9E4C891233F555F5F7F6BEAA1C71F7FFCB2F4F71313427F8BC7457AF1E23E0A4FB18230C63CDD3995ADB81F92055D719A6E3B66CC98ECF9287EC41C40EC2FF216D774CD0B30071D7450DB2AE158CCF03FFFF33FD9F651CC8D9F21560EC7FC96F9A67E1DC7AFAA98BBB2EDD6B4A82B9FD4AF7559D08D79EE8E97251C5653D0FDCE77BE93DDFFC8473E92EDF7E23221B1AF8BF9D1E807D75B6FBD6CDE320E3E89BE27F2D6384B40A552C90E4E8C8552A3468DCAE655A3F03AACB5A02BEF14FF2BD9A6392FA2C61952FB537C7E4D11BAD95FB060D2CE67C7C99327BF50807AEEBF478F1E7D731A249F1E4CBFDFBE2EE846121D45D738C2274E25D3B1C5E3B182370A5D7941F7A69B6ECAFE83C64E2A6F23468CC81E1FD65AD0FDCB5FFE929D3227AEA112FF46012D9E8B9592713F7668F16F5E64ABBDC87C24D0F94EAF76B5AF826E31E36F975D76C906449D157463601583A3782C8E847DDDEB5E97C5416C174785C5EA8938A5485C1B221E8FA3D96205783CD659921247CC468213071CC4A02E3F0A2E068F91C0449214D7CA8D09BEF85E710AA6386237066F79AC453CC7D16A5D254291F044BCE789501C49176725882386E3F9F8B9E27E1C9DD731697AED6B5F9B1DF010EF11D7B3B8FCF2CBB3D7C49172E2AFB093F63D5D58300804F4BBFADD21ADAF0BBAB1222B5653C541A3717DB3FC1ABABD957B162147EC897C72F8F0E1EBA73FDBE4745CF748FC1BF7456F71C7F17149A258DDB8DF7EFB65A7668C1613B37196ADFC7EC4A0B8378E1ACA711A0769476CC6E945E3A0F38E2D56ECC62AE298BB8A224A7CD728B2C425C7E260F458C91B67FDFA7FFFEFFF659F110596983313A77D9EAF75B798BBB2ED57B7A82B9FD4AFADB4A01BF39BD1C7E52DE6AD87D51474E37BE407A8C4B572E394CA71204ABE6024E64CA3801BFBCA934F3EB95D7F1607A7C42ADBB83E6E9CB5E090430E59A1A02BEFA4A3F477B97B5E448D4571FDA9BEBEFE859A82EEEEFE3A053375EAD475D3C1F373715DA2FEF4C0030F5C9106C8E2F83E76446BD7E2C2E9F9D18D9DB5FCC2EAB505DD28E28E1E3D3A3B75431C49142B236B0BBAB17D5C943D4E2911473C46812C9E8BA390E2A88D986C89A26FC7EF123BC4D8E9C5ED8F7DEC63D9648D826EB1E32F56674771BE634137928818A4FDF9CF7FCE1E9B3F7F7E56F88D98895335C7B525E2344B71F46DB4385D48C44C9C9E398EC69D356B5656A8CD5B1464F3D32AC5B528E208DA187045CB0F2C8855E551AC8DB889826E0CC06210981774E328B4486062B0164955DE2226E3144C91E8445CE631DCDDA3E0E29A14917CC5633128740DDD01555CE8C9C2824120A0DFD5EF9A58EB8382EEEEBBEFDE36911605DDB804473C16638FBCA0DB5BB9671172C49ECC2707DB787A308FE36312374E3B1B13C6F9E96AE376DE5A5A5AC4BD71D4908ED3D81F44D1388ABD2B6B7110508CFB77DA69A764D75D77ED349EBFFAD5AF263BEEB863DB7C8638EDB37C72758BB92B7B5D778BBAF249FD5A972DE607637E316F7156BFE83BF2FBB5AB5D639E3C169AC4429238702572D5FAFAFAB616B96A7EF681DA532E478137FAB3CF7CE633D9FC653E1F1FFB4D79275D49E36D93BABABAE7F2426A1CB4D41FE2736B8AB9CFC5F7F2D729A04993265D14477AF4A7638E39E6376990CCB2235AFB16097074EC71947BEC6CF21609723C1ECF7756D08D899328EC47A2DD5941374E7D16D740896DE3A8C9782EB68B626EEDD143B5897FECB8A2D816F723C18ED5BA7194A5826E71E32F0AFEF1B7FDC10F7ED0AEA01B1D794CB8C56999F36DF3235DBB6A471C7144DBB671A4ECE69B6F9E2543F13E918CE483B6783E4EA31447BDC5ED5B6FBD358BC558911BDBC4D16C9160C5D1C0175F7C715B41B7B36BAC75D6E288E23C698A23832306E348DE782E0AD771BFF628B8F3CF3F3FD97EFBEDB302767E5A938E4953EDEF41FC15AAB8D0538505834040BFABDF6558DF147463E23F0E2A1CD6BA42214E2D17078ED616747B33F7ECEF1C513E39F4C6F1F901D2718ADA38CD78C4685C7A262E611463ECDA31B3B817F743354EE3524F871D7658D6E2D24FF119713BE6B7629570DC8E4B30C5294FF3B37DEDBDF7DED92AB7D8774401378ABD71EDCB28D4E4DB89D33ECB27D7B498BBB2D7AFAAA82B9FD4AFADB4C5A5DC629F17FD4DB55ACD56BFFEFCE73FCF9E8B53287FEB5BDFCA6EFFE217BF688BBB583012796A1C1812B9692C3C89DBDFF8C637DA5D433756ECC6D903E27ADD71204C5C82302E8918B7A3DD7EFBEDF6BFAC545D5DDD797931350E7EEA0FF1B93505DDF3FC550A6AF4E8D1EF1A3366CCBF22D1E90F4F3CF1C43569803C1CDFC38EA8E70ABA8F3FFE78BBC7E3FEB09514746B93A4CE0ABA0F3DF4505B012D12EE61ADE7EDDF6CB3CDB29D51EDC5E0E300812802C6D194B5DF217644714467BCB7826E71E32F8E5A8D84A6B6A01BAB5EF3D8C95B1C311B2D56CD464213AFCB1F8B6BDEC660AF76D03667CE9CEC761468F3415B5CCF2612AA88A3484CE2F94F7FFAD3D9445E9C82241295E9D3A7275FFCE217B3EF112B70E328DC485CA2CF7AECB1C7B2442B2602E3F425713F6235E2330E2688FBB1DDDA5EA7A263D2B4C71E7B747A2083F8EBF7C9FC9E282C180402FA5DFD2E7D309E89DC2A563C449E181359C71C734C7600DFA9A79E9A3DDFB1A0DB5BB9677FE788F2C9A1378E8F49B298208EDB471E796416538F3EFA68763FC6D85FFFFAD7C5BDB817A7ADDB4781245E93FFBCB12A381616445C76FCCEF159B14238B65D7FFDF5B3B981B8966E9CFAD47C539FE793FB0E5BF3626EAEB3A2EE3EF249FDDA9AB4587D1BFD532C14897FE394ECD10745DF13972F8CDBD16FDC73CF3DD94293782CE64163FF16672288F788B9D128D2D6BE6F1C8C985FD736FAAF38D824E6BFA3FF8C330EC4ED68711D5EFB5F5626FD7B6E9F17536385785FAFD28DCF1B356A54DBE996E3FBF8AB14586363E339717A94FE907EF6D9699034D911F56C41F79BDFFC66ED1115D9A920867551D08D9D415C003E6F7124661C5D14CFC72996E37A24B103D972CB2DB3CE3C767EC35A4FB91CA7998895B7FFBFBD7B01B2ABAE0F072E8F2AA01544B04E112B288DC58A967690581DA3680B858A74389C3D09221A0151C8EE461E02A504860E0F11D8DD84470B96E2C08838541019FC6FF65E12B1415E02F29077082621101E2148122A9CFFF91E73334BD8BC36DCDD7BEE7E3E33DFD9DD7BEF3E38F9F2FB7E7FF77BCFB97139DC287031708BE63A5E01D918A435225ED519979C885717350A99816EEBE45FBC3AADF1CAB1680AA2F188CFA3D189F7B369DC178F8B8D59BC5A2C365FD1F0C4136F313C7DF4D147CBF7A58957B935DE5BA2B1698B8D545C3E3986AF8D4D5BE4E5673FFBD9F255B6F1FDF1D878C56FBCE236DEAB397E5EBCF7F32EBBEC5236409167F1FD8D4B8545C4ABDCE27D72E2318B162D2ABF3FF2332EED34F8BF2F7E4EB1DE94AF606B9C897CDB6DB7955FC799E9B1316CBC78E1D4534F2D733EEE8FBF3D5EF4D0B87C53BC322F7E573C0129FF5A6EB8B0B183059B40C0BA6BDD6584F6337169CE9D77DE39DF7DF7DDCB27D3E22D5AA2BF8A5E2C2ED319BD60A3DF6A66EF39DA3DA27E726CE57D3C511CFBE5C89338F331F65CF1E285344DCB4B2BC68B58637F7DCF3DF7C87B793FE6F3349EBF8AF7548FDF1DC3E218F8C615B8DEF39EF794EF4DD9384B78C18205E573585FF9CA57CA2B7DC5202686BBF1364CF17C46FCCCB83F9EAC96A723D64F0E1EC60E6798BB213F473F695D5B679C78E289E5D501E284A45887E28CDCF87D71C598B81265D4C4380969DAB469E55501A3378D752EAE1A106B4FD4C6786E34D6C3F83C22DE06EEA28B2E2AD798B85265AC4571824C449CEDDB380338A25157D55FD6A6A3A3E396C62C27AE563192E2F70D9A25DDE25FA3C52549B27DB1D0BC1CC3BB9174FBEDB7C7A5969F8EDFAF10BDB903DDC30F3FBC7C1F93461C76D8616B1CE8AEFE33A2B98EFBE2520F51E8EEBEFBEEF2558E71099B934E3AA9BC2F9E60699C951B85250A4A5C96394ECD8FC63C9AFAA1FEBEE79F7FBE1CCC35F3BD4B14A2E1E55F6CBCC68F1FBFCE88C7C5ABC2A29988C17D343F8D57CA466EC4C6EF9FFFF99FCB01FEE04D5B5C92249A9C688656BFACD2EA1103DBB80453BCA74EE461FC9EB82D9AA368B462B0BCFAFB60C4654D8E38E288557F436C20D7F4DFDA18FAC61389ABDFD7B8B44ABCE2389AB8F7BDEF7DE5DF1D9BD13DF6D86355FE375EA127FF5A6AB8B03183059B40C0BA6BDD6504F733F1FE8B7BEEB967D9B3C50B45A3CF8C3322E26A3F9153F12458E3C9FA66F79EA3D923EA27C756DE47EE449E44BEC6BE2AAE8E153975ECB1C7967BE9C8A75D77DDB53C2352DECBFBB19EA771E65B9C58102FEC8EEF993C7972F93BBFFFFDEF976FCB14CF7B350624F1A2F075450CA7E5E988F693317C3DE42DC31FE6AECFCFD14F5AD7D62BE28CD6783FDCF83C5E9C122FF668EC6362681A2733C573E431588DB35EE3B9F4461F9A2449F97EBBAB479C1C37F877FCF6B7BF2D9FC31C2AE28428F59775C9B26C7C4747C7AB8DC16AFCDB8F84F83D8386B9AFC6DFE15FA3028AE6E94B471C71C4B218B88D84A79F7E7A5691204F14F14585E8CD8B785F90386371F02590079FC9B874E9D2558F8B274C1A5F0F8E38CB3186FB430D65A3118F57CC479E8CD67BE12A44AD917F7166F75003FBA1722306AE8D5C8B5799C560365E00101FD7F4F31B6778473EAE9E9F6BFB9BE23D73D6F69846FEC759E243E57F346FF1B7C5E743FD7FB464C992216F977F2D315C18EE60C12610B0EE5A7719E17E327AAAA1DEFB2BFAACB86FF5BD48B37BCFD1EA11F593636F1F15EF0DBAB6FB07E7A9BC97F7F274CD35C4F34D6DD34F56E5F7D146CFA3C71AD7B834FC68AD1BEA2F4349D374C6E04B2FC7C0BF99E2E70FBED472FC7EFF0A153279F2E4538F3FFEF897E37FDA662A169CFB8B84BCAD4896131422A1C1967FF28F376973369CC1824D20807517FDA47E12792FEFE5A990A7A3D34FB6F2EFC1BA665D63441D7AE8A15B747474DCD518B0C65B0D346BA81B3FB7F87DAF0E3A3BF7AEF8FDFE152AE690430EB9FC98638E79A15967EA3EFDF4D337C530B748904B1422A110C93FF9C79BB849DBD0C1824D20807517FDA47E12792FEFE5A990A7A3D74FB6DACFC7BA26AC6BA3AAA3A363C7229E1C7CA6EE75D75DF7A6CEE8E2E70D3E3377E5EFDBD1D1AFA84993269D3479F2E417DFECF7D45DF99EB9F3DAFDCC5C854821927F4223342A9BB50D192CD804025877D14FEA2791F7F25E9E0A793ABAFD642BFC5CAC6BC2BAD652B22CFBF0E0A16EC459679D953FF9E4931B359F8BEF8F9F33F8E7C6EF89DFE7A8575CBCB7EDC1071FFCFC85175EB820AEE5BE315E78E1855F7577775F55FCCCA7DBF93D7315228548FE09F937AA9BC1F51D2CD804025877D14FEA2791F7F25E9E0A793AFAFDE468FD3CAC6BC2BAD6D2569EA97BD7E0E16B9CAD7BF1C517E7BFFBDDEF36683E178F8FEF5BEDACDC7CE5CF77666EBB28FE81B72BFE417BBEFCE52F2FB9ECB2CB1E7DE69967FE6F03F2E4FFE6CF9FFFCB534F3DF5CA9583DC9EF8790A915088E49FFCA3499BB7F5192CD804025877D14FEA2791F7F25E9E0A79DA1AFDE448FE1CAC6BC2BA5629F19EB6699ACEE8E8E8587D109B777575E5575C71457EC71D77E48F3EFA68FEECB3CF9643B9F8185FC7ED717F6767E71BBE377E5EFC5CEF99DBA6264E9CB873F18F7C7196654F1F76D8614F5C74D145BF9E3D7BF63D0F3EF8E0BCC58B17BF54E4C9D2A79F7EFAB1FBEEBBEFF6E27FF6FED34F3FFD9AE27BEE29BEE7A9F8BEF87E85482844F24FFE31CA9B389B4000EB2EFA49FD24F25EDECB53214FF59358D78475AD32B22C1BDFD1D171CB1083D9E1C42DF1F31CD5B16193830E3AE8EF8B7FF033D234BDAEF8C7BF75D0B5BCE3E3AD717BDC1F8F8BC72B440A804224FF8446A8053683368100D65DF493FA49E4BDBC97A7429EEA27B1AE09EB5A256559F6858E8E8E6B8A58B18143DC78FC35F1FD8E2228440A91FC13F2AF953783368100D65DF493FA49E4BDBC97A7429EEA27B1AE09EB5AE51D7AE8A1DB7474741C98A6696FF171A088C78B7879E5F0F6E5955F0FACBCFFC078BCA3060A914224FF84FC6BF5CDA04D20807517FDA47E12792FEFE5A990A7FA49AC6BC2BA06A0102944F24FC8BF16DC0CDA04025877D14FEA2791F7F25E9E0A79AA9FC4BA26AC6B000A914224FF84FC6BC1CDA04D20807517FDA47E12792FEFE5A990A7FA49AC6BC2BA06A0102944F24FC8BF16DC0CDA04025877D14FEA2791F7F25E9E0A79AA9FC4BA26AC6B000A914224FF84FC6BC1CDE031368100D65DF493FA49E4BDBC97A7AD112FBDF4527EEFBDF7961F37E67679AA9FC4BA26AC6B000A914224FF84FC6B93CD604747476E13083032C68D1BD7B9C5165B5877F593423F29EF85BC97A76B8C18CE167F72F971636E97A7EDBB8F7F8B612EEAAF750D40211206BAFEDDE5DFD8B272A00BC0C8ACB9F52449ACBBFA49A19F94F742DECB53035D36C6560E01EAAF750D40211206BA42FE8DADE182E30C3032EBED84587357C60447443F29F493F25EC87B796AA00BA8BFEA2F8042241422F927FF589F0183E30C3032EB6D7DD040B7EE88E827857E52DE0B792F4F0D7401F557FD055088844224FFE41FEB3360709C019ABFD60E3E3BD759BAFA49A19F94F742DECB53035D40FD557F011422A110C93FF9C77A0F191C6780E6AFB5F52106BACED2D54F0AFDA4BC17F25E9E1AE802EAAFFA0BA010098548FEC93FD63964709C019ABBCE0E7576AEB374F593423F29EF85BC97A706BA80FAABFE0228444221927FF28FF51A3438CE00CD5D67EB6B19E83A4B573F29F493F25EC87B796AA00BA8BFEA2F8042241422F927FF58EBA0C1710668DE1ABBB6B3739DA5AB9F14FA49792FE4BD3C35D005D45FF5174021120A91FC937FAC73D8E03803346F8DADAFC740D759BAFA49A19F94F742DECB53035D40FD557F011422A110C93FF9C71A870D8E33807517FDA47E12792FEFE5A981AE3C05EB9AB0AE0128440A91FC13F2CF600100EBAE7E52E827E5BD90F7F2D440579E82FAABFE0254DAC0C0C06BCB962D53045A208A7F870545215A2EFF84FC335800C0BA8B7E523F89BC97F7F2D440579E82754D58D7004AB367CF5EB068D12285A005E289279EF86151886E957F42FE192C0060DD453FA99F44DECB7B793A32F1D24B2F95C3D9F8B831B7CB53B0AE09EB1A40D3D46AB5FD6FBAE9A6250B172E5C5CA557182D5FBEBC9D5E51B470EEDCB9571645685E11FBCA3F21FF0C1600B0EE32B6FAC9050B16E827B18F92F7F254C853B0AEE93BAD6B006B168B5FBCA2A5881571EDF9568FFFFCCFFFCC274D9AB4EAEBCB2FBF3C8F27EAAAF0B7AF2156AC3CFEFBCABFFE5CC83F830500ACBB8CA57E72CE9C39F939E79C935F73CD35FA49ECA3E4BD3C15F214AC6BFA4EEB1A40F52549F28E8E8E8EF9699AFE7ED09374754FD4015561BD02B0EE42439EE7EF58B264C9B2C58B17E793274FFEB923020080BE1380CAEBE8E838379E942BE20F871E7AE816C5C7092BBF8E98E008011558C70C1600ACBB507AE491477E96AF54ABD59EC9B2EC20470500007D27009595A6E9EE31C86D0C708BAF2735CECE5D197547096875060B00D65D088F3FFEF8675E7DF5D5C6F36AF96BAFBDF6EAC9279FBC284992AD1D1D0000F49D0054CEB469D336EDE8E8B875D0F036CFB2ECCEC15F3B4B17A802830500EB2EE479BED9A2458B9ECE5713B74D9A34E942470800007D2700959365D9D1430C6F870A67E9022DCD6001C0BA0B0F3DF4D079F91A5C79E5952FA469BAA7A3040080BE1380CA489264878E8E8E25EB39D075962ED0D20C1600ACBB8C6D0B172EFCC0F2E5CB5F5DD3136B7FF8C31F5E9E3265CAFD13264CD8DCD1020040DF094025A469FAE30D18E63A4B176869060B00D65DC6B679F3E6DD9BAFC3FDF7DFFF549665C7395A0000E83B016879699AEEB781C35C67E9022DCD6001C0BACBD89524C96677DE79E78A753DB1F6DC73CFFDA2C8DD67E2F18E1A0000FA4E005A5A514C0E2BE2BFD234BDB1F87867114F3A4B17A8F8BA66B00060DD650C3BF9E493FF7DC58A15FFB796E7D55EECEEEEAE39530200007D27009515EFA77BF0C1078F4BD3F463071D74D0E78B8F933C510754680DB35E01587719C3E23DCAAEBAEAAAF96B7A56EDF6DB6FBFACC8DBBBBD97190000FA4E002A2949922D8B22F3F2EAB77BA20EA80AEB15807517BEFAD5AF7E72EEDCB9AFACFEA4DAABAFBEFAEB499326FD2E4DD33D1D250000F49D00545292243B7574743CBEFAED9EA803AAC27A0560DD8570D659675DFD5A61D0F36A7F88DB8A9CBDC0D1010040DF0940651545E69345CC19E2764FD4015559C7AC5700D65D8817AB6EDDDFDFBFB4F1ACDAC2850B7F58E4EBEFE276470700007D27009595A6E9BF14C5E69AD56FF7441D5015D62B00EB2E347476761EF2FCF3CFBFB278F1E2FC6B5FFBDA6FB22C3BC851010040DF0940A51585E69B435D0AC21375405558AF00ACBB30D845175D74C739E79C9317B97A83A3010080BE1380CA2B8ACD69699AFEDB10B77BA20EA8CA3A66BD02B0EEC22A4992EC14791A1F1D0D0000F49D00545E5170FEA388C387B8DD13754055D631EB15807517E4290000FA4E00DA539AA6D71545E78B0A11A07106C0BA8B3C0500007D2700AD57706E9D3871E21E0A11A07106C0BA8B3C0500007D2700AD5770E62549F27E8508D0385365799EBFF5B1C71EFBD19C39735E191818C8FBFBFBC5084771DC5F9B3D7BF6825AADB6BF8CB4EE823C050040DF09006F5EC1599124C95B152240E34C953DF6D86357CF9E3D3B5FB46851BE6CD9B27CC58A156284238E7B1CFF9B6EBA69497F7FFFBEB2D2BA0BF21400007D27006CA42449B62D0ACE730A11A071A6EAE2CCDC18261AAC8E7E2C5CB870717F7FFFADB2D2BA0BF21400007D27006CA42CCB3E52149CFB152240E34CD5C565969D99DB3A67EAF6F7F72F9795D65D90A70000E83B0160E38BCD5E5996D5142240E34CD5C57BB81AA6B64EC4BF87ACB4EE823C050040DF09001B294DD34945C1B942210234CE54DDFA0E745F7A6161FED86DFF95DF37F3B432E2F3B8CD10D64017EB2EF2140000F49D00B49C2CCBBE5DC4F7142240E34CD5ADCF4077E9F3F3F37B7F7E727EF7CF8E7D5DC46D719F41AC812ED65DE4290000E83B0168B562F3DD344D8F5588008D3355B73E03DD27EFBBEE0DC3DC46FCEEBE9F1AC41AE862DD459E020080BE1380962B363F28E2CB0A11A071A6EAD667A0FB40FDAC350E74E33E8358035DACBBC8530000D07702D052B22CEB2FE20B0A11A071A6EAD667A07B6FFFB4350E74E33E8358035DACBBC8530000D07702D06AC5E63793264DFAA84204689CA93A035D035DACBB204F0100D07702D08EC5E6992449B65788008D3355B73E03DDFB669EB6C6816EDC67106BA08B7517790A0000FA4E005AC6E1871FFE2745B179A5F874138508D0385375EB33D07DF897D3D738D08DFB0C620D74B1EE224F010040DF0940CB48926487A2D8CC5788008D33ED607D06BACFCEBF27BFF7FF9DF2C6CB2D17B7C57D06B106BA587791A70000A0EF04A0950ACDDF1571874204689C6907EB33D08D78FCF6CBDF30D08DDB0C610D74B1EE224F010040DF09404B49D374BFA2D85CAF10011A67DAC17A0D74972FCF1FFEDF0BDF78B9E5E2B6B8CF20D64017EB2EF2140000F49D00B48C2CCBBE5E149B4B142240E34C3B58D74077E9F3F3F3877ED9B7C6F7D08DFBE23186B106BA587791A70000A0EF04A0550ACDBF665976BA4204689C69076B1CE82E5F9E2F7CB896FFE6C613D738CC6D443C261EEB6C5D035DACBBC8530000D07702D00A85667A9AA647294480C6997630D440775D67E53A5BD74017EB2EF2140000F49D00B4AC344D7F5C149B03152240E34C3B186AA0BB3E67E5AEED6C5D8359035DACBBC8530000D07702309A85E6E62CCB3EA510011A67DAC15003DDE10E731B61306BA08B7517790A0000FA4E0046B3D03C9224C987142240E34C3B58E37BE80A035DACBBC8530000D0770250D142F3529224EF5088008D33EDC040D74017EB2EC8530000F49D00B48D18E4C64057210234CEB40B035D035DACBB204F0100D07702D036E252CB71C9658508D038D32E0C740D74B1EE823C050040DF09403B15994F1771B34204689C691706BA06BA5877419E0200A0EF04A06DA4699A1485E66A8508D038D32E0C740D74B1EE823C050040DF0940DBC8B2ECE8A2D0F4294480C6997661A06BA08B7517E4290000FA4E00DAA9C8FC7B9AA627294480C6997661A06BA08B7517E4290000FA4E00DAA9C85C5AC4648508D038D32E0C740D74B1EE823C050040DF0940DB48D3F46745A1D957210234CEB40B035D035DACBB204F0100D07702D04E45E68E891327FEAD4204689C691706BA06BA5877419E0200A0EF04A09D8ACCFC2449765088008D33EDC240D74017EB2EC8530000F49D00B48569D3A66D5A149957264C98B0B94204689C691706BA06BA5877419E0200A0EF04A02D2449B27D51649E5188008D33EDC440D74017EB2EC8530000F49D00B4852CCB762B8ACC6F142240E34C45FE7DEB454C58D7E30C740D74B1EE823C050040DF09405B48D3F41FB22CEB5788008D3355F9F75D196B1DEC1AE81AE862DD05790A0080BE1380B690A6E9214591B95C210234CE54E5DF77B51872B06BA06BA08B7517E4290000FA4E00DA429665C71571B64204689CA9CABFEF1AE275835D035D035DACBB204F0100D07702D02E05E6DC344DA72A4480C699AAFCFBAE23CAC1AE81AE812ED65D90A70000E83B01689702736511131522A09D1A67219A3DD05DB264C91B6E5BB46851FEC8238F0CF9F8279F7CF2755F3FF1C413F90B2FBC30E463172C58903FF0C0031BF4F7C4EF9E3367CE1AEF7FE69967F2FBEEBBAFFC7CEEDCB9E5EF5EB66C59FEDBDFFE365FBA7469D307BA72B2FD43F5C1136B0000A0EF04A049B22CAB15F139850880AA6C8C46FB92CB3104DD6EBBEDF2EBAEBBAEFC7AC68C19F917BFF8C5BCA7A727DF7DF7DDDFF0F8DFFFFEF7F94E3BED944F9D3AB5FCFAFAEBAF8F9A9A7FE10B5F78DDE3162E5C98FFE217BFC8BFF4A52FE51FFDE847CBCF234E3EF9E47CD75D775D153FF8C10FCAE1EC19679CB12AF6DD77DF7CD34D37CD4F3FFDF4D7DDFEF0C30F973FFB8A2BAEC8B7DF7EFBF2F3ADB7DE3ABFEAAAABF2F9F3E7977FC7EDB7DFEE0C5D604CD40F470100007D2700552D30F72749B2AB4204405536466B1BE43634FB0CDD18CEBEF5AD6FCD67CE9C590E6B8B5F996FBEF9E6E5C72DB6D822FFF33FFFF3558FBDF0C20BCBDB7FFEF39FE78B172FCE77DC71C7FC2B5FF94AFEA77FFAA7E510B8F1B8CB2FBFBC7CDCEA71C82187E49FFAD4A7F2EF7EF7BBE5D73148BEFAEAABCBDFB7F7DE7BAF31E2B137DC7043FEE8A38FE6C71D775CBECD36DBE403030306BAC098AD1F8E020000FA4E00AA5A609E4B92645B850880AA6C8CD636C86D1889F7D0FDFEF7BF9FDF7CF3CDF9565B6D95FFE4273FC93B3B3BF371E3C69567D5362E7F1C97338E01EEBBDFFDEEFCA9A79E2A07B371F66DDC7EC925979467D59E75D659AB7E660C5E4F3BEDB47CF9F2E5F9E73EF7B9FCD24B2FCDBFF6B5AFE5071F7C707EF6D9679767D9C619BF311CFEC8473E923FFEF8E365C4EF7BCBCAA171E3B68F7DEC63F92F7FF9CBFCBCF3CECBDFF6B6B7E59B6CB249FEE10F7FB81CE8FEF77FFF77F998F89E69D3A6E5E3C78FCFEFB9E71E035DA0ADEB87A3000080BE1380CAD9679F7DDE561498E50A110015DA18AD7590DBD0CC816E0C4D4F39E5943262581AC3DABFFCCBBF2C87AD71766E7C1E71FEF9E79767E0167F4EFEAE77BDABBC5CF2DBDFFEF6BCAFAFAFFC39F7DE7B6F7EC001079443DD134F3C317FE8A187F2238E3822FFC0073E509E811BDF77D1451795C3DC88DD76DB2D3FF2C82357FD1D7119E5B70C71466F23BEF7BDEFBDEEB1832FB91CF77FFAD39F2E3FC6DFF48D6F7CA3FCFD06BA401BD70FEB100000FA4E00AA274992F71705669E420440BB69E64037CE9ADD6BAFBD565DD2F8DC73CF2D07B28323CEBABDFBEEBBF32CCBF2F7BCE73DE525988F39E698F27BE352C9F1734E3AE9A4F22CDC6BAEB9A63C9376CA9429430E66E3BD76E3E7FCD55FFD5539F01D3CA4DD76DB6DF33BEEB8A3FC3BE2B131088EAF3FF8C10FBE61A0FBCE77BEB3FC5D31D08DF7DA8DB38BE37BE277BBE432D0EEEC670000D0770250D5E2F289226E5588006837CDBEE4F2C2850BCB61E8C30F3F5C9E35FB962186B0F1B818AEC659BA8DF7D48DF7BF8DF7DE1D3CD06DFCCCB8CCF2C5175F9C5F70C105ABE2A73FFDE9AA4B2EFFEA57BF2ABF77DEBC791B74866EBC5F6E5C7E396EDB679F7DBC872E3056F73ED6210000F49D00544F9AA6FB1705E65A8508807633D203DD2449CAF7B68D38E18413560D7423A64F9FBE6AA01B97688ECB310F35D08DD86CB3CDCAF7DC8DF7BADD669B6DCA016C63A01BF7C7FBE636DE733706BA7129E75B6EB9A51C14C7DF73E59557965F0F3E43F7DA6BAFCD3FFFF9CFE7DB6DB7DDAA4B2EAF3ED07DE9A5970C7481B6663F030080BE13804ACAB2EC88A2C05CAC1001D06E9A3DD08DCB2917BF26BFEBAEBBCA816E9C39FB677FF667656CB5D5566B1CE87EFDEB5FCFF7DF7FFFB50E746FBCF1C6F2F3A38E3A6AD540F7339FF94C7EDC71C795EFD71BC3D88D7D0FDDD507BA071D74D0EB1E6FA00BB41BFB190000F49D0054B5B89C9265D9A90A1100EDA69903DD1884EEB0C30EE519B43BEFBC73F9BEB69D9D9DF9F1C71F5F9E9DFB9DEF7C273FF3CC33CBCB2D0F1EE83EF0C003F9965B6E595E82796D03DDB86DD2A449F9B871E3560D740F3CF0C0FCB39FFD6CFE8D6F7C237FF6D967CBC7CE993327EFEEEE2ECFAE8D33858BFFECFCB6DB6E2BBF3EE38C33F2993367968F7BEAA9A7F2534F3DB51CE8C6FDF13B3EFEF18F9783E5F89EF8FB76D96597557F97812ED0A67B1FEB100000FA4E002A595C2E4CD3F44885088076D3CC816E9CED1AC3D6175E78A1BC84725C1E79DB6DB7CDDFFEF6B7E75B6CB1C5AA98366DDAEB06BA31308D41EACB2FBFBC6AA0BBD75E7BBD61A0BBDF7EFB9583DBB8BCF2EA975C5E53CC9D3BB71CCEFEFAD7BF7EC37D975C724979DF01071C50BE27EFFBDEF7BEF2E70F0C0CE47BECB147795FFC7DF7DD779F812ED0CE7B1FEB100000FA4E00AA274DD3FF290ACC010A1100EDA6D9975C5EB468D17A3F76C99225E559B2AB7F5F9C49FBE28B2FBEEEB18F3CF248BE74E9D25567D62E58B0A07CBFDEF8B8B6DF11EFDD7BEBADB7AEFADEC111BF277E467CBE7CF9F221FFBEA16E37D005DA89FD0C0000FA4E00AA5A5CE66459365E2102A0DD347BA02B0C7481CAED7DAC430000E83B01A86471793C49929D142200DA8D81AE812E80FD0C0000FA4E00DAA1B82C4B92644B8508807663A06BA00B603F030080BE13804A4B9264EBA2B82C518800684706BA06BA00F6330000E83B01A8B42449C615C5E5418508807664A06BA00B603F030080BE1380AA1796095996CD528800684706BA06BA00F6330000E83B01A8B4344D8BDAD2F1438508807664A06BA00B603F030080BE13804ACBB2ACAB88F3152200DA9181AE812E80FD0C0000FA4E00AA5E58CE4CD3F43B0A1100EDC840D74017C07E0600007D2700552F2C971571A84204403B32D035D005B09F010040DF0940A5A5697A6396657B2B4400B423035D035D00FB190000F49D0054BDB0DC3571E2C48F2B4400B423035D035D00FB190000F49D0054BDB03C9524C97B152200DA9181AE812E80FD0C0000FA4E002A2B4992CD8AC2F24A7C548800684706BA06BA00F6330000E83B01A8AC383337CED0558800685706BA06BA00F6330000E83B01A87251F99B780F5D8508807665A06BA00B603F030080BE1380CA4AD3749F226E548800685706BA06BA00F6330000E83B01A8AC344DBF5A1496FF528800685706BA06BA00F6330000E83B01A8AC2CCB4E28E20C8508807665A06BA00B603F030080BE13802A17959E344D3B152200DA9581AE812E80FD0C0000FA4E00AA5C54AE2A22558800685706BA06BA00F6330000E83B01A8AC2CCB6615F1198508807665A06BA00B603F030080BE13802A179507932419A71001D0AE0C740D7401EC670000D0770250E5A2B2244992AD152200DA9581AE812E80FD0C0000FA4E002A2949922D8BA2F2B24204403B33D035D005B09F010040DF0940252549B25351541E5788006867030303AF2D5BB6CC30B505A2F87758D0DFDFBF5C5602A3C97E0600007D2700552A289F2C628E4204403B9B3D7BF682458B1619A8B6403CF1C4133FECEFEFBF555602A3BC0FB29F010040DF094035A469FA2F4551B9462102A09DD56AB5FD6FBAE9A6250B172E5CEC4CDD513B3377E1DCB973AFECEFEF9F57C4BEB212184DF6330000E83B01A88C2CCBBE5914950B142200DA5D0C11E3CCD02256C47BB88A118F152B8FBF612E30EAEC670000D0770250A582725A9AA6FFA61001000063681F643F030080BE1380CA1494FF28E270850800001843FB20FB190000F49D0054439AA6D71545E58B0A1100003056D8CF0000A0EF04A04A05E5D6891327EEA11001000063681F643F030080BE1380CA1494794992BC5F21020000C6D03EC87E0600007D27009529282B922479AB420400008CA17D90FD0C0000FA4E005A5F9224DB1605E53985080000184BEC670000D07702500959967DA42828F72B440000C058623F030080BE1380AA1493BDB22CAB29440000C018DB0BD9CF0000A0EF04A0F5A5693AA928285728440000C058623F030080BE13804AC8B2ECDB457C4F21020000C612FB190000F49D0054A5987C374DD363152200464AF2A31F6DF6ED73EADBADF38179BEC9D1BD37BCB3F1E53767D4DFE1E801F026EE85EC670000D07702508962F28322BEAC10013052BACF1DD8A1ABB77E5D7CDED5533BADABB776EDE0E8EEA9EF5DDED7579FD0DD53FB71E3FB3A7B07EEEC9A3E73FCF117F76F3D6D5A7D734712808DDC0BD9CF0000A0EF04A0F56559D65FC41714220046C2B133EAEFEDECABFD63575F6DD6949EFA5F77F5D606E2EBA9BDB58F35E2C80B7EF1AE786CF198CBBAFAEA5F8ACFA7F6D4FEA9AB77E0A1E2F1D717B1B4B8EFEF1D4D003686FD0C0000FA4E00AA524C7E3369D2A48F2A44008C84CEDEDA2145CCE9EAAD2DEEECAB5FD3DD5B9B39B5B7BE67D779F50F447C7BFAC05FC4E3E2F2CA5DBD03F7744EAFEFD7D9539B513CFEC1F231D3678E8F21B02309C09BB017B29F010040DF0940258AC93349926CAF10013052065F723906BA5DBD0357FFF16CDC227A6BCF94B7F7D53B3B7B6B0FC459B99DBD038715B7BFD8D957FB590C8263A05BC47C4712808DDC0BD9CF0000A0EF04A0B51D7EF8E17F521493578A4F375188001829E5A596FB6A8F96EF97DB5B9B1903DEC67DF13EB9F1B1FBDC1BB72D3E3FAAB8FFECF8BA78EC6DE5C7BEDAACC15F03C070D9CF0000A0EF04A0E52549B243514C867D86934204C086EAEAAB9DDCD55BFFDFB8EC725C56F98F67E8D62E2D3EF644149F3F158F3BBA77E083C5631676F70E9CD9DD57EB2E6EBF3BCEEA2D3ECE5BF971AEA309C0C6B09F010040DF0940150AC9DF1571874204C0481A7CC9E5F2F2C97DF5099DE7D7C6454CE999B54BDC3EA567E0935D3DF56F759E3F73B7A37B6F78E7EA67E41ED5376BA7E2F19F703401B09F010040DF0940DB4AD374BFA2985CAF100130923A7BFADF3FF83D74BB7B07F6983A63D68E8DE83AAFBE4DF78CFA87BAFAEAA7C499BC5D3D03E7C7A598E332CC8D9FD1D5533FA9B86F8AA30980FD0C0000FA4E00DA5696655F2F8AC9250A110023656AEFACBFE9EAADDD15C3DAF8BAABA7765AF1F54F0647676FFD88AEBE817DBA7AEB9362B8BBF2712714F7FDAA71B9E6E2F32BBF357DE6BB1D5100EC670000D07702D0CE85E45FB32C3B5D21020000C6E07EC87E0600007D27002D5F48A6A7697A94420400008CC1FD90FD0C0000FA4E005A5B9AA63F2E8AC9810A11000030D6D8CF0000A0EF04A00A85E4E62CCB3EA51001000063703F643F030080BE1380962F248F2449F221850800001883FB21FB190000F49D00B47C21792949927728440000C018DC0FD9CF0000A0EF04A075C5203706BA0A1100003016D9CF0000A0EF04A0A5C5A596E392CB0A1100003016D9CF0000A0EF04A0D58BC8A78BB879630B91104208218410425435EC0C01001881E7E2F59D000C4F9AA6495148AE76240000000000A0390C740118B62CCB8E2E0A499F23010000000000CD61A00BC0C614917F4FD3F424470200000000009AC34017808D2922971631D991000000000080E630D00560D8D234FD595148F675240000000000A0390C7401D8982272C7C48913FFD691000000000080E630D00560638AC8FC24497670240000000000A0390C7401189669D3A66D5A149157264C98B0B9A3010000000000CD61A00BC0B02449B27D51449E71240000000000A0790C740118962CCB762B8AC86F1C090000000000681E035D0086254DD37FC8B2ACDF91000000000080E631D0056058D2343DA42822973B120000000000D03C06BA000C4B9665C71571B623010000000000CD63A00BC0700BC8B9699A4E75240000000000A0790C7401186E01B9B288898E040000000000348F812E00C3926559AD88CF39120000000000D03C06BA000CB780DC9F24C9AE8E040000000000348F812E00C32D20CF2549B2AD23010000000000CD63A00BC006DB679F7DDE561490E58E0400000000003497812E001B2C4992F71705649E23010000000000CD65A00BC0708AC7278AB8D591000000000080E632D0056083A569BA7F5140AE7524000060F4253FFAD166DF3EA7BEDD3A1F98E79B1CDD7BC33B1B5F7E7346FD1D8E1E0000B43E035D0036589665471405E46247020000465FF7B9033B74F5D6AF8BCFBB7A6AA775F5D6AE1D1CDD3DF5BDCBFBFAEA13BA7B6A3F6E7C5F67EFC09D5DD3678E3FFEE2FEADA74DAB6FEE480200406B32D0056038C5E3942CCB4E7524000060741D3BA3FEDECEBEDA3F76F5D5664DE9A9FF75576F6D20BE9EDA5BFB58238EBCE017EF8AC7168FB9ACABAFFEA5F87C6A4FED9FBA7A071E2A1E7F7D114B8BFBFEDED1040080D664A00BC0708AC785699A1EE9480000C0E8EAECAD1D52C49CAEDEDAE2CEBEFA35DDBDB599537BEB7B769D57FF40C4B7A70FFC453C2E2EAFDCD53B704FE7F4FA7E9D3DB519C5E31F2C1F337DE6F818023B920000D0BA0C7401D860699AFE4F51400E7024000060F40DBEE4720C74BB7A07AEFEE3D9B845F4D69E296FEFAB7776F6D61E88B3723B7B070E2B6E7FB1B3AFF6B31804C740B788F98E240000B426035D0086533CE6645936DE91000080D1575E6AB9AFF668F97EB9BDB59931E06DDC17EF931B1FBBCFBD71DBE2F3A38AFBCF8EAF8BC7DE567EECABCD1AFC350000D07A0C7401184EF1783C49929D1C090000185D5D7DB593BB7AEBFF1B975D8ECB2AFFF10CDDDAA5C5C79E88E2F3A7E27147F70E7CB078CCC2EEDE8133BBFB6ADDC5ED77C759BDC5C7792B3FCE75340100A03519E802309CE2B12C49922D1D090000187D832FB95C5E3EB9AF3EA1F3FCDAB888293DB37689DBA7F40C7CB2ABA7FEADCEF367EE7674EF0DEF5CFD8CDCA3FA66ED543CFE138E260000B41E035D00364892245B17C5638923010000ADA1B3A7FFFD83DF43B7BB77608FA93366EDD888AEF3EADB74CFA87FA8ABAF7E4A9CC9DBD533707E5C8A392EC3DCF8195D3DF5938AFBA6389A0000D07A0C7401D82049928C2B8AC7838E0400008CBEA9BDB3FEA6ABB776570C6BE3EBAE9EDA69C5D73F191C9DBDF523BAFA06F6E9EAAD4F8AE1EECAC79D50DCF7ABC6E59A8BCFAFFCD6F499EF76440100A0F518E802B0A18563429665B31C090000000000683E035D0036489AA645EDE8F8A123010000000000CD67A00BC006C9B2ACAB88F31D090000000000683E035D0036B4709C99A6E9771C090000000000683E035D0036B4705C56C4A18E040000000000349F812E001B244DD31BB32CDBDB91000000000080E633D00560430BC75D13274EFCB823010000000000CD67A00BC086168EA7922479AF23010000000000CD67A00BC07A9B366DDAA6513884104208218410420821841042083172614201C0060D751D050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C6BAFF0FC6E57D9A0AC9FE2D0000000049454E44AE426082, 1); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('1bc2071a-1c4e-11ec-94ee-5ef70686b817', 1, 'flowLeave.flowLeave.png', '1a075ec8-1c4e-11ec-94ee-5ef70686b817', 0x89504E470D0A1A0A0000000D49484452000002EC000001AE0806000000CB5853060000264E4944415478DAEDDD0B9C54E57D37708D36CDDB98A889E99B3635D126692ECDA579DB246ADA4AD3A44D344D6CEB822BEA0BA251A3B2BB08F2E63534604D52125ADD5950FC3469BC2434684B13BC44033B2318EF888A4A2A5E4004969B229008A8CBE9F33FEE2103EE220BBBECECF2FD7E3EFFCFEECC9C9D59CEFE39CF6F9E79E6CC7EFB010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F42375D75D77C005932A87BDE68659B6FFF9A59BDF5C5CFCCA94CA41F61E0000F4B2A67F697D4763A93233BE6F6C2E5FDC582AFFA4BA9A9A2B9FCB6F6BA90C6A6A2EFF47F1730DA5D6F98D93671F3DF6CA59078F1F5F39D09E0400801E36664AE5ED0D2DE5BF6E6C29CF19D95CF9500AE8AD717954A9FCD1A2CEB9FCF6435F09ECE5AB52683F21BE1FD55C3EAEB1D4BA286D7F63AA8DE9B64FD99B0000D0C31A4AE5D352DD9542F7DA8696CA8CA65279F6A852E5A8C64B2B47445D30B9F55DB15D2C7F49017D41C3E4CA171A9ACB53D2F68FE5DB4C9E7D74847C7B1200007A49F5929808EC29985FFFCA6C7AAA52794D7E7D4BA52105FB5FC4AC7A43A9F5CC74FD868696F24D11F423B0A75A6E4F0200402FC897C2B4949FCCD7ABA7C01E01BEB82DD6A9BF12EA6F794BFAFEBC74FBB7E372DAF6BEFC6B4B794EF5650000A007A5C03DAEB154B93396C5C4B2975766D8CBDF4B5F9BA3D2F72B63BBF34BADEF4EDBB435955AFFA9A9A5DC94AE7F2866E5D3D7A51D5F97D89B0000D00BB63B4B4C2C6F69A90C6AB8ACFCBEA891CD73DE1BD78F6C6E3DA6B1B9726EC365B33F12A776DC7146FDBC963947A6ED3F696F0200400F6B689EF5CEEA35EC4DA5D64F8C9A32E7F0A21A2FAD1CD234A5F29E14E4BF9EBF41B5B9F5B2582A13CB648AFB4861FEA274DB487B1300007AD0A8D29C8F3596CA0F46187F2578E7E761FF717535942A6735B6B47E3E85FAA111DE3BB6FB6ABAED9E62394DFA7EDAB99367BFD51E05000000000000000000000000000000000000000000000000800E279D7452A6545F96FF850000AF11D8ED05F41F0080C004FA0F00406042FF0100084CA0FF00000426F41F0080C02430A1FF00000426D07F00000213FA0F00406002FD07002030A1FF000004268109FD0700203081FE03001098D07F00000213F480458B167D79D2A449595D5DDD91F6060080C04E0DC9B2ECA0F5EBD76F5ABB766D3662C4885BED110000819D1AF2C4134FDC94752897CB6BEAEBEB07DB2B0000023B3560F1E2C5C7B6B7B717793DDBBA756BFBB871E356D5D5D51D6CEF000008ECF4A194CF0F58B56AD5EA6C0771DDD0A143AFB08700000476FAD0A2458B2ECDBA306DDAB4E7870C197294BD0400ECCBE1BC1201FD35AA624FD11BDADADA8ED8BC79737B5781FDE5975F7E61E4C8910B070D1A74A0BD0500ECAB817DD02E04F641F614BD61E9D2A58F64AF61E1C2852BEBEBEB2FB4B700807D39B457CCAEB3B7D5D5D51D307FFEFC2DAF15D89F7BEEB9DB531FAE89EDED3500605F0DEC83CCAED317C68D1BF78D2D5BB6BCB493BCBEA1A9A9A96C861D0010DA3B9F6537BB4EAF8AB5E9D3A74F5FDE555A9F376FDE55A90F1FB2861D0010D83B9F651F64CFD0DB860F1F7ECC92254B5EDC31ACB7B7B73F3074E8D065CE120300F0EBD05E31BB4E5F983871E2F55B93EA13C4C475A90F2FB77700007E1DD807995DA72FC4279ACE9A356B6391D6DBDADA7E947A70994F3A0500787568AFF8E024FA424343C369EBD6AD7B71EDDAB5D9E9A79FFE707D7DFD607B0500E0D5817D90C04E5F993A75EAFD93264D8A57786EB63700801E9765D9EB9F7AEAA9EBEEBAEBAE175B5B5BB359B366F5CB8AC0DE5F7FF7B4DFB7CE9D3B7745B95CFE92FEEB7F7FBF193366E4FD175FF59FFE53FA0FA0C7A5C1EAFA74B0CC56AD5A956DDAB429DBB2658BDACB15FB3DF6FF6DB7DDB63E0D60C7EBBFFE572B56ACD07FFA4FE93F80DE11334B71B03470F47DB5B5B5AD4D03D6BDFA4FE93FFDA7FF00D8265E0636B3543B334D69C0DAACFF94FED37FFA0F806D620DA1C1A2762AFE1EFA4FE93FFDA7FF00E8F680F5CBE7DBB2A7EEFB7EF6E8EC8BF38AEFE33A838C014BFFE93FFDA7F41F401F0F581BD72DCF1EB9755CF6D04D63B6ABB82E6E33D018B0F49FFED37F4AFF01F4E180F5CCA3335F355815B5ECD11B0C34062CFDA7FFF49FD27F007D3960FDA232B1CB012B6E33D018B0F49FFED37F4AFF01F4E180F5C8ACF15D0E58719B81C680A5FFF49FFE53FA0FC08065C0D27FFA4FFFE93FFD0720B07756715684AE06ACB8CD4063C0D27FFA4FFF29FD07D08703D6E3774CEE72C08ADB0C34062CFDA7FFF49FD27F007D38603DBB7C41F6C8CFBEFEEA9783D375719B81C680A5FFF49FFE53FA0FA00F07ACA8C5F3AE79D58015D719640C58FA4FFFE93FA5FF00FA7AC0DABC397BFCCE2B5EFD7270BA2E6E33D018B0F49FFED37F4AFF01F4D180159FE4B7E88E962ED770C66D3EEDCF80A5FFF49FFE53FA0F606F0F589B37676D8F97B3876FF9FF5D0E5645C536B1ADD9260396FED37FFA4FE93F80BD3060BDD6AC92D9260396FED37FFA4FFFE93F803E1CB07665566967B34D061E0396FED37FFA4FE93F805E1CB07677B02ACAC063C0D27FFA4FFF29FD07D08B03963260E93FFDA7FF94FEAB4DC3860D3BE4A4934E3A71C89021A5F4B535D5E2542FA4CA3ABEC6E5D68EDB4F8CEDED356ACEFAF5EBDF3273E6CC8B274F9EFCD0840913D68E1D3B76D339E79CB3351AF9ECB3CF7E69F4E8D11B2EBAE8A2A5175F7CF10D63C68CF95CFA91FD05760385014BFFA9DAE8BFA62995F734FDCB9DFF4BFFE9BF7DA107BBA3BEBEFEB329CBCC48B5A5239CEF6AC5F633E2E7A544FADC3DF7DC73F665975DB6FCACB3CECA5248CFAEBFFEFAECFEFBEFCF9E7CF2C9ECD9679FCD427C8DCB717DDC7EE185176E1D3162C49614DC6F3DF9E4937F5F6057062CFDA7FF7AC657A6540E6A28957FBAB38A6D62DBF4FDC8A696D6FF17D5D8D2BAB0B154BE7ADBE5526BA3FED37F03B5077731A81F9D02F7DDDD0CE95DD5DD717F52237BDD82050B8EBBFCF2CB577CF9CB5FCEFEF33FFF335BB3664DD61DB17DFC5C0AEE2F3635355D971AF930814909ECFA4FFFED99732EBFFDD0C696F2034D2D733EDC59C56DB14D6C9BC2D1F14D2DE5A6148C1634B6544EC8AB547E3C5D3E276ED37FFA6FA0F6E0CE0C1B36EC0D43860C999242F6D61D8377636363F6C31FFE70A71393717B6CD74968DF1AF71BF72F45D2EB525F1E70F3CD37CF8CA07EF5D557671B376ECCF644FC7CDC4F6AE0174E39E59413042625B0EB3FFDB78761A954FE79637379546373E567DB57EBE8B82DB6696A2E0F4EC1E9C9A652F9A974DDD2F8BEA39615DF3735574ED27FFA6F20F6605752A83EBCBEBEFEA1EAA07DF2C92767575E7965B66CD9B26EE59BD83E7E2E7E7E87E0FE603C8E44496F86F543AEBDF6DA45E79E7B6EF6D4534F653D29EE2F3D09D83462C48809029312D8F59FFEDBB3B034664AE5ED0D9795DFB77DCDFEDF4558CA67372F9DF38174F9078DA5D6EF57575373EBB5E797667F50FFE9BF81DA839D4941FDFDA9965787EB89132766CF3CF3CC1EE59BF8F9B89F1D42FB33F1789225BD12D64BA5D2BAAF7DED6BD9BA75EBB2DE10F73B76ECD8174E3BEDB46B042625B0EB3FFDB7FB61E9C2893F7F53FABAA2B15499F94AA5EF2FAD1CB25D586A69FD7443A9757EAA49D595B6B93F6ED37FFA6FA0F6601733EBCBAB67D567CE9CD9A31927EE6F87D9F667CCB4D3D361FD806BAFBDF6F108EBF19FBB37C5FD8F1E3DFAF9A143875E243029815DFFE9BFDD0B4BE7976E7E730A49738BEBD37595E2B6EAB0D4D852BEBBA9549E505D699B7B0476FD37907BB05AAC29AF5E06337CF8F0EC81071EE8958C13F71BF75FBD3CC69A767A4CAC593FEFBCF37A6D66BDB399F633CE3863436AE42F0A4C4A60D77FFA6F77C35279E5AF97199457EE1896E20C1D8D2D954171468EFC6C1DA572F3C8E639EF4D41E9F30D2D9553F49FFE1BA83D58ADE30DA6DB66D67B2BAC5787F6EA99F6787C49933D961AEBF87883694FAF59DF9535EDA79C72CABABABABAB7094C4A60D77FFAAF7B61299FBD8CE50755B55F96ED1FCB0FF26D26B7FE9FB4DDEDE7975ADF1D339CA3BF73EB1B1B9A2B57344C9EFDD9C6E6D6CBD26D0F355C36FBE3FA4FFF0DC41E2C749CBAB1BD08CF37DC70C35EC938F13855B3ECED4EF9C81E8B5337C6595CFAC215575CB1223572B3C0A40476FDA7FF76CDD82B671D5CBD0CA16A39C2F1A91E89B014A1A9A954F94C53A97CECF8F19503D3F5B73494CA7745C88AAFA39ACBC78D2A953FDA3879F6D1FA4FFF0DC41E2C549F673DDE18BA37EDF046D4BB254E765B7C2852CCAE6FD8B0A14F027B3CEEA9A79EBA7E207EB892014B60D77F4AFF29FDD777060F1EFC99EAA5307B7A3698DD397B4CF5D298F87D244F764B7C82E98C1933B2BE74CD35D73C991AF94A03963260E93FFDA7FF94FEEBC1D9F51945588EF3A5F78578DCAA59F6199227DDB661C386B79E7DF6D9D9EAD5ABFB34B0A7C77F393D035D357EFCF8D719B094014BFFED8BFDE7F8A7F45FCF4AB9E2D01490B71461796FCFAE57CFB25705F62DF17B49A074CB8D37DE3861ECD8B1592D38E38C3396A4463EA69F3C63AFA41A64C012D8F59FDAD3FE5BB972E5914B972E7D64FEFCF95BFEE11FFEE19B83060D3A50FF29FDB7E77D986E3FB108CA8D8D8D7D9A71E2F1AB42FB891228DDD2D2D2F2F0F5D75F5F13817DEAD4A9F131BEFFD44F0E14C57FBA9D1E300C5802BBFE535DF55F7CF6C5A2458B2EDDBC79737BD56754BC347DFAF4E5C3870F3F46FF29FDB7677D98AE6F29B6FBC10F7ED0A719271EBFEA776E9140E996091326ACBDFFFEFB6B22B0CF9D3B77C190214366F6B3C0B4D30386014B60D77FAAB3FE5BBC78F1B1AB56ADEA722DE292254B5E9C3871E2F575757507EB3FA5FF76AF0FEBEBEBCBC5EDF3E6CDEBD38C138F5FFC2EF17B49A074CB85175EB8696F9F7BBD2B8F3DF6582C89B9AF9F06A64E0F18062C815DFFA9EAFE4BDEF4C4134FDCD4DEDEFE9AC7C4AD49FA998D4D4D4DFF57FF29FDD7FD3E4C5F9716D7F775D689C7AFFA1D974AA074CBD9679FBDF5B9E79EAB89C0FEECB3CF6E4C4DBCBC9F07A6ED0E18062C815DFFA9A2EEBAEBAE6CFDFAF59B76E353A15F9C3A75EAFD75757547EA3FB5AFF75F37FBF057C5E5BECE3AF1F85533EC1B2450BAE5D4534FCD5E7AE9A59A08ECE9F7D8B00BFF01FB55F5C580B569D3A66CF3E6CDDB5DB76CD9B26CD1A245AFDA36B6EBECFA9EAA38C77E1A206A66C01A68FDB5B7FB6FC58A15D92F7EF18B5DDA76E1C285792FEECAB6D19F71A6AADEFABBAF5AB52A0F2B5DDDBE66CD9AECD1471FCDBF5FB26449F6FCF3CFE7BFFB7FFFF77F671B376EECB17D3769D2A46CEDDAB5DD3E36C6CFC4CF3AFEF56DD5421FE9BFDDAFBECE3AF1F855BFCFCB1228DD72D65967BD542B33ECE960F7C4009861EFF39784070F1E9CD5D5D5E541F9FCF3CFCFCE3DF7DCEC939FFC64F6BBBFFBBBF9F75177DE7967BEED8D37DE981D70C001D971C71D977DF0831FCC2B6EFFC33FFCC36D972378C5B6B1FEEE3DEF794FA73565CA944E7F97638F3D36FBABBFFAABEC97BFFCA519F67EDC7F6D6D6DD9EDB7DF9E9D70C209D9873FFCE1FCFBA871E3C66DEB93A86BAFBD36DF3E4E61F65BBFF55BD937BFF9CD3CC07CF6B39F7D55C536B16DBC4C7CE8A187667FF0077F900783A38F3E7ABBFB8C6A6969C9B7FDCE77BEF3AADBAAAB0845F198DFFAD6B7B6D5F1C71F9FBDEE75AFCB2EB9E492EDAE7FFCF1C7F3ED7FF8C31F666F7BDBDBF2EF0F3EF8E06CFAF4E9D9F2E5CBA357F2BEEFA9FE8BCFBB38E38C337E562E97D76CDDBAB57D170E8B2FA77DFFA3D34F3FFDE1F477BDB91FCCB00FA82531B5DA47FB7AFF75A70F6326DB0C3B03C205175CB0A156D6B0A76038AF1FAF61AF99375DCD9D3B373BECB0C3B211234664718EFDBFFFFBBFCFDEFFFEF7E703497C7FE2892766F3E7CFCFB7FD9BBFF99B3C70C740F4B9CF7D2EFBCC673E936F13C16BF2E4C9F940536C1BB347F12EF7ABAEBA6ABB8A2702DFF8C6373AFD5DE2894104B73163C608ECFDB8FFAEB9E69ABC1776ACD34E3B2DFBD33FFDD33C48C7E5993367E683526CFFF5AF7F3D7BC31BDE90DD73CF3DDB859B388D6C6CFBD8638FE5B38FF1A42E9E50FEE55FFE65F6A52F7D29FFD9EF7DEF7B79DFC42730C7F745D8193D7A741EECA33FABEBAB5FFD6A7E9FF18A4E6C1767BE3AF0C003F39EEEAA62FB9B6FBE397BF2C927B30B2FBC303BE49043B2D6D6D65E0D5A45FFA5C17A707AB2B36A676FFA6B6F6F7F20DEF497FEAECB627BC7BFEED7CF7EF6B3FC6F187D575CD7D0D0905FF7D0430F6DBBBDA8DFF88DDFC87EE7777E276B6E6EAEE93EDAD7FBAF3B7D680D3B03C6D7BEF6B5676AE52C31B367CF6EED876789A9C9D39AC5AC78CC60C60CE7073EF0813CAC47788AEFFFE88FFE68DBCC66CCAE7FE52B5FC9037BCC7A46688A59D49831FFF6B7BFBD5D608F8AE0DF5970EB2AB047FDF33FFF73F6C637BE315FF620B0F7DFFE8B3072F1C517E7CBA83EFDE94FE741FAF4D34FCF4E39E594BC57A2C77EF5AB5F658F3CF248DE13D15F0F3EF8E0ABEEE789279ED816D8A33FDFF4A637E5F7FD5FFFF55FD95BDEF296EC7DEF7B5FF6CE77BE33DF26EE33BE2FFE1D11D83BEBBFA28AC07EEBADB7E6AF122D5EBC38AF58C610B7C7F5C5751FFDE847B33BEEB823BBF4D24BB3DFFCCDDFCCF6DF7FFFBCBF23685D7DF5D5F936F133E3C78FCF67FD172C58D0A3FD1767DF183A74E815D3A64D7BFEE5975F7EA1EA50B82185BBABD26DCBD2DFF6F21A3F4B4C4D9FD631FEDE5D05F6E8CDE2F6CF7FFEF3590AA7F9DFFA1DEF78477E5DF469ADF6D1BEDE7FDDE943678961C04807911B6AE53CEC975C72C98C7E741EF69AFCE09098F17CF39BDF9C5704A00F7DE84379FDF66FFF761E9A8BCB3123999EACE503C9A851A3F2C01EE1E84FFEE44FF201ED139FF8C4B68A60F5F4D34FE7B34D31A3FE6FFFF66FDB55CC48A5837B7E7BACDBDCF1778A2700F138F1A111027BFFECBF789FC359679D951D71C411F9DF39FE9E53A74ECDC37AD4473EF291EC9C73CEC9B72D027BF44C67F7551DD863663E7A2866DD63A94DFCBE31ABFEF18F7F3C0FF1F164EFF5AF7F7D76C30D376C0BECF18ACE9C3973B2BBEFBE7BBB8A5773A27FFFFDDFFF7DDBF2849D85FBB8EFE277DA712943DCFE677FF667F9D7F87F13AF54F5C47B3D3AEBBF2143861C95FECFA5E7D80B573EF7DC73B7A7FF8F11301E8AEBF5DFDE09ECD5B79F77DE79F975B1E4AB56FB685FEFBFEEF4A1F3B03360A481F2AFD3C0B8B516DE737AF2C9272FE82F9F74BAABF6F68015CB0F62008901226676628DF117BFF8C5ED2AEDE7FCE5E058FA12B3414560FFBBBFFBBB3C18C5128333CF3C735BDD7BEFBDD94F7FFAD3ECC8238FCC7EEFF77E2FFF1AA1291E23663FE372CC2CC5D7225815156F508C359F3150C53611D604F6FED77F23478EEC34ACC4AB32F5F5F5F92B3711E8BB1BD8E34D79975F7E79DEB3312B196BD5CF38E38CBC4F63A94DCCDCC72B43455F7DFFFBDFCF7BB6ABF01421A9787F4684A798B18F571063C942DC1E4F36E2F2BBDFFDEE5705AD78921B6B7CE33E628DF2CF7FFEF3FC6762F6B4B7FB2F3E5932EDC70BD3F16F4D7CED2F9F34D95F027BF4502C55898A27803B06F678552766D9FFFCCFFF3C5F0213CBAE8A37EED7621FE9BF6E85FA9AF9A4D3F4C468AB4F3A654F66D85F9706C82D718686BEB46CD9B23B5203B7C5EF2330ED594560890122DE741AB34511AA8B99D098ED89977C63BB58EA920ECCD905175C9007F618C862608A3307C5CFFFEDDFFE6D1E8E6EBAE9A67CFB9885FAD8C73E962F75281E2396B9C4AC41ACFD8C50BFE3EF1241FDA8A38ECABFFFE33FFEE37C265E60EF7FFD17E1E5CA2BAFCCC3755111A28B2531F14431FA67E9D2A5DD0AECB17D2CD18A7AFBDBDF9EF75BF44804F658D71E67A628027BCC4C46E8F9F18F7F9CCFA21715FD17AF1A45388A1E2C9E14EEEACC68AC338E650DC5D288BDB1867D67C763FDD7F3813D82781CE7A2E238B463608F801EE13BBE8FDBE3CDCFD521BCD6FA48FFEDBA934F3EF9D0942DB6144139968AF68578DCAAB0BE257E2F09946E1B3366CCAD3123D097FEF11FFF715A6AE22B05A69E0BECB13C25027BCC1815CB6422FC14813D2AD62217813DC2751C5462D6334276BCA12A5EDE2DCEF012670A89801FE12A6654E33162194384F5EA59A6A262362A1E2F02565C8E3015B3EDB17C4160EF7FFD17EF7738FCF0C3F399F098A98C505204F6B83DD6FAC63AE0EE04F6E2FD1631611033EA717FD1B371D6A25842106F0A2C027B2CF7DA59702A6AF8F0E1DB82569C7D26FA2DDE0C1BB74D9B362DBF5C3D33FA939FFC247FB375BC51BBABB37BF4D4598EF45FED2E8989BF711CF7E272BCE1BE3AB0D75A1FE9BF6ECFB2CF28C2724C3CF48578DCAAC03E43F264779F81FEFE8811235E8C376CF58575EBD6DD9B1A7875FC1E06AC9E0BEC11CC23BCC4A012CB15A2FEE22FFEA2CBC05E049E52A9B46D594DAC192EB65DB972E5B6D014616DBF8EF5996F7DEB5BF341ADFADCEFF1043096C0C4291DAB7FB718D06226B5B337231AB06A3FB0DF72CB2DDBD6F916813DCEF212EBCDA30F22A07437B01F73CC31F913C3787527C24DBC792FDEFC1CFD1333E8B1EC26C24E1C9F9E7DF6D9ECBBDFFD6EBE8421965BC5E5E8CBB8BF786218978B379EEEC9DAE31D83569C2AB5B327A5FA6FE004F6B82DCE977ED04107E567282AFAB316FB48FF754FDAEF9F29C2722C09DDDBB3ECF178F5F5F5DB96C3C4EF2379B2DB9A9A9AAE8B77B4F785F4D8D35313371BB07AA6FEF55FFF351F20E2C014213D5EA68D0129CEF011B3E65D05F678B35FAC7B8F99A2787361DC47CCA4C77AF772B99C0F44710AC8F83715A7438B25313100C6CC792C6188F31647C88A59F758D65084A7EA0F16F9D4A73E95CF42C5DA780356FF0AECD12FB164A558F31B813D4E131A4F04E3159A08CC3B0BECF1C133C529228BA52BF14A502C4988F745C4A9F1E24C1CEF7DEF7BF32777D153F158B174A6B88F0852EF7AD7BBF26DE2FEE2E7F7EB3873C78E9FEA988E2DF9AC669C273BB6B9EFBEFBF2CBF1FF61F6ECD9DB9E884E983021EFEFB83DFE9DF12A529C62B2986D8DC72A4EF5A7FFFA4F60DFD5D33A56DF1E7FE7B82E8E95B5DA47FA6FB766D9EF2E0273BC12B837C5E355CDAEDF2D71B247EAEAEADE366CD8B017F6F6794AE7CD9B174B6156C7E31BB07AEEE3A7239C1733A1F1A6C0F83ECEEAB15FC7DAF4CE027BBCF934CE8B1DA13CCECF1E813A96C044908FC12D3E842996CB5C74D145F9FD44C02A66D563808A812996CDC44B7F11EA5E78E1854E7FBF75EBD6E561AC581B6FC0EA3F81FD0B5FF8421ECC63F9CB8E4B628ADA59608F3734C76DC5FB1A8A8A401E4B6D626D7CBC22144FF6E2BAF874C678D258F473F52C7DDC573C21DDAFE3FCD911F6BBFADD8B50FFC0030FBCEAB698B12FFE5FC4D29B786375FC1BE35CDA7196A4A2D78B4FB0D47FFD27B0F774D54A1FE9BFEE4BE3E0D1296BB417C139FE467B433C4E55586F8FDF43E2648FA581F78434006E8A40B537AC5EBD7A4E6AE0A7537DD180D53B1501BAF844C93847765CAEBE3D668C62963C66D6231C151F135FDC1E01BEFA0D58C52CF9C30F3F9C07EFFE36E00A4CBB5F11928B4F128DD9C4E897E8A7A26F8A8A6DA23FAA974855F753CCC27776FFC5AB31316BBEE3AC7C57BF532C3788B375EC6C9BA2F7E30968671F0F1F33A5C5FF8BCE7EE778F37667D7EBBF7D2FB0D74A1FE9BFDD3364C89029D54B63E289576F8AFBAF5E0A138F2F69D263468C183161ECD8B12FC47FEEDE940E5C0BD37F98FB52337FD580A50C58FA4FFFE93FA5FF7AD3B061C3DE9082F38345808EF778F556688FFB4D8FD75E35BBFE603CBE94498F3AEDB4D3AE193D7AF4F3BD35D3BE7AF5EADB22ACA706FEAE014B19B0F49FFED37F4AFFED0D29771C9EEA99EA99F638FB4F4F8AFBAB9E59EF78BCC3A54B7AC5D0A1432F1A3162C4869E5ED3DEB1667DE9409F59376019B0F49FD27FFA4FFFD59E943FDE5F1DDA8B37A2EEE9D963E2E7777883691ED6E3F1EC757AFB99E8174F39E59475575C71C58A58B3B7279E7FFEF97B3ACE06B37A20AF59376019B0F49FD27FFA4FFFF58B99F607ABC375CCB6C74913E27D5CDDFCE0C7FCE7769855CF3AEEDFCC3A7BED99E86171CAC5534F3D75FD55575DF5E49A356B5EEA461FBFB47CF9F23B264C9830AD23A837C7FD19B094014BFFE93FFDA7F45F5F8A35E51D6F44DD3168678D8D8DF979F5E34DED7106AA78B37C88AF7139AE8FDB1B1A1A5EF5B3717F71BFD6ACD327E2438DE2934853E05E7DE699673E3D75EAD407E6CE9DBBE0B1C71E5BBA76EDDA5FA63EDEB87AF5EAA71E7DF4D179E9A030EB924B2E99917E6641FA9995F17303F143910C58062CFDA7F49FFED37FFD7E62F2E8EAF3B4EF61DDEDD48DD48AFD070F1EFCA9D490DF4ACF2067A6E6BCB76A2D587CBD37AE8FDB63BBD87E5FDE59062C0396FE53FA4FE9BF7E11DC3F9B32CC8C545BBA19D263FB19F1F3F62218B094014BFFE93FFDA7F45F2F1B366CD82129809F3864C89052FADA9A6A71AA173AC2F90B1D975B3B6E3F31B6B7D7C080A50C58FA4FFFE93FA5FF000C58062CFDA7F49FFED37F0002BB3260E93FFDA7FF94FE033060290396FED37FFA4F09EC00062C0396FE53FA4FFFE93F0003963260E93FFDA7FF94FE03306019B0F49FD27FFA4FFF0108ECCA80A5FFF49FFE53FA0FC080A50C58FA4FFFE93F25B00318B00C58FA4FE93FFDA7FF000C58CA80A5FFF49FFE53FA0FC08065C0D27F4AFFE93FFD0720B02B0396FED37FFA4FE93F0003963260E93FFDA7FF94C00E60C03260E93FA5FFF49FFE033060290396FED37FFA4FE93F000396014BFF29FDA7FFF41FC0BEA9B5B575EBA64D9B0C163550E9EFB0220D589BF59FD27FFA4FFF01B0CDDCB97357AC5AB5CA805103F5F4D34FFF280D58F7EA3FA5FFF49FFE03609B72B9FCA5DB6EBB6D7D5B5BDB5A334D7D36B3D4B664C9926969B05A9AEA78FDA7F49FFEEB4EAD58B142FF010C7471908C998D545B620D617FAB6BAEB9263BE9A493B2FEF8BB77D4968EFD7FBCFE9B9529FDA7FF76BDEEBAEBAE6CD2A449D98C1933F41F00B52B85F54A04767B02D897645976D0FAF5EB37AD5DBB361B3162C4ADF60800B51AD6074558EFA841F608B0AF78E289276ECA3A94CBE535F5F5F583ED15006A31B057AA027BC51E01F6058B172F3EB6BDBDBDC8EBD9D6AD5BDBC78D1BB7AAAEAEEE607B07805A0AEBD5B3EB66D9817D42CAE707AC5AB56A75B683B86EE8D0A157D84300D45260AF7412D8CDB20303DAA2458B2ECDBA306DDAB4E7870C197294BD04402D84F5CE66D7CDB203035A5B5BDB119B376F6EEF2AB0BFFCF2CB2F8C1C3972E1A041830EB4B700E8EBC05ED9496037CB0E0C484B972E7D247B0D0B172E5C595F5F7FA1BD05405F86F59DCDAE9B650706A4BABABA03E6CF9FBFE5B502FB73CF3D777B3A06AE89EDED3500FA2AB0577621B09B6507069C71E3C67D63CB962D2FED24AF6F686A6A2A9B6107A01643BC0F4E0206BC589B3E7DFAF4E55DA5F579F3E65D958E870F59C30E80C00ED047860F1F7ECC92254B5EDC31ACB7B7B73F3074E8D065CE120380C00ED0C7264E9C78FDD6A4FA0431715D3A165E6EEF0020B003F4B1F844D359B3666D2CD27A5B5BDB8FD27170994F3A05406007A8110D0D0DA7AD5BB7EEC5B56BD766A79F7EFAC3F5F5F583ED15000476801A3275EAD4FB274D9A1467C6BAD9DE00406007A83175757547C6F12FBEDA1B0008EC008E7F0060C00270FC03C08005E0F80700062C00C73F003060018E7F0060C062DF5377DD75075C30A972D86B6E9865FB9F5FBAF9CDC5C5AF4CA91C64EFE1F80700062C7A59D3BFB4BEA3B1549919DF3736972F6E2C957F525D4DCD95CFE5B7B55406353597FFA3F8B98652EBFCC6C9B38F1E7BE5AC83C78FAF1C684FE2F8078001CB80450F1B33A5F2F68696F25F37B694E78C6CAE7C2805F4D6B83CAA54FE6851E75C7EFBA1AF04F6F25529B49F10DF8F6A2E1FD7586A5D94B6BF31D5C674DBA7EC4D1CFF00306019B0E8610DA5F269A9EE4AA17B6D434B654653A93C7B54A97254E3A59523A22E98DCFAAED82E96BFA480BEA06172E50B0DCDE52969FBC7F26D26CF3E3A42BE3D89E31F0018B0E825D54B6222B0A7607EFD2BB3E9A94AE535F9F52D958614EC7F11B3EA0DA5D633D3F51B1A5ACA3745D08FC09E6AB93D89E31F00062C0316BD205F0AD3527E325FAF9E027B04F8E2B658A7FE4AA8BFE52DE9FBF3D2EDDF8ECB69DBFBF2AF2DE539D597C1F10F000316F4A014B8C735962A77C6B29858F6F2CA0C7BF97BE96B7354FA7E656C777EA9F5DD699BB6A652EB3F35B5949BD2F50FC5AC7CFABAB4E3EB127B13C73F000C58062C7AC176678989E52D2D95410D9795DF1735B279CE7BE3FA91CDADC7343657CE6DB86CF647E2D48E3BCEA89FD732E7C8B4FD27ED4D1CFF003060410F6B689EF5CEEA35EC4DA5D64F8C9A32E7F0A21A2FAD1CD234A5F29E14E4BF9EBF41B5B9F5B2582A13CB648AFB4861FEA274DB487B13C73F000C58D0834695E67CACB1547E30C2F82BC13B3F0FFB8FABABA15439ABB1A5F5F329D40F8DF0DEB1DD57D36DF714CB69D2F7D3CE9D3CFBADF6288E7F0018B0001CFF00C08005E0F80700062C00C73F000C58008E7F0060C00270FC03C080652F008E7F0060C00270FC0300031680E31F00036CC0524AA97DB58C0200000000000000000000000000000000000000000000000000000C58FF03917BBCBB083969330000000049454E44AE426082, 1); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('1d1dbf35-1c51-11ec-94ee-5ef70686b817', 1, 'flowSubmit.bpmn', '1d1dbf34-1c51-11ec-94ee-5ef70686b817', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A62706D6E323D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A64633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E222069643D226469616772616D5F666C6F775375626D697422207873693A736368656D614C6F636174696F6E3D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2042504D4E32302E787364223E0A20203C70726F636573732069643D22666C6F775375626D697422206E616D653D22E68AA5E99480E794B3E8AFB72220697345786563757461626C653D2274727565223E0A202020203C657874656E73696F6E456C656D656E74733E0A2020202020203C666C6F7761626C653A657865637574696F6E4C697374656E6572206576656E743D22656E642220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E557064617465466C6F775374617475734C697374656E6572223E3C2F666C6F7761626C653A657865637574696F6E4C697374656E65723E0A202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C73746172744576656E742069643D224576656E745F31376E32727739223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D2241637469766974795F30336B6A75727422206E616D653D22E68AA5E99480E58D95E5BD95E585A52220666C6F7761626C653A61737369676E65653D22247B7374617274557365724E616D657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934373637353034313130373936382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A66616C73652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383833353236373622206C6162656C3D22E68F90E4BAA42220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30306C647661672220736F757263655265663D224576656E745F31376E3272773922207461726765745265663D2241637469766974795F30336B6A757274223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3079777866777522206E616D653D22E983A8E997A8E9A286E5AFBCE5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22247B64657074506F73744C65616465727D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934373637353034313130373936382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550545F504F53545F4C45414445522671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E44657074506F73744C65616465724C697374656E6572223E3C2F666C6F7761626C653A7461736B4C697374656E65723E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383833373230303322206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383833373538363622206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E0A202020202020202020203C666C6F7761626C653A666F726D5661726961626C652069643D2231343430393637353831363733343539373132223E3C2F666C6F7761626C653A666F726D5661726961626C653E0A20202020202020203C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F307839647832742220736F757263655265663D2241637469766974795F30336B6A75727422207461726765745265663D2241637469766974795F30797778667775223E3C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D22476174657761795F3137397A676E70223E3C2F6578636C7573697665476174657761793E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3138703368716222206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F3079777866777522207461726765745265663D22476174657761795F3137397A676E70223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C656E644576656E742069643D224576656E745F306E766A786768223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31716967616B7222206E616D653D22E68AA5E99480E98791E9A29DE5B08FE4BA8E313030302220736F757263655265663D22476174657761795F3137397A676E7022207461726765745265663D224576656E745F306E766A786768223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B746F74616C416D6F756E74203C3D20313030307D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3071617934387522206E616D653D22E680BBE7BB8FE79086E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303931313431303538313231333431362220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934373637353034313130373936382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383835333637373122206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383835343030383122206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F303538636D736222206E616D653D22E68AA5E99480E98791E9A29DE5A4A7E4BA8E313030302220736F757263655265663D22476174657761795F3137397A676E7022207461726765745265663D2241637469766974795F30716179343875223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B746F74616C416D6F756E74203E20313030307D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3079637838666222206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F3071617934387522207461726765745265663D224576656E745F306E766A786768223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31686D61796B6822206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F3079777866777522207461726765745265663D2241637469766974795F30336B6A757274223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30396237756E7222206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F3071617934387522207461726765745265663D2241637469766974795F30336B6A757274223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F666C6F775375626D6974223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22666C6F775375626D6974222069643D2242504D4E506C616E655F666C6F775375626D6974223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F31376E32727739222069643D2242504D4E53686170655F4576656E745F31376E32727739223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223130322E302220793D223239322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30336B6A757274222069643D2242504D4E53686170655F41637469766974795F30336B6A757274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223139302E302220793D223237302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30797778667775222069643D2242504D4E53686170655F41637469766974795F30797778667775223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223335302E302220793D223237302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F3137397A676E70222069643D2242504D4E53686170655F476174657761795F3137397A676E70223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D223531352E302220793D223238352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F306E766A786768222069643D2242504D4E53686170655F4576656E745F306E766A786768223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223933322E302220793D223239322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30716179343875222069643D2242504D4E53686170655F41637469766974795F30716179343875223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223730302E302220793D223337302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30396237756E72222069643D2242504D4E456467655F466C6F775F30396237756E72223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223735302E302220793D223435302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223735302E302220793D223530302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223530302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223335302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223438342E302220793D223438322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31686D61796B68222069643D2242504D4E456467655F466C6F775F31686D61796B68223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223430302E302220793D223237302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223430302E302220793D223234302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223234302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223237302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223330392E302220793D223232322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30796378386662222069643D2242504D4E456467655F466C6F775F30796378386662223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223830302E302220793D223431302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223935302E302220793D223431302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223935302E302220793D223332382E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D223836342E302220793D223339322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F303538636D7362222069643D2242504D4E456467655F466C6F775F303538636D7362223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223534302E302220793D223333352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223534302E302220793D223431302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223730302E302220793D223431302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2239302E302220783D223537352E302220793D223338332E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31716967616B72222069643D2242504D4E456467655F466C6F775F31716967616B72223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223536352E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223933322E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2239302E302220783D223730342E302220793D223239322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31387033687162222069643D2242504D4E456467655F466C6F775F31387033687162223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223435302E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223531352E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D223437312E302220793D223239322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30783964783274222069643D2242504D4E456467655F466C6F775F30783964783274223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223239302E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223335302E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30306C64766167222069643D2242504D4E456467655F466C6F775F30306C64766167223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223133382E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223139302E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('1d2ba1e6-1c51-11ec-94ee-5ef70686b817', 1, 'flowSubmit.flowSubmit.png', '1d1dbf34-1c51-11ec-94ee-5ef70686b817', 0x89504E470D0A1A0A0000000D49484452000003D2000001FE0806000000706236BA000041BD4944415478DAEDDD09981C659D3F702EEF83435C595714165DEF733D38D63FB3EB0928A0CB10270104C2722733138EA8180D2CAB1B8D24D3934070552E891C1A578E0824DD4DC20DE18620E10A2127444208920448EAFFFE6AA6673B93999C93648ECFE779DE67BAABAA8FA97EBBDEFAF6FB56D5565B010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BD4CED15576C7BCAC8F2CE6B5D30CBB61E5498F8F6CADD13C796DF6AED010000D0E7349E53FC878642F9AAB8DDD0543AABA150FA5375696C2A7F3D9FD75CAE696C2AFDBEF2B8FA42F19E863193F71A7AFEA4ED870F2F6F674D020000D0EB9D36B6BC4B7D73E96B0DCDA529839BCA1F4BC1B918F787144A9FAC9413CEBD69C796205DBA3085E983E3F690A6D2FE0D85E28CB4FC35A92C49F3F6B136010000E8F5EA0BA52352B92D85E185F5CDE5098D85D2E42185F29E0DA3CABB4539654CF17DB15C0CE34EC1F981FA31E56FD43795C6A6E51FCD97193379AF08DFD6240000007D46F5D0EE08D229305FD9D2FB9C4AA1F45C3EBDB95C9F02F723D10B5D5F28FE479AFE627D73E9DA08E011A45399634D020000D027E443BA9B4B4FE4C743A7201DC1BA322F8E836E09DBD7ED946E9F9CE6FF2CEEA765EFCAFF3697A654DF070000805E2D05E1610D85F2AD31BC3B866FB7F448977E9DFE364549B7E7C772830AC53DD232F31A0BC5FF6E6C2E35A6E9F7472F76FA3BABF5EF4C6B130000803E6195B376C730EDE6724DFDE8D207A30C6E9AF281983EB8A9B8774353F9A4FAD1933F1197C06ADF037D72F394DDD3F25FB036010000E8F5EA9B26BDB7FA18E9C642F1F343C64ED9B5521A469577681C5B7E7F0AD83FCE4F4CD6541C1D43BE63B877E53952C83E23CD1B6C6D020000D0AB0D294CF97443A1745F84E496409C5F47FA7FAB4B7DA17C5C437371BF14B60744A86E5DEEFB69DE1D9561E1E9F6F893C64C7E87350A0000000000000000000000000000000000000000000000000000000000000000006BF19DEF7C2753942D597C0B0100801E17A4AD05D43F0000004106F50F0000409041FD030000106450FF000000041950FF0000004106D43F00004090B11650FF0000000419D43F0000004106F50F0000409041FD030000106440FD030000041950FF00000041C65A40FD0300001064E8E666CC9871ECC89123B3DADADADDAD0D000040908635C8B2ECAD8B172F5EBA70E1C26CE0C081D75B23000080200D6BF0F8E38F5F9BB52A954ACFD5D5D51D6AAD000000823474E0A9A79EDA77C58A15951C9DAD5CB972C5B061C316D4D6D66E6FED00000082345449B979DB050B163C9BB513D3060C18709E3504000008D25065C68C19A3B24E8C1F3FFE857EFDFAED692D010000DD2934972338AFA594AD29368579F3E6EDB66CD9B2159D05E9D75E7BEDE5C183074FAFA9A9D9CEDA020000BA4B90AE5987205D634DB129CC9A35EBA16C2DA64F9F3EBFAEAEEE746B0B0000E84E61BAAC379ACDADB6B676DB7BEEB967F9DA82F4F3CF3F7F53AA87CFC5F2D61A0000D05D82748DDE68B68461C386FDD7F2E5CB5F5D438E7EB1B1B1B1A4471A0000E88E61BAAC379ACD2D8E7DBEFCF2CBE77496A2A74D9B7661AA87F73B461A0000E88E41BA466F345BC251471DB5F7CC99335F691FA257AC5871EF800103663B6B370000D09DC374596F345BC2881123AE5C99549FB03BA6A57A78AEB503000074E7205DA3379A2DA1B6B676FB4993262DA9A4E879F3E65D96EAE0EC986EED000000DD3D4CE7BDD2D6049B5B7D7DFD118B162D7A65E1C285D9D1471FFD605D5DDDA1D60A0000D01382748D20CD96326EDCB8BB478E1C192322265A1B0000D0076459F6FA279F7CF28ADB6EBBED9562B1984D9A34A9479608D23DF5BDA7F5BE72EAD4A9734BA5D241EA5FCFFBFC264C9890D7BFF8ABFE0100401F9042CC9569273A5BB06041B674E9D26CF9F2E5CA662EB1DE63FDDF78E38D8B53B03940FDEB7965EEDCB9EA1F0000F415D113183BD102ED962FF3E6CD5B9882CC9DEA9FA2FE0100403716C369F544779F9EC1146496A97F8AFA070000DD581C232944749F129F87FAA7A87F0000D00B82CC4B2FCCCB9EBCEB82ECE1C967E5256EC734E1439051FFD43F000010A4DB95258BE6640F5D3F2CBBFFDAD35629312DE60920828CFAA7FE0100802053559E79F8AAD5424CA5CC7EF86A01449051FFD43F00001064AACB23E5119D06999827800832EA9FFA070000824C557968D2F04E834CCC13400419F54FFD0300004146901164D43FF50F0000D8B020136749EE2CC8C43C01449051FFD43F00001064AACA63B78CE934C8C43C01449051FFD43F00001064AACA5FE73C903D74C38F571F569BA6C53C01449051FFD43F00001064DA95A7A65DBC5A908969C28720A3FEA97FACB7375B050000BD3DC82C5B963D76EB79AB0FAB4DD3629E0022C8A87FEA1FEB6CDF5416B4FE0500A0370699258BE664336E69EEF418D59817CB0821828CFAA7FEB1CE21FA54611A00A037069965CBB2798F95B207AFFB41A721A65262995856EFA020A3FEA97FAC3544EFDBC97D00007A7290595B2FA0DE414146FD53FFD8A810BDB6E90000F4B420B32EBD806BEA1D14480419F54FFD639DC3B2300D00D01B82CC8686984A11480419F54FFD63BD42B2300D00D0D3838C22C8A87FEA1F9B2D440BD3006C90238F3C7287EF7CE73B87F4EBD7AF90FE1653792A959753C95AFFC6FD62EBFC4362796B8D4E2D5EBC78A7ABAEBAEAAC3163C6DC7FE699672E1C3A74E8D2134E38616554A8E38F3FFED5534F3DF5C533CE3863D659679D75F569A79DF6F5F490AD056901429051FF94EE55FF1AC796DFDF78CEAD6FEA23215A9866CBCAB2AD4F3DEFFABF5BEBF7327D276BAFB862DBEA69830A13DFBEA6EFEAB1E74F7B5D94CEE6378C2AEFE60380F5535757F795946D26A4B2BC3534AF6B89E527C4E3AD45DADC71C71DC78F1E3D7ACE71C71D97A5F09C5D79E595D9DD77DF9D3DF1C413D95FFFFAD72CC4DFB81FD363FEE9A79FBE72E0C081CB53A0BEBE7FFFFEFF28482B828CFAA7FE75AD13C796DF5A5F28FD794D25968965D3EDC18DCDC5EF4569682E4E6F28942E6ABB5F2836F4F2102D4CB3C5B47E4F6FCBC37273A9317DF7FE5455CE6D0BBD4DC5D10D4DE563F2DB85625DC3A8291F6E682A9DD5D854FC567A5CFFFAD1C5FFB76A489EFAF769B907A2B40FEAC32F28BF715061EA3BD3F33F34A830F9238DE75CB75363A1DC5CDF5C9E5029E9B987B47FAFF11AE931E33A0CE585E2FF74BAAD692A9DD359D06F3F6DF8F0E1DB74B4ECFA4E874D10A0F74A41F8F6F50CCF9D95DBE3F9ACD53EEC81071ED8FFDC73CF9D7BECB1C7667FF8C31FB2E79E7B2E5B1FB17C3C2E05EA571A1B1BAF48156A67414611A4D53FF5AF6B9C70EE4D3B363497EE6D6C9EF2F18E4ACC8B655A76824B07B4ECC4A71DEFE6F2C17929941E4BF74F88797D20440BD36C76A78D2DEF92BE87FBC4F7AE714CE9A329145F32A4A9B47FFDE8D207F3A09C826E4B58BCE2F5E9F6B3F123577DA1784F6353E9A074FFF296205DFE4E4C3F6564B96D1F2A4695A4F90F3614CA874489C7D4374D7A6F5B206E2E0F4CF3EF48C1FC8614A0AF48EFE189FC316326EF9596BF33C2F5C9CD37BCBBFDFB6D2C94F68DC0DCD1FF928F64A96C5B9A8AA746E0AEDC1F5428EED17EF9F83FD3F34D6E9B90655BC70F07A9CC4CEF6162FC10B041D3A18B1D79E4916FECD7AFDFD8147E57B60FC40D0D0DD9A5975EBAC60EC4981FCB7510A657C6F3C6F35BCB7D48AA1FDB4E9C38F1AA08D0175D7451B664C9926C63C4E3E37952457AF9B0C30E3B5890510469F54FFDEBA2205D28DD1C3D4BB1C3BC6AC977746F8E65D24EF9A1F98E74A1F4649A362B6EB796D995DBB1B3DE0742B430CD669502ED61E9FB35257DEF1647A08D207D4A73F94351EA0BA5D3E2BBDAB25CE9DF5380FD63E571D1A39CCF6F2EFF3C7D9707A5EFF0B1C38797B78BC09D42F30FE3F9E231F5A327BF2B2FCDE57E69DA0BE9F9CE185498F8863C6037954644801FDC54FA5204DAD826A4BFD3D2727F4DE5A62185F29E2D217EF836117ADB07E978AE63CFBFFACD1D86EAD8A6A490DFD1BCBC07BEA9744E7A8D2CDE7F657A7ABE93D2B4EBE2F5D263BFDFD85CAEDF90E9D09552D8DDB5AEAEEEFEEA00DCBF7FFFECFCF3CFCF66CF9EBD5E7927968FC7C5E3DB05EAFBE275ACEDBE11A277B8E4924B669C74D249D9934F3E9975A578BE14CE970E1C38F04C414611A4D53FF5AF6B8274F47A450FD7AA65F2BB2A413ADF296DE9FDFA6DDA49BEA0BAC48E7DF44EF5A1102D4CB359AD32B4BB3548470F6E0CD7AE1CFFDCFAC3D7C5A95C9FC2EC2F1B9B8BC7A7DBF7A5C0FAFB28E9F6D30D638A9F490179403E04BCB9F49378AEBCD7B950BE336ED737957F1A01364275F45EA779F7A7E76A4AE5E1FA31E56FA4C79C9F96F997F4BA27A6F7F3A398D6129E277FB1D273BC4A908EC33F52806FD97E947738B979CAEE9592C2FCC969FE98EA69B14CEB8F07035B427CE9E608F4AD3B975BB7FC9837F98BAD3F1C1C183F2CACF774E84229407F289539D5A177C48811D933CF3CB35179271E1FCFD32E4C3F13AF67ADF7F2105D281416FDF0873FCC162D5A946D0AF1BC43870E7DF988238EB85890510469F54FFDDBF8207DFA889BDF96FECE4D3BAD57B594743BEDD4AE12A49B8BFF960FFF2C14475697B4CCDD31AF8F8568619ACD66C8D829BBC677328E4BCEC36FCB390AFE92CA3529D0CEAB5E36C2731E68F3205DBC32026B6B68BD2B82741E2A47973E58E9D54EA17A787ABEB32BF7A3B43C4FB12E7A70D3E3E6A7DB33F26D440AD269DA67631B11BDDDFF17A44B4D117EDB07E9FAD1933F57197ADE1AC42FAC2AD1CB7EFF2AD3DA1D2292EE3F33A8507E4FDCCEDF6BA1F474DBBCA6D290F45A3F5BDFE96A135DA5B5277A4E752FF455575DD5A599279EAF5DEFF4337AA67B6F88DEF6924B2E792C4274ECF46D4AF1FCA79E7AEA0B03060C384390510469F54FFDDBB8201D67F64D3BC753AB7660CB9579D5413AEDECDE9E7646CFAC2E798F56F70CD2D52137AE00F1DDAD36FE4A101D3D8F30CD26535F280F4DA514BDC2D1331D41BAB150FC6A0CB98E137B3536957E9587EDA6C9FF9A1F075C28BD147FF31FB99A4B8508B679B88DC3355A8374F4F6E63DCF51D273E7251F4A5D1E158F6BD906948FCC7BAA53988EC336A2473C827984DDE869AE04E938AE3A3FC4A3B537B9FD31D2B17D18DC54DCBBFDFFB5A6A1DD2102747AEC9CB6E50BC56FC60F07D5DBA8788EF59DAE46D115E298E5EAE1DC471D755476EFBDF76E92CC13CF1BCF5F3DCCDB31D3BD501C137DF2C9276FB29EE88E7AA68F39E6981753853A5090510469F54FFDDBD8209DF73CB50ED92ECD6F1FA4E3ACDD0DCDE59A384B777E06EF42A96970D3940FA410BD5F1CC7D9CD43F4AFE3F7DED6BF1B1AA6D7F43CC2349B4C4743BB53F01D9BF7528F9EFC89EA6557ED912EDDDF127EF300FC742548E7C70C174A37C619B1F3E59A8A835A4F567677E52CD979682F946E8930DE12D08B0D11EAF31EECA6F249295C7FB7E52468A55FC450EFFF0BBCED827453F1F0184ABEBE413A9F5F28FDA1ED078596C07E7BFEDED336A7727B7DA7AB4D7485D6138BB5F5446FAA105D1DA6AB7BA6E3F57D0ABD48FA800F88138B75F531D1EB72CCF461871DB6A8B6B6F69D828C2248AB7FEADF8605E97C87378672579538C6308672E7CBE4C756966E8AE3326387F4D49F5FFF96FAA6F279F563267F253FDE32EDB0C730CE6E18A2C3775BC36FB61161BA3A4457CA116B795DE81271E9A9EA20DD3A64FAF2BC273805DB388958CB72B7BE290FCC79F82D5E1001B92A60FF21BEC71194F3EF782CD3543E26863CB7F67A1F1797B78A7995301DDB8638B6388EA78E20DD32ACBBF4682C1B97DE6AB944D6C4375407D4F8512D8ED1AEDC6FB94EF5EA271C8BF01D235A3AFB9FA3773CBDEEE9AB3C26DE5FA13823027FF57919D6773A6C8CD64B5CADA884DAABAFBE7AB3649E789DAA5EE9152E8DD58BC425AEE2ACDA5BC279E79D373755A826414611A4D53FF56FFD0C3D7FD2F6D543BAAB76BA63F8E64311A42350A71DD22F474F53ECB0C759705B8679A69DECF437CED63BA450FA645C16A71B86E8CE42F0FA84E98E1EFFAB4E1E2F4CD3B521BA79CAC7D3F7EC910896ADDFCD8B53B8BDB6A517397D1F9BCB3F8FCBD2B5FE18B65B0CF58EB369C731CB959EE218E21CC754C7F73D4E16966E17D754E2BBDEFAB8EBA2F739EFFD4EA1360269655E7A4F475407E1C65193FF31DE67941856DDF9FF9387F13BE2D25BEDAF6BBD2E2AD7B5DFD8E9B0A1AAAF131D2704DB9CDA9D80EC769F462F70C71D771C1FBDD12FBEF8E21609D2F1BA871F7EF8E2FEFDFBFFA320A308D2EA9FFAD767AD29C46E68985E9F102D4C03F462871E7AE897AB87746FECD9B937E46CDED543BCE3FDF8547AB8D1A347CF99306142B6255D7CF1C54FA40A75BE20A30832EA9FFA2744AF47285E5398DE90102D4C03F452296B4CA884D8B8DEF39610AF5BD52B3DC1A7D283BDF8E28BEF38FEF8E3B3679F7D768B06E9F4FAAFF5EFDF7F416F3B91842023C8A87FCABAD6BF3E7C229DF509ADEB1AA63726440BD300BD4CCA193BA6E0BABC126237776F7475AF7455905E1EEFCBA7D3435D73CD35670E1D3A34EB0E8E39E69899A942EDDD437ED12AA75223C808D2EA9FB2B1F56FFEFCF9BBCF9A35EBA17BEEB967F98F7EF4A39FD4D4D46CD75BEB641785D5B585E9AE08D1C234402F6A83D2FC432A01B6A1A1618B669E78FDAA307D884FB0876A6E6E7EF0CA2BAFEC16417ADCB871F7A5CAF4DF3DE40B5BA9FC6BFCE20A3282B4FAA77456FFD2666FDB1933668C5AB66CD98ACA76302DF7EAE5975F3EE7A8A38EDABB37D6C92E0CA99D85E96DBA30440BD300BDA40D4AD39B2BCBFDF6B7BFDDA299275EBFEA3D37FB047BA833CF3C73E1DD77DFDD2D82F4D4A9531FE8D7AFDF553DEC0BBBC62FAE202348AB7F4A47F5EFA9A79EDA77C182059D1E533373E6CC57468C1871656D6DEDF6BDA94E767138ED284C3FDAC5215A9806E8056D505D5D5DA9327FDAB4695B34F3C4EB57DE4BBC2F9F600F75FAE9A72FDDDCD78EEECCA38F3E1A43BBEFEAA15FD80EBFB8828C20ADFE29D5F52F79DBE38F3F7EED8A152BD6BA4D5C99A4C72C696C6CFC6E6FA9939B20947614A6BB3A440BD3003DBC0D4A7F6755A66FE9EC13AF5FF51E67F9047BA8E38F3F7EE5F3CF3FDF2D82F45FFFFAD725A932CDE9E15FD855BEB8828C20ADFE299572DB6DB7658B172F5EBABEDBC6458B16BD326EDCB8BB6B6B6B77EFE975721385D118CEDDBE27FAD1D6E95D4D9806E8996DD0DF2AF7B774F689D7AFEA917ED127D8431D7EF8E1D9ABAFBEDA2D82747A1F2FAEC317A147954D1D64962D5B96FDE52F7FC9962C59B2D665E34BDBD172F1F8975E7AA9C3C73CFDF4D3ABDCBFFFFEFBBBE47DC7B5C353A0D8EC41A6B7D5AFCD5DFFE6CE9D9B3DF2C823EBB4ECF4E9D3B3A54B97AED3B2B367CFCEAF1CB0A93EF7050B16E421B6B3F9CF3DF75CF6F0C30FE7B767CE9C99BDF0C20BF97B5FD7EFD6BAAEBB912347660B172E5CEF6D633C261EDBD3EB636D6D6DF6C637BE3142EEA95DD88CADA9477A5DAE33BD214EED6BDB12455194DE54B674F689D7AF7A3FAF49A43DD471C71DF76A77E9914E3BB38FF7821EE9CD3AB4360269EC3096CBE5EC8F7FFC63F6F18F7F7C95F2C52F7EB16DD9F459E7D362A73C42C3A04183621440FEF82953A664C71E7B6C76C30D37AC12A2DFF296B764BFFCE52FF3FB575F7D75B6F5D65B67F7DC73CF2AEF218EF378FFFBDFDF61193B766C87EF7BDF7DF7CDBEFAD5AF761AE0F54877AFFA376FDEBCECA69B6ECA0E3EF8E0BC0EC5ED28C3860DCB3EF2918FB4954B2EB9245F3E2EEDF0E637BF39FBC94F7E92D7B5AF7CE52BAB955826968DE14D3BEEB863F64FFFF44F79DDDC6BAFBD5679CE28CDCDCDF9B23FFFF9CF579B575D2AA1375EF3A73FFD695B39E08003B26DB6D9263BFBECB35799FED8638FE5CB5F7AE9A5D93BDFF9CEFCF6F6DB6F9F5D7EF9E5D99C3973F2EF46D4EFAEAA7F13264C88AB13DC502A959E5BB972E58A75D82CBE96D6FD65471F7DF483E9739DD8437BA4DB0FEDDED4C3BA1FDDC4615A8F34400F6C83A2E7578F345DEA94534E79B1BB1C233D7DFAF4693DF818E9CD7EB2A7E82DFBDFFFFDDF7C6731024604835D76D9250F0551E2FAE0FFF00FFF902F1B81F96D6F7B5BDBCEE5E0C183F3F0D2D4D494DFFFAFFFFAAF6CBBEDB6CB1E7AE8A17CF96BAFBD363F357F84930818713B824E3C7FDC8E505DDD9B17671FBCF0C20B5729EF7EF7BBF3E7EDE8BDDF7AEBAD79D03AEDB4D304E91E50FF2EBEF8E28E7AFBB2238E3822FB977FF997BCFEC5FDABAEBA2A6F1C62F91FFFF8C779EFE31D77DCB14A788DCBEDC5B28F3EFA68DEEB1B3FAA7CE10B5FC8BEF4A52F65071D7450FED85FFFFAD779FD881F77E27625CC9E7AEAA9793D8CC05E5DBEFFFDEFE7CF193F2CC572712582A8CF5FFFFAD73B2DB1FCC48913B3279E78223BFDF4D3B31D76D8212B168B9B344857EA5F6A340F1D366CD882359D6C6CC58A15F7C6C9C6D2E73A3B96EF2D75B20BC3686797B8EAE8ACDD5D15A68568801EDA0639469A2EF7C31FFEF099EE72D6EEC99327177BE059BBB7D8E5872294C4CE7FEC2846483EF0C003B30F7CE003F9BC9FFDEC6779CFDEE73FFFF9FCFEB9E79E9BF7C8C5FB89E1D9B366CDCA4E3AE9A42C7DFEF9E34F3CF1C4AC7FFFFE79E08EE52398BCE73DEFC9A71F76D861F93203060CC8EF47408EF9D5EFE5431FFA508741ABB3201DE517BFF845DEE31DC37A05E9EE5FFF226C9E75D659F9E104FFF66FFF9607DCA38F3E3AAF1F51DFE20797BFFDED6FF98F31F1D9472371DF7DF7ADF63C8F3FFE785B908E1EEBA8BBF1DC31A262A79D76CA3EF8C10F66EF7DEF7BF365E239E376E5FF8820BD55C743785709D2D75F7F7DF6D18F7E347BEAA9A7F212C3BA637E4CAF4CFBE4273F99DD72CB2DD9A851A3B237BCE10DF9688BA8C711A42FBAE8A27C9978CCF0E1C3F3EFD2030F3CD0A5F52FCEC69DBE53E78D1F3FFE85D75E7BEDE5AA4DE18B29BC5F98E6CD4E9FEDB93DF0ACDDEB7AF9ABAEBEF455F589C5D6769D69211AA07706E94EDB2067EDA6CBA59DC4ABBBCB75A4CF3EFBEC093DE83AD2EBB4B3B8398776FFE637BF690BD2119C2374446F60DC1F326448B6EDB6DB661FFEF087F372C51557E48F8BF010013B4ADCAFBCDF08CA1162BEFDED6F675FFBDAD7F279F137EEFFDDDFFD5D5B908EE1DF517FA2073A5EBFBAFCFDDFFF7D1EBE637E1C77DAFEBDC730E178DEE8E116A4BB77FD9B3163467E68C06EBBED967F9EF1B98D1B372E0FD1513EF1894F64279C7042BE6C2548B73FBEBEA3201D3DD95157A2973A868CC7FB8D5EE8CF7DEE7379B88E1F5B5EFFFAD7B78D80883A1D3FE4C4A108B7DF7EFB2A2546397CF6B39FCD7EF7BBDFB50DD75E53E88EE7AEBCA7F643BB637E1C16117FE3C79E18DD11EB6053D4BF7EFDFAED595F5F3F3D99FFFCF3CFDF94BEABD1D0DF1FD37B639DEC8270BAB610BDD52608D34234400F6F835C479A2E977660BF967658577687738DF5EFDFFF815499F6EE4DEB777305E9E821FCE637BF9987E577BDEB5D6D2586625796BDF3CE3BF3E1AEDFFBDEF7F29EC278DCFFFCCFFFE4C7BA964AA5D582740CA18DB0F1831FFC209F178F8BFB31BD12A4FFFCE73F67BBEFBE7BDE7B1D7F23E4C4B2D18B18F7A3A72FFE560F058F1227AC8AF01E0125968970254877DFFA178702741446E358E7BABABAFCC79908DAEB1BA4E3A45EF1A34FD4ABE80D8E63A18F39E6987C74450C198F9EEE181E5EA93F175C7041FEE34F67E138427004EA4A388E1EEE18711343B8637EFC0810F7F7D8638FD582F4DBDFFEF6FC18E6788E3896FAE69B6FCE1F13BDD69BBAFED5D4D46C97D6E3E969FBF75CFC8DFB7DA89AAE4F485DD710DD95615A8806E81D61FB904A788D4E9C2DA9BEBE7E6555903EC4A7D3430D1F3E7C9BB4E3BA3CCE98BB25CD9E3DFB965491E6C5FB1164D6AD9C77DE79794F60EC1C46E8885EBDE8058EE34DFBF5EB979D7CF2C96DC748C790D67DF6D9270FAF71DC7304D8AD5A87CE46088EE5DA07E91872BBE79E7BE6436063DEA73EF5A9FC7E048DEAA1DD31C4FCD39FFE743E9437424C2C1BC3B5E3D7B6D7BDEE7579D86EFFDEE3F5E3B9E2F63FFFF33FE73DD78274F7AD7F319CFBFCF3CFCF436FA544B8AD0CED8E910FD1731C870CAC4F908EE5A35E45891F7D2224475D88201DF538CE545D09D2D1231CA136CE0B10BDCE9512F5EC631FFB581E7EA3AE557E9459D71EE9381EBA52C7F7DB6FBFCD728CF49AB6C77DB4295A97B0BABE21BA2BC2B4100DD04BF4EFDF7FC794359657026C9CF4744B88D7AD0AD1CBE37DF9747AB0D34E3BEDFAE889D992FEF33FFF737CAA4CE70B32EB5EE28CD88D8D8DAB0DED8E634DA347B8A6A6261FD25DE9258C6341A3C73A86CEC650EC785C1CA37AD96597E561A43A4847EFF5AF7EF5ABBC4450DEAAF578E7CAB4EA701167748ED78A30143D93B16C0CD38D105DDDEB5729D13B18E1280251A5573B027E0CCF15A4BB6FFD8BBAB3EBAEBBE63DC7716C7E84CE4A908EF9714CF2881123D62B48572E93153FE4C58F41F17CF103D0FEFBEF9F0FA98EB3C85782749CD86C4DC1B8528E3AEAA8B6201D27D48B7A1527418B79E3C78FCFEF57F748FFE94F7FCABEFCE52F673BEFBC73A767EDEEAAB3CBF7B5FAD785617A4343F4C68469211AA0974959634225C44607C19610AF5B15A427F8547AFE2F34FF3870E0C0576298F096B068D1A23B53457A36DE8720B3F1C74847EF61E5E45F77DD75D72ACBBFE94D6FCA43450CAD8EF9D193173D7F7152B24A908E701D41A9522A67FB8EBFD5D363B978CEF9F3E7B7859C08575BB51E5FFA8E77BC230F33F17EAA2FFF1343B9E3D257D5EF2B824CF4487674722A41BAFB04E9EBAEBB2EBF1D61B712A4E3ACDB713C737CDE1140D73748EFBDF7DEF9C88818861DE1357EF0893378473D891EE7183E1E6136EA7A9C0C2F7EC8891392451D8EFB51FFE2F9E28799B85F39E1D8C61C23DD3E481F7AE8A11DFE28A4FE6DB630FDDD8D08D16B0AD34708D1007D476ACFBF5C09B17192DDCDDD2B1DAF575757D736AC3BDE8F4FA517686C6CBC22CE54BB25A4D7BE3C55A6264166FD4A5C33B772AC732548C7B59BE338D308CC31FD5BDFFA561E082ABDD21186E218E7E83D8CF97136E3458B166553A74ECDEFC7E57FE2B25A71F9AB4A89E012F3E27AD2D5D363A86D1C5B1D01245E37FED7E841DCAA7568777D7D7DDED31C413DAEEB1BA1287AA963D86E25EC545F422B869E47AF60F4860BD2DD3348C7B1F831F43A826C25481F72C821D9BFFEEBBFE6C3F523C8AE29482F58B0A0ED525A9521D87122BAA893717C7D5C8A2AEA64FC20143FAE44DD89D78A21E095E78800FEBEF7BD2F5F269E2F1EBF55EB19B9AB5F2B9E27466C446F725C2FBAF2C352DC8F511693274F6EFB21E8CC33CFCCEB71CC8FFF334657C4A5B8E23163C68CC95F2B2E15A7FE6DB1305D1D82372444AFCFF308D100BD58CA1CB757826C8CA4DB9CE2F5AA7AA36FF769F412B5B5B5EF3CF2C8235FDEDCD7559B366D5A0CE97E365E5F9059BF1281337608E3244973E7CECD83741CEB1CC749C709C2E278D238D1578484CA99973FF399CFE4C79D56C24E848D380372DC8E93932D5CB8B0C3EB55C7FCF8DB7E5E5C4A6BD0A041F949A3CE38E38C7CB90844955EE80826114862F8770C658910F6F2CB2F77F8FF44A08FF014215D90EE9E41FA1BDFF8461E98E38798F643BB2B654D413AAEF91CF32AC7C7574A04E5184511C75EC7B0EBF8B125A645BD8EC305E2B25BED7BB5E3B9E20467F17CF1034D84F0CEDE7B256CDF7BEFBDABCDABFC50143F3AC510F2386740FC8FF1A35265A446D4E9F83148FDDBE261FA88AD36FE7AD06B7A1E211AA097ABABABDB2B658F1595401B6DFFE610AF5315A257C4FBF069F4226987F8E0B463BA3402CDE6F0ECB3CF4E4915E9E9540E146436EC0450F1C3C7E2C58BDB7A75A3B72E8E37AD2C133D84D543ABAB1F1B41277AE7E2760496B80670673DDF715C69FC5DD3FB89D77FF0C107F340BCB92E6725C86CBEFA17E1B55207A21737EA4CFC40127FDBD797A8071DD5BBA54B97B65DABBCA3C3142ABDD6ED7BB13B7B4F31DA22CEC2BDA665A244DD8E1F9E3AAAC3F11D88FFA3F2BD683F3FBE5F1D4D57FFB64898EE4DAF07C016D2AF5FBFB1D543BCE387F64D299EBF7A4877BCBE4FA1171A3870E09943870E7D3976FA36A5B4633A3D55DCBB52A5FABE20A308D2EA9FFAC7160CB74234401F72E49147BE3105DAFB2AC1364E54BAA9C2743C6F7ABD1555BDD1F7C5EBFB147AA9238E38E2E2534F3DF5854DD533FDECB3CFDE18213A55A45F09328A20A3FEA97F6CC1902B4403F4412987EC9ACA33D53DD37142DEAE14CF57DD13DDFA7ABB5AFBBDDC800103CE183870E08B5D7DCC74EB31D1B37A7B4FB42023C8A87F8A20DDEDC3AE100DD087A53CF2A1EA305D3901D9C69ECD3B1EDFEEC46279888ED7B3D6FBCE2F35071E76D8618BCE3BEFBCB9716CE1C678E18517EE683D3BF7B3BDF9986841469051FF14F5AF478469211A804ACFF47DD5A1377AA7E324B971159AF511CBC7E3DAF54267ADCFAF27BA0FFE52B3735C9AEAF0C30F5F7CE185173EF1DC73CFBDBA1EF5E9D53973E6DC72E699678E6F0DD04DF17C828C22C8A87FEA1F5B30FC0AD100B48963965B4F40D63E00670D0D0DD9A5975E9A9FDC34AE1012274D0DF137EEC7F4985F5F5FBFDA63E3F9E2791D13DDC7F5EFDFFF1F5365383F05E167FFE33FFEE3E971E3C6DD3B75EAD4071E7DF4D1590B172E7C29D5A725CF3EFBEC930F3FFCF0B4B4B338E9ECB3CF9E901EF3407ACCFC785C3CBE2FAE3741469051FF1441BA5B8569211A800EB55E1AEBF60E02F18694DB5DE28AF6B63EF4D043F74915E3A7FDFAF5BB2A55923BAB8E2D88BF77C6F4981FCB6DB5F1D7FC1464144146FD53FFE88A302C4403B02E81FA2B29D34C4865F97A86E7587E423CDE5A0441469051FF14F5AF378469211A80F572E49147EE9082F121FDFAF52BA4BFC5549E4AA57229AB975BEF175BE71F12CB5B6B20C80832EA9FA2FEF596302D4403B0D15258AEA9EA7DAEB14640901164D43F45FDEBAD615A8806A0AB8274B92A4897AD1110640419F54F51FF7A639816A201E8AA105DD3C131D135D60C0832828CFAA7A87FBD294C0BD1007465902E7710A4F54A832023C8A87F8AFAD76BC2F4A94234005D18A26BD670A6EE1A6B0804194146FD53D4BF1E1FA663C7468806A00B8374790D415AAF340832828CFAA7A87FBD6287C77A06A0ABDA949A75B87E748D3505828C20A3FE29EA9F200D005BADB5375AAF340832828CFAA7A87F823400686740905104699FBBFA67070700B43320C828828CFAA7FE61070700ED0C08328A20A3FEA97FD8C101403B030832828CFAA708D2767000D0CE00828C20A3FE29EA9F1D1C00B433802023C8A87F8AFA67070700B43320C82882B4CF5DFDB3830300DA191064144146FD53FFB083038076067AAD62B1B872E9D2A542443728E973989B82CC32F54F51FFECE000807606BAB1A953A7CE5DB0608120D10DCAD34F3F7D590A3277AA7F8AFA67070700B433D08D954AA5836EBCF1C6C5F3E6CD5BA867708BF504CE9B3973E6F8146266A57280FAA7A87F767000403B03DD5CEC3C474F542ACBE318C99E562EBEF8E22C36183DF1BDB796E5ADEBFF00F56F52A6A87F767000403B036CFA8D45D90603B0830300DA1960DD361435B1B1682D35D60860070700ED0CC09A3714E5AA205DB646003B38006867003ADF4854F746EB9506ECE000A09DD1CE006BD948943B08D27AA5013B38006867003AD84074D41BAD571AB08303807606A0930D44790D415AAF3460070700ED0C40D5C6614DBDD17AA5013B3800686700DA6D1CCAEB10A4F54A03767000D0CE00D86000B65700A09D016C3000DB2B00D0CE00361800B657006867001B0C00DB2B00B433800D0680ED1500DA19C00603C0F60A00ED0C800D06607B0500DA19C00603B0BD0200ED0C608301607B05807606B0C100B0BD02403B03D86000D85ED1376459F6FA279F7CF28ADB6EBBED9562B1984D9A3449D9CC25ADF79553A74E9D5B2A950E5223D1CE00361800B657747329445F99425CB660C1826CE9D2A5D9F2E5CB95CD5C62BDC7FABFF1C61B17A7607D805A897606B0C100B0BDA21B8B9EE8087102ED962FF3E6CD5B9882F49D6A25DA19C00603C0F68A6E2C8673EB89EE3E3DD329482F532BD1CE00361800B6577463718CAE10DB7D4A7C1E6A25DA19C00603C0F68A5E10A45F7A615EF6E45D17640F4F3E2B2F713BA609BF8234DA19C00603C0F60A41BA5D59B2684EF6D0F5C3B2FBAF3D6D9512D3629E002C48A39D016C30006CAF10A4ABCA330F5FB55A88AE94D90F5F2D000BD26867001B0C00DB2B04E9EAF2487944A7413AE609C08234DA19C00603C0F60A41BAAA3C346978A7413AE609C08234DA19C00603C0F60A415A9016A4D1CE00361800B657B061413ACED2DD59908E7902B0208D7606B0C100B0BD4290AE2A8FDD32A6D3201DF30460411AED0C608301D0B7B75759B6F5A9E75DFF776B5BACF19C5BDF547BC515DB564F1B5498F8F698DED9638E3D7FDAEBA27436BF615479B7F579ABF17A43CF9FB4BD5AB46983F45FE73C903D74C38F571FD69DA6C53C015890463B03D86000F4E9EDD58963CB6FAD2F946ECBC37273A9B1A150FA535539B72DF43615473734958FC96F178A750DA3A67CB8A1A974566353F15BE971FDEB4717FFDFAA2179EADFA7E51E88D23EA80FBFA0FCC64185A9EF4CCFFFD0A0C2E48F349E73DD4E8D8572737D737942A5A4E71ED2FEBDA6F739B8BE503CB9C3505E28FE4F9AFFE70E4B53E99CCE827EFB69C3870FDFA6A365D7777A4F0ED2519E9A76F16A413AA609BF8234DA19C00603A04F6FAF4E1B5BDEA5A1B9B44F84DDC631A58FA6507CC990A6D2FEF5A34B1FCC83720ABA2D61F18AD7A7DBCF363417A7A7207B4F6353E9A074FFF296205DFE4E4C3F656479E7CAF3368E2DBF3FCD7FB0A1503E244A3CA6BE69D27BDB02717379609A7F470AE637A4007D457A0F4FE48F193379AFB4FC9D11AE4F6EBEE1DDEDDF6F63A1F483C6E6E2511DFD2FF1F8C6E6291F8F9242FFA9E9F9C755EE0F2A14F768BF7CFC9FE9F926B74DC8B2ADE387835466A6F730317E08D8A0E9BD21482F5B963D76EB79AB0FEB4ED3629E002C48A39D016C3000FAECF62A05DAC352889D92C2E0E208B411A44F692E7F284A7DA1745A04DD96E54AFF9EC2F61F2B8F8B1EE57C7E73F9E729B40E4AC1FAD8E1C3CBDB45E04EA1F987F17CF198FAD193DF9597E672BF34ED85F47C670C2A4C7C431EB09B4A2322C00F6E2A7D29026D84DFF4775A5AEEAFA9DC34A450DE33C27763A1F8D54A89F09EDEE77F564F3B654CF17DAB85EAA6D2A111F23BFA9FF31EF8A6D239E9B9B278FF95E9E9BD9D94A65D173DCCE9B1DF6F6C2ED76FC8F49E1EA4972C9A93CDB8A5B9D363A4635E2C23040BD26867001B0C803EBBBD5A6568776B908E1EDC18AE5D39FEB9B587F7E254AE4F61F7978DCDC5E3D3EDFB5260FD7D9474FBE98631C5CFA4803C201F02DE5CFA493C57DEEB5C28DF19B7EB9BCA3F8D001BA13A7AAFD3BCFBD37335A5F270FD98F237D263CE4FCBFC4B7ADD13D3FBF9514C6B2C4CFE621EB82B2585ECB4FC93D5D3E2310DA3CA3B9CDC3C65F74A89E1DF69D931D5D36299D61F0F06B63ED7CD11E8F39510BDCBD12B9E5EAFF5878303E38785F59EDE9383F4B265D9BCC74AD983D7FDA0D3105D29B14C2CAB775A90463B03D86000F4C9EDD590B153764DA1726E1C979C87DFE6E2F474FF2FA95C9302EDBCEA65233CE7813B0FD2C52B23B0B686D6BB2248E7A17274E983955EED14AA87A7E73BBB723F4ACBF314EBA207373D6E7EBA3DE3F41137BF2D82749AF6D9146EAF8ADEEE08D2ABBCCFC2944FA7E51F4FF36F8D61DCD5F35A83F88555257AD9EF5F655AA17440BBFFE5994185F27BE276FE5E0BA5A7DBE6359586A4C0FEB3F59DDE5383F4DA7AA1F54E0BD26867001B0C00DBAB4A002D9487A6528A5EE1E8998E20DD3284BAF8409C3CACB1A9F4AB3CC4364DFED7FC38E042E9A5F89BC2F3C8144E0BE971FB468921E09520DDD24B5C3A272FE9B9F3920FA52E8F8AC7B584D8F291794F750AD3718C75F48847308FB09BCA451D05E9FC58EA1458E398EE08FD6BFABFD634B43B44804EAF33E7FF9EBBF8CDF8E1A02A6497E339D6777A4F0DD2EBD20BBDA6DE69815890463B03D86000F4A9ED554743BB53F01D9BF7528F9EFC89EA6557ED912EDDDF127EF300FC742548E7C70C174A37C619B1F3E59A8A835A4F567677E52CD979682F946E8930DE12D08B0D11EAF31EECA6F249295C7F3702F3FF05E3F27722AC562EBFD512F84B3FD8D0209DCF2F94FED0F68342D3A4F7A6D7BB3D7FEFCDC5FD2AB7D7777A4F0DD21B1AA22B452016A4D1CE003618007D6A7B15979EAA0ED2293C7F2E3F237773697604DB388958CB72B7BE290FCC79F82D5E1001B92A60FF21827404E53816395FA6A97C4CF420B7F67A1F1797B78A7995301DC728C7B1C5713C7504E99661DDA54763D9B8F4569CD02C7FBE96D79B517D56EC3C98B70CD7BEECD8F3AF7EF36AFF5373E9C414B4CFECEC7F8EDEF1F4F8D357794CBCBF789D14F8E3ACE11B3ABD2706694590463B03D86000D85EAD6B886E9EF2F114A21F8960D91A6E2F4EE1F6DA965EE4F2767156EBB8B6743E6F5479B718EA9D9F4DBBB93C30C26AEB63AE8963AA879E3F69FBFCC45F8552714D258682B73EEEBAE87DCE7BBF53A88D405A9997DED31111845BA7FFFAD49F5FFF960E0371BBB365B786F13BE2D25BEDAF6BBD2EA2A7BC2BA60BD28A20BD89B75D71B9BBD6932162BF18B0C1006CAFA896655B5B0982B420DD7BB51E5AF2E73595CA0F56E9F6E0C6E6E2F7A2B49E14F1A2B6FB8562836FB77606B0C1006CAF409016A47BBD13CEBD69C786E6D2BD313AA6A312F3629958364E46182364E264880DCDE583F352283D96EE9FD0FEACFCDA19ED0C608301D85E81202D48F7DE201DD7748F33F2C7D9FF5729F9F5EB6F8E65F21304E6D76E2F3D99A6CD8ADBAD6576E5769C94D0375C3B03D86000B65720480BD27D22489F36B6BC4B5C837ED532F95D95201DCB368C9AF2E174FFB7F9C90EAB4A9C24B1279DF04F3B03D86000D85E21482B82F44607E9D347DCFCB6B8E45E43A17C554B49B7E30A00D541BAB9F86FF585E23D713DFAEA12272A8C79BEDDDA19C00603B0BD02415A90EE33417A5061E2DB53809E5A991ED78DAFCCAB0ED271CDF638A37F75C9CFD42F486B67001B0CC0F60A046941BAEF05E9D2FCFF1BB25D9ADF3E48C759BB1B9ACB357196EEFC0CDE8552D3E0A6291F48217ABFFAE6F261BEDDDA19C00603B0BD02415A90EE33413A6EE743B9AB4A5CFE2E8672E7CB8C297E262D77D3A042718FE8958E6BCBD73795CFAB1F33F92B0D4DC5D169DEFDF5A3277FCE375C3B03D86000B65720480BD2BDDAD0F3276D5F3DA4BB222E6795CA4311A423503716CA5F6E2C94F61D3EBCBC5D9A7E5D7DA1745B04F0F83BA4A9B4FF9042E9930D6326EFE51BAE9D016C3000DB2B10A40569D0CE00361800B65708D28A208D7606B0C100B0BD4290563641901E3E7CF8366A2DDA19C00603B0BDB2BD62D3D4AB722A358274EF08D2F3E7CFDF7DD6AC590FDD73CF3DCB7FF4A31FFDA4A6A6663BB51CED0C608301D85E4117D7ABD6B2C6402D4877EF209D65D9B63366CC18B56CD9B21559ABB4DCAB975F7EF99CA38E3A6A6F351DED0C608301D85E41D707E935066A41BAFB06E9A79E7A6ADF050B163C9B7562E6CC99AF8C1831E2CADADADAEDD578B433800D06607B055D1FA43B0CD48274F70BD2C9DB1E7FFCF16B57AC5891ADCDCA243D66496363E377D57AB433800D06607B059B2648AF12A805E9EE556EBBEDB66CF1E2C54BB3F5B468D1A257C68D1B77776D6DEDEE6A3FDA19C00603107814651396CD15A41F79E49155EEDF79E79DD9B265CB565BEEA9A79EDAA4EF63C182057958ED6CFE73CF3D973DFCF0C3F9ED993367662FBCF042B674E9D2EC2F7FF94BB664C9924DFADEE6CE9D9B8D1C39325BB870E1FAE6E8FC31F158755AE9AC686D01411A0036FC079ACD3EB4FBEAABAFCE5EF7BAD7B505D89B6EBA29DAE8ECFAEBAF5F65B9071F7C30DB7AEBADF3F9175C7041F699CF7C66953262C4887CB90913266483070F6E2BC71D775CF6918F7C64B5F2C4134FE4A1F8A73FFD695B39E08003B26DB6D9263BFBECB35799FED8638FE5CF7DE9A59766EF7CE73BF3DBDB6FBF7D76F9E5976773E6CCC9DFEFB469D336F9BA8AFFED98638EB9A1542A3DB772E5CA15EB90A15F9B376FDE65471F7DF483E9739DA8471A00411A00BA2E486F91938DCD9F3F3F0FC51FF8C007F2301CB73FF7B9CF65EF7DEF7BF3DB31BFB2ECA04183B2CF7EF6B3F9ED3BEEB8231B3D7A745E0E3FFCF03CC8FEF297BFCCE7FDE637BFC9F6DC73CF6CBBEDB6CB0E3DF4D0ECAB5FFD6AF6A52F7D290FD53BECB0433E3F968F5EF02BAFBC325FEEEB5FFF7AA725969D3871621EBC4F3FFDF4FC398AC5E21609D295938DD5D5D51D3A6CD8B0056B3AD9D88A152BEE8D938DA5CF75762CAFD60320480340D704E92D7AF9AB089F1142F7D8638FECC31FFE705B89605D1D4E6308F58E3BEE98FDFEF7BFCF3EFFF9CF67975D76593EFDAEBBEECA76DA69A7ECD39FFEF42A43C12FBEF8E2EC6D6F7B5B7EFBBBDFFD6EB6DB6EBBE58F7BFDEB5F9F7DF39BDF6C0BD2D1EBFDD18F7E341F321E257AC5B76AED0DAF4CFBE4273F99DD72CB2DD9A851A3B237BCE10D79AFF8873EF4A13C485F74D145F932F198E1C387677BEDB557F6C0030F6C96B376C7D9B8070C1870DEF8F1E35F78EDB5D75EAECAD02FA6F576619A373B7DB6E73A6B3700823400744D3BB8C600BDB983F4D34F3FBDCAF4B85F1DA4BFF7BDEFE5F73FF5A94FE501368EA13EFEF8E3F3601BA176DB6DB7CD860E1D9AFDED6F7FCB66CF9E9DFDE0073FC8DEFCE63767A552293BE28823B22F7CE10B595D5D5D1EAE23F056827465B876DCEFACFCE217BF687B5FED8776C7FC2F7EF18BF9DFB7BCE52DF97B9A3163C666BB8E74E8D7AFDF9EF5F5F5D393F9CF3FFFFC4D43860C29A5CFF6FE98AEA603204803C066B6B982F409279C909D76DA696D25026975908EF79102623E2D8E858EA1DBD1CBFCBBDFFD2E9F3F7EFCF83C3847E83DEFBCF35609C2871D7658DEAB1CC73FBFE94D6FCA4E3EF9E4D58274F46ADF7DF7DDF910EE981743BEE37EF494B70FD26F7FFBDBF363952348C7B1D437DF7C73FE98E8B5DE9CD791AE565353B35D5D5DDDE969FFE6B9F81BF7D55E00046900E88541FAF1C71FCF0E3CF0C0B612C740EFBFFFFE6DF7AB7B77FBF7EF9FF73EC7B1D34D4D4D79D8AEAFAF6F2B871C7248DBF0EEEAA1DD11AC234CEFB3CF3ED91BDFF8C6FC769438B6797D7AA4E378E808E4316DBFFDF6DBA2C7487766F8F0E1DBA8B50008D200D08B83749CBCEBAAABAECA836DB95CCE7B7B2B270D8BA1DA471E79647EFB57BFFA555BB0FDD8C73E968D193326FBC637BE911F1B1DC72CC7ED6F7FFBDBAB1C231D3DD4D75C734D76C9259764679D755676F0C107676F7DEB5BF3DB511E7DF4D1B6201DC75FDF7EFBEDF97B89D7881EEEB85FDD23FDA73FFD29FBF297BF9CEDBCF3CE9D9EB5FBA5975EDAA2411A00046900E8C5413A7A9B2304DF70C30DF9DF3FFEF18FF9B0EB7DF7DD37BBF0C20BF3DB7146ED3899D7F4E9D3F36971B6EE08B6956B39FFF6B7BFCDC371F5F3C6B0ECCA71CBEF78C73BB2534E39250FC011C0E36463713B4A1C67BDB1C748B70FD27196F0EAE505690004690010A4BBACC409C176DD75D77C3876E56461F17A37DE78637EE6EEC6C6C66C975D76C94F0E16D79A8E801DD7788EB36C474F765CDF394E2016E1B872BDE7384E79DCB871F9B0EF38DE79EEDCB9790F7794E8DDAEF47847993C7972FE3EE24CDDF15AD19B1CD78B8E501C67038FFBF19C95E5E2525C679E79661EA4637EBCE738F9D941071D943F267AC9E36CE331EC5C900640900600417A939C682C8E778EDBFDFAF5CB7BA5B76AED058EB01A67DCBEEFBEFBF2401BBDBC279E78623EDC3A96AFADADCD8FA76E5FE27254D5AFF197BFFC251F9EDD5189E3AADBBFA7993367E6AF7FEFBDF7AE36AF32BCFC5BDFFA561EECDFF39EF7E4813DAE291D97D68A79EF7EF7BBDB7ACB05690004690010A4376959BA7469F6F2CB2FE76573BD66FB1297CF8A21DF4B962C596D5E04FA79F3E6E5B7ABAF595D298B172FEE70BA200D80200D0082B4B2858A200D80200D0082B42248032048038020AD08D20008D20020482B82340082B4B5000082B4200D0082340008D282340008D20020482B82340082340008D28A200D80200D0082B42248032048038020AD08D20008D2D6020008D282340008D20020480BD2002048038020AD08D20008D20020482B82340082340008D28A200D80200D0082B422480320485B0B0020480BD20020480380202D480380200D0082B42248032048038020AD08D20008D20020482B82340082340008D28A200D80206D2D0080202D480380200D0082B4200D0082340008D28A200D80200D00DD5CB1585CB974E95221B61B94F439CC4D417A995A0980200D00DDD8D4A953E72E58B04090ED06E5E9A79FBE2C05E93BD54A00046900E8C64AA5D24137DE78E3E279F3E62DECC93DD373E7CEEDC93DD1F366CE9C393E85E859A91CA05602204803403717E12D7A4253591EC7E8F6B472DB6DB76523478ECC264C9890F5C4F7DFBADEEF14A20110A401804D2ECBB2B72E5EBC78E9C2850BB38103075E6F8D0080200D00ACC1E38F3F7E6DD6AA542A3D57575777A8B50200823400D081A79E7A6ADF152B56547274B672E5CA15C3860D5B505B5BBBBDB503008234005025E5E66D172C58F06CD64E4C1B3060C079D6100008D20040951933668CCA3A317EFCF817FAF5EBB7A7B5040082340090CC9B376FB765CB96ADE82C48BFF6DA6B2F0F1E3C787A4D4DCD76D6160008D200D0E7CD9A35EBA16C2DA64F9F3EBFAEAEEE746B0B00046900E8D36A6B6BB7BDE79E7B96AF2D483FFFFCF337A57D81E762796B0D00046900E8D3860D1BF65FCB972F7F750D39FAC5C6C6C6921E690010A40180248E7DBEFCF2CBE77496A2A74D9B7661DA0FB8DF31D20020480300AD8E3AEAA8BD67CE9CF94AFB10BD62C58A7B070C1830DB59BB0140900600DA193162C4952B93EA1376C7B4B40F70AEB50300823400D04E6D6DEDF693264D5A5249D1F3E6CDBB2CB5FFB363BAB50300823400D081FAFAFA23162D5AF4CAC2850BB3A38F3EFAC1BABABA43AD150010A401803518376EDCDD23478ECC52DB3FD1DA0000411A00588BDADADADDA3DD8FBFD6060008D20080761F0034A80080761F0034A80080761F0034A80080761F0034A80080761F00D0A00280761F00D0A00200DA7D00D0A00200DA7D00D0A00200DA7D00D0A00200DA7D00D0A00200DA7D0040830A00DA7D0040830A0068F70140830A0068F70140830A0068F70140830A7417B5575CB1ED2923CB3BAF75C12CDB7A5061E2DB2B774F1C5B7EABB507DA7D0040830A7D4EE339C57F682894AF8ADB0D4DA5B31A0AA53F5597C6A6F2D7F379CDE59AC6A6D2EF2B8FAB2F14EF69183379AFA1E74FDA7EF8F0F276D62468F701000D2AF47AA78D2DEF52DF5CFA5A437369CAE0A6F2C752702EC6FD2185D2272BE584736FDAB12548972E4C61FAE0B83DA4A9B47F43A138232D7F4D2A4BD2BC7DAC4DD0EE03001A54E8F5EA0BA52352B92D85E185F5CDE5098D85D2E42185F29E0DA3CABB4539654CF17DB15C0CE34EC1F981FA31E56FD43795C6A6E51FCD97193379AF08DFD62468F701000D2AF419D543BB2348A7C07C654BEF732A85D273F9F4E6727D0ADC8F442F747DA1F81F69FA8BF5CDA56B238047904E658E3509DA7D0040830A7D423EA4BBB9F4447E3C740AD211AC2BF3E238E896B07DDD4EE9F6C969FECFE27E5AF6AEFC6F73694AF57D40BB0F006850A1574B41785843A17C6B0CEF8EE1DB2D3DD2A55FA7BF4D51D2EDF9B1DCA042718FB4CCBCC642F1BF1B9B4B8D69FAFDD18B9DFECE6AFD3BD3DA04ED3E00A041853E6195B376C730EDE6724DFDE8D207A30C6E9AF281983EB8A9B8774353F9A4FAD1933F1197C06ADF037D72F394DDD3F25FB03641BB0F006850A1D7AB6F9AF4DEEA63A41B0BC5CF0F193B65D74A691855DEA1716CF9FD2960FF383F31595371740CF98EE1DE95E74821FB8C346FB0B509DA7D0040830ABDDA90C2944F37144AF745486E09C4F975A4FFB7BAD417CAC7353417F74B617B4084EAD6E5BE9FE6DD5119169E6E8F3F69CCE47758A3A0DD070034A800A0DD070034A80080761F0034A80080761F0034A80080761F0034A80080761F0034A80080761F00D0A00280761F00D0A00200DA7D00D8AC0DAAA2288AA2287DA7D8FB010000000000000000000000000000000000000000000000000000000000000000000072FF1FDE68C4B57D09750D0000000049454E44AE426082, 1); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('73c05224-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'hist.var-assigneeList', NULL, 0xACED00057372001E636F6D2E616C69626162612E666173746A736F6E2E4A534F4E417272617900000000000000010200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000003770400000003740005757365724274000575736572437400096C65616465724C617778, NULL); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('74c066fe-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'hist.var-assigneeList', NULL, 0xACED00057372001E636F6D2E616C69626162612E666173746A736F6E2E4A534F4E417272617900000000000000010200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000027704000000027400096C65616465724C6177740005757365724378, NULL); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('9d23d446-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract.bpmn', '9d23d445-1cd7-11ec-acd8-3ae4f1d3c3af', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A62706D6E323D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A64633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E222069643D226469616772616D5F666C6F77436F6E747261637422207873693A736368656D614C6F636174696F6E3D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2042504D4E32302E787364223E0A20203C70726F636573732069643D22666C6F77436F6E747261637422206E616D653D22E59088E5908CE5AEA1E689B92220697345786563757461626C653D2274727565223E0A202020203C657874656E73696F6E456C656D656E74733E0A2020202020203C666C6F7761626C653A657865637574696F6E4C697374656E6572206576656E743D22656E642220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E557064617465466C6F775374617475734C697374656E6572223E3C2F666C6F7761626C653A657865637574696F6E4C697374656E65723E0A202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C73746172744576656E742069643D224576656E745F3170736D697364223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D2241637469766974795F306E796C61317222206E616D653D22E59088E5908CE5BD95E585A52220666C6F7761626C653A61737369676E65653D22247B7374617274557365724E616D657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935343932303334383934363433322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A66616C73652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839363537313222206C6162656C3D22E68F90E4BAA42220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F303063657865612220736F757263655265663D224576656E745F3170736D69736422207461726765745265663D2241637469766974795F306E796C613172223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3175637268353222206E616D653D22E4B89AE58AA1E983A8E9A286E5AFBCE5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22247B64657074506F73744C65616465727D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935343932303334383934363433322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550545F504F53545F4C45414445522671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E44657074506F73744C65616465724C697374656E6572223E3C2F666C6F7761626C653A7461736B4C697374656E65723E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839373234353522206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30346B63616A632220736F757263655265663D2241637469766974795F306E796C61317222207461726765745265663D2241637469766974795F31756372683532223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30323666766E712220736F757263655265663D2241637469766974795F3175637268353222207461726765745265663D22476174657761795F30396364787466223E3C2F73657175656E6365466C6F773E0A202020203C706172616C6C656C476174657761792069643D22476174657761795F30396364787466223E3C2F706172616C6C656C476174657761793E0A202020203C757365725461736B2069643D2241637469766974795F3133386D346E6E22206E616D653D22E5B7A5E7A88BE983A8E5AEA1E689B92220666C6F7761626C653A63616E64696461746555736572733D2261646D696E2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353139343939313937323335322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839373831303122206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F307A7A307539672220736F757263655265663D22476174657761795F3039636478746622207461726765745265663D2241637469766974795F3133386D346E6E223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F30746D336D706822206E616D653D22E980A0E4BBB7E983A8E5AEA1E689B92220666C6F7761626C653A61737369676E65653D2261646D696E2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353139343939313937323335322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839383233373722206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F317978716265302220736F757263655265663D22476174657761795F3039636478746622207461726765745265663D2241637469766974795F30746D336D7068223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31323465387A332220736F757263655265663D2241637469766974795F3133386D346E6E22207461726765745265663D22476174657761795F306F79366F666C223E3C2F73657175656E6365466C6F773E0A202020203C706172616C6C656C476174657761792069643D22476174657761795F306F79366F666C223E3C2F706172616C6C656C476174657761793E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3175766A3364732220736F757263655265663D2241637469766974795F30746D336D706822207461726765745265663D22476174657761795F306F79366F666C223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3179757579696522206E616D653D22E8B4A2E58AA1E983A8E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303936343531393339353333323039362C313434303936343531393339313133373739322220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353132373739303833333636342671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B504F53542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383930333738313422206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383930343234383922206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F316B79686E6C7A2220736F757263655265663D22476174657761795F306F79366F666C22207461726765745265663D2241637469766974795F31797575796965223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3039386E63767722206E616D653D22E6B395E58AA1E983A8E4BC9AE7ADBE2220666C6F7761626C653A61737369676E65653D22247B61737369676E65657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353030313039333439323733362671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383931393036363222206C6162656C3D22E5908CE6848F2220747970653D226D756C74695F6167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383931393734303622206C6162656C3D22E68B92E7BB9D2220747970653D226D756C74695F726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D2266616C73652220666C6F7761626C653A636F6C6C656374696F6E3D2261737369676E65654C6973742220666C6F7761626C653A656C656D656E745661726961626C653D2261737369676E6565223E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B6E724F66496E7374616E636573203D3D206E724F66436F6D706C65746564496E7374616E6365737D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3064693671613622206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F3179757579696522207461726765745265663D2241637469766974795F31656577743031223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D22476174657761795F316D356672757A223E3C2F6578636C7573697665476174657761793E0A202020203C73657175656E6365466C6F772069643D22466C6F775F306A7976317A622220736F757263655265663D2241637469766974795F3039386E63767722207461726765745265663D22476174657761795F316D356672757A223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F316833706E787922206E616D653D22E680BBE7BB8FE79086E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303931313431303538313231333431362220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935343932303334383934363433322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383934343935303822206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383934353238353022206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31663879786F7622206E616D653D22E5908CE6848FE4BABAE695B0E5A4A7E4BA8E3430252220736F757263655265663D22476174657761795F316D356672757A22207461726765745265663D2241637469766974795F316833706E7879223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6D756C74694167726565436F756E74202F206E724F66496E7374616E636573203E20302E347D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C656E644576656E742069643D224576656E745F3132616A6F3364223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31613371636C6D22206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F316833706E787922207461726765745265663D224576656E745F3132616A6F3364223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F306C6C6F79353622206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F3179757579696522207461726765745265663D2241637469766974795F306E796C613172223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3165657774303122206E616D653D22E6B395E58AA1E983A8E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303936343338373937393339393136382220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353030313039333439323733362671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B504F53542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383933333730323422206C6162656C3D22E4BC9AE7ADBE2220747970653D226D756C74695F7369676E222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383933343139303122206C6162656C3D22E58AA0E7ADBE2220747970653D226D756C74695F636F6E7369676E222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F307A6D736E33782220736F757263655265663D2241637469766974795F3165657774303122207461726765745265663D2241637469766974795F3039386E637677223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3176737269766222206E616D653D22E5908CE6848FE4BABAE695B0E5B08FE4BA8E3430252220736F757263655265663D22476174657761795F316D356672757A22207461726765745265663D2241637469766974795F306E796C613172223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6D756C74694167726565436F756E74202F206E724F66496E7374616E636573203C3D20302E347D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F316D323430366622206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F316833706E787922207461726765745265663D2241637469766974795F306E796C613172223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F666C6F77436F6E7472616374223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22666C6F77436F6E7472616374222069643D2242504D4E506C616E655F666C6F77436F6E7472616374223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F3170736D697364222069643D2242504D4E53686170655F4576656E745F3170736D697364223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D2239322E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F306E796C613172222069643D2242504D4E53686170655F41637469766974795F306E796C613172223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223138302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31756372683532222069643D2242504D4E53686170655F41637469766974795F31756372683532223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223334302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F30396364787466222069643D2242504D4E53686170655F476174657761795F30396364787466223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D223530352E302220793D223330352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F3133386D346E6E222069643D2242504D4E53686170655F41637469766974795F3133386D346E6E223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223636302E302220793D223136302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30746D336D7068222069643D2242504D4E53686170655F41637469766974795F30746D336D7068223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223636302E302220793D223339302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F306F79366F666C222069643D2242504D4E53686170655F476174657761795F306F79366F666C223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D223835352E302220793D223330352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31797575796965222069643D2242504D4E53686170655F41637469766974795F31797575796965223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313030302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F3039386E637677222069643D2242504D4E53686170655F41637469766974795F3039386E637677223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313336302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F316D356672757A222069643D2242504D4E53686170655F476174657761795F316D356672757A223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D22313531352E302220793D223330352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F316833706E7879222069643D2242504D4E53686170655F41637469766974795F316833706E7879223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313637302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F3132616A6F3364222069643D2242504D4E53686170655F4576656E745F3132616A6F3364223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D22313836322E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31656577743031222069643D2242504D4E53686170655F41637469766974795F31656577743031223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313139302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F316D3234303666222069643D2242504D4E456467655F466C6F775F316D3234303666223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313732302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313732302E302220793D223534302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231302E302220793D223534302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223935342E302220793D223532322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31767372697662222069643D2242504D4E456467655F466C6F775F31767372697662223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313534302E302220793D223330352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313534302E302220793D223133302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223133302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223239302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2238392E302220783D223834312E302220793D223131322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F307A6D736E3378222069643D2242504D4E456467655F466C6F775F307A6D736E3378223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313239302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313336302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F306C6C6F793536222069643D2242504D4E456467655F466C6F775F306C6C6F793536223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313035302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313035302E302220793D223530302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223530302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223632392E302220793D223438322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31613371636C6D222069643D2242504D4E456467655F466C6F775F31613371636C6D223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313737302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313836322E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D22313830352E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31663879786F76222069643D2242504D4E456467655F466C6F775F31663879786F76223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313536352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313637302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2238392E302220783D22313537332E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F306A7976317A62222069643D2242504D4E456467655F466C6F775F306A7976317A62223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313436302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313531352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30646936716136222069643D2242504D4E456467655F466C6F775F30646936716136223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313130302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313139302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D22313133342E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F316B79686E6C7A222069643D2242504D4E456467655F466C6F775F316B79686E6C7A223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223930352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313030302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F3175766A336473222069643D2242504D4E456467655F466C6F775F3175766A336473223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223736302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223335352E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31323465387A33222069643D2242504D4E456467655F466C6F775F31323465387A33223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223736302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223330352E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31797871626530222069643D2242504D4E456467655F466C6F775F31797871626530223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223335352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223636302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F307A7A30753967222069643D2242504D4E456467655F466C6F775F307A7A30753967223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223330352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223636302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30323666766E71222069643D2242504D4E456467655F466C6F775F30323666766E71223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223434302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223530352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30346B63616A63222069643D2242504D4E456467655F466C6F775F30346B63616A63223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223238302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223334302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30306365786561222069643D2242504D4E456467655F466C6F775F30306365786561223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223132382E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223138302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('9edcf5f7-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract.flowContract.png', '9d23d445-1cd7-11ec-acd8-3ae4f1d3c3af', 0x89504E470D0A1A0A0000000D4948445200000774000002260806000000AB78BB71000069854944415478DAECDD07981D55D938F05014AC34FB5F6CE0A7D83F15151B114114145009D98426862F8496DD0D298A88A11B5BB27743899F48533F0145098A81ECBD1702482F22016921B484D02142820AF39F77D859EE6E76934DB26576F7F77B9EF3E496B96577DF9C79CF79E7CC0C1B06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000834CE389D52D1B7FF6D757AC6ABBC9D32E7FCD4127565FDDDDE7279D587D93DF2E000000000000402A8AA9F5A5CA5F56D6F2826B7A7B7C6373F93BD11A9ACBB736942A67B4DD2F951B3A7BFFC6E66A7D7DA97A40C7C70F3CE9B24D1A9A2BA7C7EBEA9BAB7BA5EFF5C7A953A7AE9B3E76F7CABE6FFD8CF2E7D36D4FE9ECB9F4BDFEB7CB9FA3A9F2B3EEFE4EE27B747CECD0D2851BACF858F5AD63675DF7325104000000000000F48AD6C2EA8D8DCD977EB0B316CFC536B16D43A9B2736373A5B1A154BEB9A1B9BA5BD64A953BD3FB07C6739DBD7F7DA932A9B1A9BA6FC7C763756F1466EB9BAA273496AACDF5A5F2110DD3E7BD397DEC9186A6F2D4688DA5F22756785DA9B26D146E3BFBAC6CD570FEBD9BCA13E3FDF3FB8796CA5B74DC7ECAACB91BA5DBDC54DF5C1D993D9024EBA4F74F4ADBC28652F5C2F83EAD3FC3F8F899D3CFBE62C439E7AC973DD65CD9B1A1A97A717E1F000000000000A0C76505DD52E5F286A6CA842850B66F5951F4F2D8A6B1A9B247AC9E6D2C5516A48FDD17B75BDB03F9EDC6A66A5DC7F7AF6FAA9E5C5FAA4EE9F8F884A6CA4EE9FBDC92B6246D8BE273D2CF189BFE5B6E2D10DF7E68A9E57DB16DAC988DEDE3766D4137FD8EDF1B3BEB825776F67365DFB7A97274573FF7D4D3AA1B3694AAF3E2F30F69BEF49DADEF77707A7F4EB652B8A9F2DD585D9C1579D39FB1F16773364D9F9B3BBEA9FA81F14D97BE3BBD7DFDC1335B36134100000000000040AFC90BBA71EDDAFA1995F7B46F2D6FCC0BBAB16DC3F44BB74AEFFFAAA1543EADB6353695CFCA8BAF1DC5AAD6F435F7765CC97A48F3C56FA92F956F489F3B3BDDE6BAACF0DB54F9657ABBE5B099E5B7C7E7BCF41E2D9F8BC75BDFEFA5826E9CF2B9A932F6C5EF56DD380AB3794BDFFB90F4F999B58FC536B1EDD4A9D5F51B4AD5D9E9F3A7A6EDE1EC435E2CDCDE1D9F1577EB9B2BBB3496AAE7642B899BCBB7B6AEE65D38F1E48BDE90BEF69AF477F321D103000000000000F4AABCA03B79DAE5AF7971A56C143AB362E7A22880B62BE83697B78B226CDA7E52DB62B56A3CD7F1BDA3E819AB70EB9BABE7D53757BE59FB5CEB299B87D7972AC74D28553F35E1C44B374FB7AD66AB669BAAFB37962A47E5DBA6B79BD2F718D37ABBADA09BBEFFD6F1FED9ED99D5AF66D7E47DA95D9A3EF7B7768FC569A15F2CDCA6B7ABD3E33B3436952F88D71FD65C7D6F149EDBBE5F536542FA593FCA3EB3B9FC9DF8191A4BE5AFC5B57ED3D7EE9EBEC767C63755BEE81ABA00000000000040AFC90BBA87962E7C6D1453F3C7A3B89A3F575BD06D68AE5C15C5D6DA966E7375C7826E9CB6B8BEB9F2E76C75ED89D52DA3C01A2B63F3E71B4BE52FA5AFBB287DFDE3E9BFBF8FCF8EE26876AAE452E5A986E9D58FC476F54D73DF969DD6B975756DC76BE8C6678F6F2A7FBAE3CFD5D529971B9BCBE3D2D73C9D1574E354D3A5CAF5F533CA9F6F2DD6FEA9F6E78FF768F7DA52F598F4E73C36AEB91B2B86E37B64A76506000000000000E80DED0BBA95875E3A9572E5A18E05DDFA52657CACAACD56ACA6B763E56C763DD9E6F257EA9BAB7BD5BE6F3CD758AA36E7F71B9A2BC7A7AFF9CB4127565FFDD236D5735EBC5E6EB9A1A1A93CB575BBCFA49FF9EFC6E92DEFCAEE972A3F6D6CAE1C54F3BEED0BBA4DE5BDD336A3E3CFD5554137BEEF84A6962F448BEBF4A6AF3D344EA3DC5A38BE2ABB7E6EFAF3E4B7DB3E2756E596AAB363856FFADEBF8B4275FAF34C8ADF8528020000000000007A455EB48DDBD929966B5A142FE314CBD93633CB1F4DB7BBECD052798B28764EFCF145AFCAAE7B3BB3658728A8C6E98DE314C88D3F9BB36943A9FC87B87E6DED8ADCECFD63756B5C3777FABC3767F7A3185BAA2C4FDB7FEA4BD50362556E5CAF367DFDA8EC74C9E97687962EDCA0B6B01A85E3C652E5E7F9FD58D53B76D605AFECF8734511B8F6B4CD1DBD781DDDCAD238D574DB6B4AD5E6F4B3EF8855BBB5D7046E3D75F4B551F4CEEE972A47A6F77F9BFE7B5B5C0B581401000000000000BD62CAACB91BD59E6A3917D79BCDAE7F5B2ADF90AD4A2D55B78FD5B1AD85D039F5A5CA9551088E7F273455769A50AA7CB86166CB3651EC8CE26C579FD7D854199B3E3F2556C6C6F568E3D4CB07CF6CD92C5E97ADD8CD4FB53CB36587FAA6EA096DAF9BDEF2AE28A0468BD32377F9FECDD58F67A7802E55FE1EA7525EDDDF47ED0AE2B6DFC5F44BB7EA58B88D9FB7B6180C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014445D5D5DA2699AA6699AA6699AA6699AA6699AD6D3CDEC2B00400F1574FD1600000000809E64DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205C0109424C9CB172C5870CE95575EF9AF72B99CCC9D3B57EBE396FEDE5F98376FDEA24AA5B2AB88040000BA62DE1100406205C010B460C18273E7CD9B972C59B22459B66C59F2DC73CF697DDCE2F71EBFFF4B2EB9E4A9B973E7EE2C2A010080CE987704009058013004C5CADC28262AACF67F5BBC78F1A373E7CEBD46540200009D31EF080020B10260088AD32C5B995B9C95BA73E7CE5D2E2A010080CE987704009058013004C5355C15538BD3E2EF212A010080CE98770400905801300475B7A0FBCF2717270BAE3D2D99DF7274D6E2763CA608ABA00B0000F40DF38E0000122B0086A0EE1474973EF16072CB45DF4FFEF6E749ED5A3C16CF29C42AE8020000BDCFBC230080C40A8021A83B05DDFBE7CF5EA1989BB707E65FA010ABA00B0000F401F38E0000122B0086A0EE14746FAB4EEBB2A01BCF29C42AE8020000BDCFBC230080C40A8021A83B05DD5BE64EEDB2A01BCF29C42AE8020000BDCFBC230080C40A8021484157411700001818CC3B020048AC001882BA53D09DDF72749705DD784E215641170000E87DE61D01002456000C41DD29E8DE79C5CC2E0BBAF19C42AC822E0000D0FBCC3B020048AC001882BA53D07DECC19B935B2EFEC18AA75B4E1F8BE714621574010080DE67DE1100406205C010D49D826EB47BAE3B7385826E3CA608ABA00B0000F40DF38E0000122B0086A06E1574972F4FEEFCEBC92B9E6E397D2C9E538855D00500007A9F7947000089150043D0AA0ABA4B9F7830B9E38AE62EAFA11BCFC5368AB10ABA000040EF32EF080020B1026008EAB2A0BB7C79B2F8CE4AF2F739877759CCCD5B6C13DB5AADABA00B0000F41EF38E0000122B0086A0CE0ABAAB5A956BB5AE822E0000D0F7CC3B020048AC0018823A2BE8766755EECA56EB2ACC2AE80200003DCFBC230080C40A8021A8B382EE9A1673F3A630ABA00B0000F43CF38E0000122B0086A02EAFA1AB29E80200008562DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000CAEFD51356DC357B59D82AE822E00003060C679C60B0000122B0006D3FEA8B5ADB4B0ABA0ABA00B00000C9C719EDF020080C40A8041B43FEAD03A2DEC2AE82AE802000003679CE7B7000020B1026010ED8FBA68ED0ABB0ABA0ABA0000C0C019E7F92D000048AC001844FBA355B4ACB0ABA0ABA00B00000C9C719EDF020080C40A1862FD95A615B1A0BB6CD9B264E9D2A5ABDC6ED1A245C96DB7DDB65AEFBD64C992E4CA2BAFECF2F9471E7924993F7F7E767BE1C285C9934F3E997D9F7FFCE31FDDFA4E6BDBC4E4E06FF63E000098770400905801E8AF28CC2997CF3AEBACE4A73FFD6997EDF4D34FCFB6BBFCF2CB937DF7DD37F9D8C73E96BCE215AF480E3AE8A0E4FDEF7F7FF2BEF7BDAF5D5BBE7C79B278F1E2E4B2CB2E4B76DB6DB7E4831FFC60763BDAF7BFFFFD76DBC6674771F684134E686B3BEFBC73B2EEBAEB26C71E7B6CBBC7EFBCF3CEEC7BFCFAD7BF4E5EFFFAD767B737DA68A3E4ECB3CF4E1E7CF0C1F8BF925C77DD7556E8A2DF0500403E090020B102D05FD1337FDF95157273BD5DD0DD6FBFFD92ADB7DE3A6B1FF8C007B2C268FC9B3F16DF2DB6AB56ABC92EBBEC92ACB3CE3AC911471C915C73CD35D9B651F43DEFBCF392638E3926BB1FAB65CF3CF3CCEC76C7B6CF3EFB249FFDEC67931FFFF8C7D9FDD9B36727E79E7B6EB2FEFAEB275FFEF297BB6CB1ED85175E98DC7DF7DDC9E4C993938D37DE382997CB0ABAE8770100904F020048AC00F457F4DEDF776585DC5C5F9E72394E5B9C7E6472F3CD3777FADCF9E79F9FAD9E3DFEF8E3936BAFBD36DBF6C0030F4C8E3BEEB8E480030E682BE8C6F651783DFAE8A3B315BBDB6DB75D72EAA9A726DFFEF6B793BDF6DA2BF9D18F7E94ADB27DE69967928B2EBA285BE97BCF3DF7642D4EB71CEF138FE78F7DF8C31F4EAEB8E28A64FAF4E9C9061B6C901595DFFBDEF76605DD33CE3823DB265E3375EAD4649B6DB6E9F4FB2BE8A2DF0500403E090020B102D05FB13A7FDF951672734529E8C64ADC57BDEA55D9F3AF7DED6B939FFCE427C937BEF18D766DF7DD77CF0AB877DC714756E07DC73BDE91ADC08DD79C72CA29593137DA873EF4A1AC109CBF779C467958272B7AF3169F5DBB6DED2997E3F9CF7DEE73D9BFF1FDC68D1B977DBE822EFA5D0000E4930000122B00FD15BDAE2805DD6853A64CC99E9F38716252A954B2026EC7162B69C78F1FDF696176871D7648468D1A956CB5D55659C1B7B648BBE9A69B26D75F7F7D766AE5D8360AC1717F8B2DB658A1A01B05E538CD731474E35ABB717DDF784D7CB6532EA3DF0500403E090020B102D05FD1678A52D08D55AF1B6EB861F6FCCB5EF6B2AC307BF8E18767D7C58DC71A1B1BB3FB37DD7453B64A77D6AC59C949279DD4D62EB8E082B6532E5F7DF5D5C9CB5FFEF2E4BEFBEE5BAD15BA71BDDC38FD723CF695AF7CC53574D1EF0200209F0400905801E8AFE85F4529E846E176E79D774ED65B6FBDE4A8A38ECA56C8C6E98D77D96597EC3563C68C490E3AE8A0B6ED63BBCD37DF3CBBD6EDC61B6F9C1560F3826E3C1FD7CD9D366D5A5B4177934D3649AEBAEAAA64F6ECD9D9FBFDE637BFC9EED7AED08D6BF86EBFFDF6C9EB5EF7BAB6532E772CE8FEF39FFF54D045BF0B00807C1200406205A0BFA26F14A5A07BDC71C76505D328D456ABD5E4E1871FCE0ABABBEDB65BF69AFDF6DB6F8582EE9C3973B2DB871C72485B4177DB6DB74D264F9E9C6CB6D9665931766DAFA1DBB1A0BBC71E7BB4DB5E4117FD2E0000F2490000891580FE8A5ED39B05DDD34F3F3D2BB0E66DEBADB7CE0AA39FF8C427DA3DFECB5FFE3279F6D967DB0AB551D08D42EA8C193392830F3E387BCD09279C90DDCFBF6F6CB7DD76DB257BEEB967F29EF7BCA7ADA01BD7D9FDC217BE9015831F7BECB16CDB2BAFBC323B6573ACAEBDF3CE3BB3F7BBF6DA6BB3FBF1BE2D2D2DD9760F3DF450B63A380ABAF17C7CC6473EF29164D75D77CD5E3373E6CCE4DDEF7E77D2D4D4A4A08B7E170000F9240080C40A407F45EFEBCD82EE25975C921C79E491AB6C7941B5B6A01BA758FEE4273FB9423BFEF8E3DBB6FBEA57BF9A156EE3F4CA1D4FB9DC555BB87061569CBDF1C61B5778EE17BFF845F6DCD7BFFEF5EC9ABC6F7DEB5BB3F72F97CB59113A9E7BCB5BDE92CC9F3F5F4117FD2E0000F2490000891580FE8ADED797A75CEE4EBBF7DE7BBB759DDABBEEBA2B59BA7469DBCADA458B16258B172FCEFE5DD9EB9E79E699E49A6BAE697B6D6D8BCF8DF788DBCB972F5FE1F9A79E7AAAD3C71574D1EF0200209F0400905801E8AFE815452BE80EF5A6A0ABDF050000F9240080C40A407F451B055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF28A872B9FCC2B265CB14530BD0D2BFC3A2B973E72E1795FA5D0000904F020048AC00F45764E6CD9BB768C992250AAA0568F7DE7BEF6FE7CE9D7B8DA8D4EF0200807C1200406205A0BF2253A95476BDE4924B9E5ABC78F1A356EAF6DBCADCC50B172EFCCDDCB973EF4BDBCEA252BF0B0000F2490000891580FE8A3651448C95A1697B2EAEE1AAF5797BAEF5F7AF98ABDF050000F9240080C40A407F05A0DF0500403E090020B102D05F01A0DF0500403E090020B102D05F01E8770100904F020020B102F45700E8770100904F020048AC00F45700FA5D0000904F020048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B00FD15807E170000F9240000122B407F05807E170000F9240080C40A407F05A0DF0500403E090080C40AD05F01A0DF0500403E090020B102D05F01E8770100403E090020B102D05F01E8770100904F020048AC00F45700E8770100904F020048AC00F45700FA5D0000E493000048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B407F05807E170000F9240080C40A407F05A0DFF55B0000403E090020B102D05F01E8770100904F020020B102F45700E8770100904F020048AC00F45700FA5D0000E493000048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B00FD15807E170000F9240000122B407F05807E170000F9240080C40A407F05A0DF0500403E090080C40AD05F01A0DF0500403E090020B102D05F01E8770100403E090020B102F457FA2B00FD2E0000F2490000891580FE0A00FD2E0000F2490000891580FE0A40BF0B00807C1200008915A0BF0240BF0B00807C1200406205A0BF02D0EF0200209F944F020048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B00FD15807E170000F9240000122B407F05807E170000F9240080C40A407F05A0DF0500403E0900C0AA93A86A2452AB6855BF29C0401000FD2E0000F2490080BE4FA28677A3A03BDC6F0A30100440BF0B00807C1200A07F12A9AAD5B980812000FA5D0000E4930000C54CA4865B9D0B180802A0DF0500403E090050DC64AA6A752E602008807E170000F92400403193A9E156E702068200E8770100904F02001437A1AA5A9D0B180802A0DF0500403E090050CC846AB8D5B980812000FA5D0000E4930000C54DAAAA122BC0401000FD2E0000F2490080622655C3255680812000FA5D0000E49300C0A09324C9CB172C5870CE95575EF9AF72B99CCC9D3B7740B648AC06EA774F7FEF2FCC9B376F51A552D955FCCDD5C49F812000FA5DE493F249C4BDB817A79A38954FA25FD3F46B00B97427746EDA09264B962C49962D5B963CF7DC735A1FB7F8BDC7EFFF924B2E792ADD31ED2CFE34F1672008807E17F9A47C12712FEEC5A9264EE593E8D734FD1A40268E288A4ED00EA1FFDBE2C58B1F4D7744D7883F4DFC190802A0DF453E299F44DC8B7B71AA8953F924FA354DBF069089D34338A2A8384718A53BA2E5E24F137F068200E877914FCA2711F7E25E9C6AE2543E897E4DD3AF0164E2DCF37602C569F1F7107F9AF833100440BF8B7C523E89B817F7E25413A7F249F46B9A7E0D60B57644FF7C7271B2E0DAD392F92D47672D6EC763761E7644E24FFC61200850A03EB61AFDEC2A5AD56F4A3E299F944F8A7B4DDC8B53718A713CFA35FD1AC0A0DA112D7DE2C1E4968BBE9FFCEDCF93DAB5782C9EB303B123127FE20F03418082F4B1C3BB51D01DEE37259F944FCA27C5BD7815F7E2549C621C8F7E4DBF0630A87644F7CF9FBDC24E286F0FCCBFC00EC48E48FC893F0C04018AD4CF56ADCE954FCA27E593E25EDC8B7B71AA8953E378F46BFA358021B523BAAD3AADCB1D513C6707624724FEC41F06820005EA67875B9D2B9F944FCA27C5BDB817F7E25413A7C6F1E8D7F46B00436A4774CBDCA95DEE88E2393B103B22F127FE30100428585F5BB53A573E299F944F8A7B712FEEC5A9264E8DE3D1AFE9D700EC88EC88EC88C49FF8C34010A0987DED70AB73E593F249F9A4B817F7E25E9C6AE2D4381EFD9A7E0D60C8EC88E6B71CDDE58E289EB303B123127FE20F03418002F6B755AB73E593F249F9A4B817F7E25E9C6AE2D4381EFD9A7E0D6048EC88EEBC6266973BA278CE0EC48E48FC893F0C04010AD8DF0EB73A573E299F944F8A7B712FEEC5A9264E8DE3D1AFE9D70086C48EE8B1076F4E6EB9F8072B9E26227D2C9EB303B123127FE20F03418082F6B955FDAE7C523E299F14F7E25EDC8B53712A4E8DE3D1AFE9D70006FD8E28DA3DD79DB9C28E281EB3F3B023127FE20F03418002F7B9C3478C18A1DF954FCA27E593E25EDC8B7B712A4E318E47BFA65F0318E43BA2E5CB933BFF7AF28AA789481F8BE7EC40EC88C49FF8A3DBB66D1D086EEB5701D037FDEE861B6EA8DF954FCA27E593E25EDC8B7B712A4E318E47BFA65F0318BC3BA2A54F3C98DC71457397E7FE8FE7621B3B113B22F127FE58F520306D4BD236B1F55F834100FD2EF249F924E25EDC8B53712A4EE593E8D734FD1AC01AEE88962F4F16DF5949FE3EE7F02E7742798B6D625B4719D911893FF1C72A0781DB76711F00FD2EF249F924E25EDC8B53712A4EE593E8D734FD1A40F77644AB3A9AC851467644E24FFCB15683C0553D0E807E17F9A47C12712FEEC5A93815A7F249F46B9A7E0DA0EB1D51778E265AD9514676287644E24FFCD1EDC19EC120807E17F9A47C12712FEEC5A93815A7F249F46B9A7E0D60F576446BBA13CA9B1D8A1D91F8137FACD620CF601040BF8B7C523E89B817F7E2549C8A53F924FA354DBF06D0FD1D91664724FEC41F7D3608341804D0EF229F944F22EEC5BD38D5C4A97C12FD9AA65F1B34BEF5AD6F6D5C5757B7FBC891234BE9BFE5B4DD93B667D396B4FE1BF7CBADCFEF1EDBFBAD0D414F3DF5D4A6B367CF3E7AE6CC997F3BEAA8A31E9D3265CAB2030F3CF085089471E3C6FD7BE2C4894F7FEF7BDFBBEFE8A38FBE60D2A4495F4E5FB28E1D911D801D91F8D32442FD3808341804D0EF229F944F1640E389D52D1B7FF6D757887BCD384A9C8A53F9E460C927BBBB6F9B3CEDF2D71C7462F5D5DD7D7ED289D537ADECFD0E2D5DF8DA29B3E66EA45FD3F46B033FF75C1DA3468DDAA1AEAEEEBCB43DD75ABCED6E8BEDCF8BD7DB250D01575F7DF5B81933663C78C001072453A64C49CE3DF7DCE4FAEBAF4FEEBEFBEEE4B1C71E4B42FC1BF7E3F1787EF2E4C92F8C1933E6B94993265D347AF4E87749B0353B22F127FEE8A741A0E202807E17F9A47CB287C484737DA9F29795B57C523ABD3DBEB1B9FC9D680DCDE55B1B4A9533DAEE97CA0DE25E338E12A7E2543E59847CB2B7F76D8DCDD5FAFA52F5808E8F1F78D2659B3434574E8FD7D53757F74ADFEB8F53A74E5D377DECEE957DDFF80EF5A5F2219D3D97BED7FF76F97334557ED6DDDF497C8F8E8F1D5ABA7083151FABBE75ECACEB5EA65FD3AFC93D7BCFA851A3B6A9ABABBB6A358BB85DB5ABE2FDEC9E06A19B6FBE79A7934E3A69D1D8B16393DFFFFEF7C9238F3C92AC8ED83E5E3766CC987F3536369E9306CAEB24D89A1D91F8137FF4D2202EA9698A0B00FA5DE493F2C95ED03AF97C6363F3A51FECACC573B1CD8B93CA959D1B9B2B8D0DA5F2CD0DCDD5DDB256AADC99DE3F309E13F79A71943815A7433E9FECCBF7E9B77D5B7DA932A9B1A9BA6FC7C763F560FA9A53EA9BAA273496AACDF5A5F2110DD3E7BD397DEC9186A6F2D4688DA5F22756785DA97278637379BFCE3E2B5B95987FEFA6F2C478FFFCFEA1A5F2161DB78F95BEE93637D5375747BE98E127EBA4F74F4ADBC28652F5C2F83EAD3FC3F8F899D3CFBE62C439E7AC973DD65CD9B1A1A97A717E5FBFA65F937BF6AC6F7DEB5B1B8E1C39F2C4BABABA173A16661B1A1A925FFFFAD72B5D7819CFC7769D14755F88F78DF7B7AB1A04D2BFFB7A175E78E1EC28E49E71C619C9D2A54B93B511AF8FF74903E4D9BDF6DA6B3709B626C1167FE28F5E18BC75A7B0A0B800A0DF453E299F5CDB49B552E5F286A6CA8498C46DDFB289E3CB639BC6A6CA1EB1C2A8B15459903E765FDC6E6D0FE4B71B9BAA75E25E338E12A7E27448E793FDF57E7DBA6FAB6FAA9E5C5FAA4EE9F8F884A6CA4EE9FBDC92B6246D8BE273D2CF189BFE5B6E2D40DD7E68A9E57DF54D73DFD6582A7F296FE9E3673796AAC7D43E76D8CCF2DB3BBE7FF67D9B2A4777F5734F3DADBA6143A93A2F3EFF90E64BDF198FA53FF3C1E9FD39D94AE1A6CA7763757156E44D7FC6C69FCDD9347D6EEEF8A6EA07C6375DFAEEF4F6F507CF6CD94CBFA65F937BF6BCBABABACD478D1AF5B7DA42ECE8D1A39359B366250F3CF0C06AD5E762FB785DBCBE4361F7A6F81CBBAC012CFDFB6E7CD65967DD71F0C107270B162C487A52BCDFD8B163978D1933E62809B626C1167FE28F1E1EB475B7B0A0B800A0DF453E299F5CCB49B5B8BE5FFD8CCA7BDAB79637E6936AD9A4F0F44BB74AEFFFAAA1543EADB6353695CF8A096A71AF19478953713AE4F3C922BC6FAFEFDB62556BFA9A7B3BAE643DA4F9E2B7D497CA37BC58A0AD5C97157E9B2ABF4C6FB74481363EE7C5D7B77CAEA1A932ADAD952A8F6545AB9AC7D2D77EB6617A75E328CCE62D4ECB9C6E3BB3F6B1D826DE73EAD4EAFA0DA5EAECF4F953D3F6706B61609D170B622D9F8BBBF5CD955D1A4BD573B295C4CDE55B5B57F32E9C78F2456F485F7B4DFABBF9907E4DBF26F7EC79A3468D7A6FDA1EAC2DBE4E9B362DB9FFFEFBD7AA3E17AF8FF7E950D4BD3F3ECFAE6B008A626EA9547AE288238E489E78E289A437C4FB4E9932E5D97DF6D9E74C09B626C1167FE28F1E1CACAD4E6141710140BF8B7C523EB916936A93A75DFE9A175713C564703621BC282689DB4DAA3597B78B89EAB4FDA4B6C58A9E784EDC6BC651E2549C0EF97CB210EFDF9BFBB6287AC62ADCFAE6EA79F5CD956FD63ED77A4AD8E1F5A5CA71134AD54F4D38F1D2CDD36DABD9AAD9A6EAFE8DA5CA0A8BA226942EFDEF749BBBD26DFE1AA7576EF75933AB5FCDAEC9FB52BB34DDF66FED1E8BD3CEBE58B84D6F57A7C777686C2A5F10AF3FACB9FADE283CB77DBFA6CA84F43BFC286EC73548E367682C95BF16D7FA4D5FBB7BFA1E9F19DF54F9A26BE8EAD7E49E3DA77565EE83B5AB7267CF9EDDA335BA78BF0EAB75EFB752778089D32C9F75D65977463137FED3F6A678FF8913273EB9E79E7B7E4F82AD49B0C59FF8A3870669AB5B58505C00D0EF229F944FAEE1A4DAA1A50B5F1B13CE6D93BEA54A357FAE7652ADA1B972554C48D7B6749BAB157435E328712A4E07753EB94EDAF66DFD776D74F63E3D9E4FF6D6BE2D4E5B5CDF5CF973AC788DE26B145863656CFE7CEBE9932F4A5FFF78FAEFEFE3B3A3389A9D3AB65479AA617AF5231DBF6BAC98CD4E3DDB5CF94C145857F6737575CAE5C6E6F2B8F4FD9FCE0ABA712ADB52E5FAFA19E5CFB7166BFF54FBF3C77B74F8FC63D29FF3D8B8E66EAC246E2895FF373B2DB37E4DBF26F75C6B714DDBDAD32CEFB7DF7EC98D37DED82B35BA78DF78FFDAD32FBBA6EE0012D7CC3DE490437A6D656E672B75F7DF7FFFA7D340D94582AD49B0C59FF8A30706676B5258505C00D0EF229F944FAEF1A45AE5A1974E675779A8E3A45A7DA9323E561E65AB7AD2DB8DA54A5376CDBDE6F257EA9BAB7B897BCD384A9C8AD341994F46F1F5D4D61CF1D4616B5ED45DD9FBF4683ED95BFBB678AEB1546DCEEF3734578E4F5FF397834EACBEFAA56DAAE7BC78BDDC72434353796AEB769F493FF3DF8DD35BDED5EEFD9AAA7551C4CA4FDD1CA7914D3FE3F0AE7EAEAE0ABAF17D2734B57C215A5CA737FDDC43E334CA71ADDE288665D7CF4D7F9EFC76DBF78F55B9A5EAEC58E19BBEF7EFA2509DFE3C93E277A15FD3AFC93DD7DEC891234FAC5D99DB5BC5DCDAA26EED4ADDF87CBBB30120FDC3ED3C76ECD81EBF666E77AEA9BBD75E7B3D3162C488D74BB03509B6F8137FACE5A06C4D0B0B8A0B807E57BF8B7C523EB99A936AD9C46E9CE6AEA6C5046F9CE62EDB6666F9A3E976971D5A2A6F1113C2137F7CD1ABB26B03CE6CD9A1A1A93C234E01593FA3656B71AF19478953713AE8F2C97D3BE4896B52D4AD2DE6E66D9FDECA277B7ADFD6F8B3399B3694CA7F88EBD7D6AEC8CDDE3F56B7C67573A7CF7B7376BFA9BC77BADDF2B4FDA7BE543D2056E5C6F56AD3D78FCA4E979C6E17AB76D3CF2BA58FDD91BF2E4C9D7ACECB5B4FA3FCDBB1B32E7865C79FABB1B9725067A76D7EE9F5711DDDCAD238956DDB6B4AD5E6EC734A95EB6BAF39DA7AEAE86BA3A896DD2F558E8CCF4DFFBD2DAE05AC5FD3AFC93DD7CEA851A3B6A9ABAB7B3E2FAE5E70C1057D52A38BCFA959A5FB7C7C0F9956C19D74D2498BCE38E38CA43F9C7CF2C98BD2406992606B126CF127FE1415D67230B6368505C50540BFABDF453E299FEC8629B3E66E547BBABBB609EA5265E7EC1A81A5F20DD9CA9D5275FBC65265DBD6C9E239F5A5CA95311917FF4E68AAEC34A154F970C3CC966DC4BD661C254EC5E9A0CB273B2BC6AE4E51B7B3D7FFA28BD7F7483ED9D3FBB628764671B6ABCF6B6CAA8C4D9F9F122B63E37AB471EAE58367B66C16AFCB56ECB69E6A390A51F54DD5131A9A2B93D3ED4E8D025567EFD7D054F96EED698FD3DB1FCF4E315BAAFC3D4EA5BCBABF8FDA15C46D9F31FDD2AD3A166EE3E7AD2D06EBD7F46B72CF3557575777555E589D366D5A9FD6E8E2F36A8ABA57C9B40AECEAABAF1E17AB739F7EFAE97E29E8C6E7EEBDF7DE4F8D1E3DFA5D126C4D822DFEC49F41E05ABCC7DA1616141700FDAE7E17F9A47C52DC8B37712F4E3571BAF679DC9A167557A7983B74F2C9245947BFA6E9D706AF3DF6D863FBDA532DDF7FFFFD7D5AA38BCFAB3DF5727C1F7F95829A3163C683E79D775ED29FCE3CF3CCBBD340996547A4D911893FF16710D8CF8505C50540BFABDF453E299F14F79AB817A79A385DFBFC6D758BBA6B52CC954FEAD734FDDA80575757775E5E4C9D356B56BFD4E8E2736B56E99EE7AF52404F3FFDF466E3C68D4B1E7EF8E17E2DE8A69FFF9FD1A3472FA9BDC8BA1D91664724FEC49F41603F15160C0601FDAE7E17F9E480CB2707DB785ADC6BC651E2549C0E8A7CB2BB45DDB529E6CA27F56B9ABC73C01A3D7AF426757575CFE5C5D4BE5E9D5BBB4AB7A6A0FB5C7C2F7F9D82F9D39FFE74D49429539222D87FFFFD17A681F2E981F07B4BBF67356DC3ED8824D8E24F33C0EB7E4CF6C160AB270B0B0683C0509F7CD3EF0E62F2C9C1954F3EF4D043EFBCEFBEFB6EB9E1861B9E3BF2C8238F1F3E7CF8FAA25CDC1B4789534D9C16681CBFAAA26E4F1473E593FA354DDE3920E33F7D7EF7BC90DAD0D0D0AF35BAF8FC9AA2EEEEFE8205D3DCDCFCF773CF3DB71005DD534E39E5A634487E3840FE23E641BDD2FF907644126CF1A70D91826EB762B20F06593D5D583018040613FD2EF2C941964FA6C3E8F5EEB8E38EE9CB972F7F3E1F57A7DBFDFBECB3CF7E70BFFDF6FBB44817F7C651E25413A7051AC77755D45D7758CF1573E593FA354DDE39E0E23F7DBC39DFEE57BFFA55BFD6E8E2F36BBE73B3BF60C11C75D4518F5E7FFDF58528E8CE9B37EFE6912347CE1E60FF1157FA1FD28E48822DFEB42156D0EDEE80B0B70657BD51583018040603FD2EF2C941964FDE73CF3DDB2E59B2A4CB6B272D5CB8F05FD3A64D3B77C488111B8978716F1C254E35715A90717C6745DDDB87F56C31573EA95FD3E49D032AFE478D1A55C99FBFEEBAEBFAB546179F9F7F97F85EFE82053379F2E4650B162C284441F7F6DB6F8F532E5F3B40FF2376FA1FD28E48822DFEB4215AD05D5992DE9B83AADE2A2C180C0203997E17F9E420CA2753AFB9EBAEBBFEFCFCF3CFAF728CFD422A7DCDD2C6C6C67D45BDB8378E12A79A382DC838BEB3A26E4F1773E593FA354DDE3960E23FFDF7BEFCF1FEAED5C5E7D77CC7FBFC050B66DCB8712F3CFEF8E38528E83EF6D8634BD320797080FF476CF71FD28E48822DFEB4215ED0ED98A47467309514A0190C0283857E17F9E4206A575E7965F2D4534F2D5BDDB1F6134F3CF1AF534E39E5FA112346BC53DC8B7BE32871AA89D35E18C7AFAE38CD72C795B9B7B73EDE1FF930FA354DDED99FF1FF4C7EBFBF6B75F1F9352B749FF6172C98BDF7DE3BF9F7BFFF5D88826EFA3D9EEE46800FA8D6DF3BA2679E7926EB7CE3DFFEF8FCA79F7E3A3AFEC2EC88065B7CF566FCC5DFEDFEFBEFCF6EDF7BEFBD2BFD3BC6913B0F3CF0C02ADF73D1A245C96DB7DDD6ADCF8FF77BF8E1877B2D16962C5992FDDFE8EAF9471E7924993F7F7E767BE1C285C9934F3E992C5BB62CF9C73FFE912C5DBA54FCAD414B13B964C30D378C41DAC455EC9A8A5C5818D6FAFD6330F84A59045070AF6CEDAF067CBF3BD4F7A143753C1379D7E2C58BFB24F7ECCF1CB1BB2D7E9E9FFCE427C9A38F3EBADA63ED784DBC564C1723EE9F7DF6D9151EBBFBEEBB93871E7AA84FC75C0321EE8DA356DE86529CAE6A7EEB89279E58E1B3632E23E6A5CC37F5C9387E75AC6C85EEA9C37A7685AE7CD2FE7785D6B1FFB9E69A6B92E5CB97AFB0DD3DF7DCD3ABDF43DEA975D6FABB56179F5FF37DFE635AA5600E38E0807F1765856EDA49DD350856E816E65411D1C97FE52B5FC912A29D76DA29BBDF31B17DCF7BDEB3CA9617F5E2FCE95B6EB965A7EDC4134FECF43B6CBBEDB6C997BEF4A5E49FFFFCA723260758FCFDE637BF495EF39AD764B737D86083E4DC73CFED74BB18CCBDF9CD6F4E3EFAD18F26BFFEF5AFDBB5D881C736311177D9659725BBEDB65BF2C10F7E30BB1DEDFBDFFF7EF2BEF7BDAFAD9D75D6596D83C04D36D924F9AFFFFAAFEC3DB6D9669B76DB456B6E6ECEB6FDF18F7FBCC273B52D4F7022013AE18413DADACE3BEF9CACBBEEBAC9B1C71EDBEEF13BEFBC33DB3EBEFFEB5FFFFAECF6461B6D949C7DF6D9C9830F3E98FD7F8AFF0B8E2C5FB3981C66A518405FD3EF52D8F14C4C9ED5E66DEF7FFFFBB349AAFCF9FFFEEFFF4E66CC98D1ABB9671172C4D569E79D775EB2FFFEFB5F5CA9541E79E185179EEFC630FB3FE9EFE3B7DFFEF6B7FF9EFE5D2FB442B7FFE33E62EEAD6F7D6B72FEF9E7B77BFCBDEF7D6FF2C31FFEB04FC65C032DEEADD01D9A71DAB158BBE38E3B663117FFC63C66C7CF9F3C7972B2CE3AEB24A79D765AF6995124D9628B2D92CF7FFEF36DDFE3861B6E10A7BD378E5F9B62EEEDBD5CD4954FEAD7DADA05175C90BCEC652F6B2BA4461F147177D14517B5DBEEEF7FFF7BD6A7C4F3D1AF44DF56DBA64D9BD6969B8D1F3FBEAD1D70C0019DCE4FC60131F24EF1DF55FCC74A582B74E996C30E3BECE9A25C43F7D65B6FBD6E005F43B75017738F24F9B39FFD6CF28E77BC239933674EF2F6B7BF3DBB1F47FEE4DBDC75D75DD90EE088238E4866CE9CB9423BFCF0C3B3E763BBFCA8A05FFDEA57C9E9A79FDEAEBDE52D6F498E3BEEB84EBFC75FFFFAD7E495AF7C653269D22405DD01127FF951B8DD29E8C6D1AF51B48F3879E73BDF99B588B9B8BFFEFAEB67C94A6C77E69967763A79BBCF3EFB64711945D9B83F7BF6EC6C122FDEF3939FFC64F2C52F7E31D975D75DB3D79F7AEAA9592C8D1D3B36BB9D272E13274ECC0ABF31E0AB6DDFFDEE77B3F7CC8FC68DEF1FDFE9CB5FFE72972DB6BFF0C20BB3EF1D83C18D37DE382997CB0ABA3D18937D3098722D4700FD2E03643C73C9259724AF7AD5AB92E9D3A76793F91147318E89D510D1B6DA6AAB64EAD4A96D676DE98DDCB30839E29AE493A3468DDA23FD9DA5C3BB250F7735BE7EFEF9E76F9C366DDAB9E9DFF581D85ED41723EE63BCF5ED6F7F3B8BBB18D7444C45DB6CB3CDB2F8CEEFC7CA1871AFA03B94E334FF2EF7DD775FF2894F7C225B4C103F731469E37EED6ADC58B010F3059B6FBE79561C897FE3A0A078AF982F887F63C142A95412A7FD3B8EEFAC981BD7CC5DB793C77BAAA82B9FD4AFB53BF0248AB3EF7EF7BBB3A26CDCDE7AEBAD93B7BDED6DD9EDDA33101C7AE8A1C9C73FFEF1ECF6D5575F9D1D64182DCE761A31FAF39FFF3C7BEE97BFFC65F2A94F7D2AEBEBF6D8638F6C6153CC67467137F69DF17C6C1FAB82E59DE2BFABF8770D5DBAED88238EB8FFFAEBAF2F4441B7A5A5A53C72E4C8D903EC3FE2CA929D7E29E8C60E288EDE89A4353F3544FC478C9DD51BDFF8C6B6231DF3826E9C02218A671D5B9E48E705DDFC68CCCE92EFAE0ABAD17EFAD39F661335DD39ED8E8160FFC6DF8D37DE98C54E14413B2BE8C6113AF1FC2DB7DC92155E6340F4A637BD2979C52B5E916CB7DD7659C2317CF8F064D34D375DE1C8B648428E3EFAE8EC1426B16D0C0A6380B8D75E7B253FFAD18FB2F78D53271D7FFCF1D9E7C6F67FF8C31FB2F78ACF89E42A622DB68BDBF9CF1605DD612B59F1931774E3FBC4AA8F7C82308EC41BD67A045EFED8873FFCE1E48A2BAEC82615E3678E23F122E623693AE38C33B26DE23531B118AB866FBEF9661311AB19937D30A8EAADC282412030D0E97729DC78260ABA3149B5E79E7BC6D1FF6D93FA1DF3B9830F3EB8D772CF22E4886B9A4F8E183162A3F47777729AB73FF99FFFFCE7D99AA1F5D3D75D77DDE9E9730FA47FDB93623B115F9CB88F03A5A358F5FBDFFF3E99376F5E7656AD68AF7EF5ABB3B8CAEFC744AEB81FF205DD211DA751548EF88B988BD5BCF9D9E3A2C0FB810F7C203BAB57535353F6F9279D7452566C8E79A71D76D8215B2117FFC6FBC79C40ED5C9838EDB7717C57C5DC7556F2FCDA1675E593FAB5762D8AA0115B7160481C3898B798331F5653248DB35C461FF3BBDFFD2E3B80E4B7BFFD6DF6F8B5D75E9BF56B71C048ED299AE360957C0E75DF7DF7CD0E6889D7BDFCE52F4FBEF6B5AFB51574E59DE2BFABF81F356A5425DF2EE2B03FC5E7D7ACD0ADF80B164CFA9FFF8228D414C1B1C71E7B5E1A283F1C20FF11BB95ECF47541F7C0030FCC3AF548B2DFF08637B4DB3945721D3B9778BEB1B1B1ADA01BA74FE86C856EECB486B51674E368C7889358911B4716D5B638A54E4CC2C4F3713EFF8EDF294EA513EFD3D0D0A0A05BF0F88B5363478CFCE94F7FEAB4A0FBC73FFE311B08E5A7C28B23C462703761C28476936EDFFBDEF7B25393E4C9CD1D77DC910DA822A189F7896D4E39E5946CC016ED431FFA5016BBF9299423AEA64C99920DDAE2678855B971C45C0CFCE200814888E2142979413756895F7AE9A5C955575DD5AEC50AF1389AEEFFFEEFFFDA4E55326C25C5DF78EFFC77D1F1B426F1FCE73EF7B9ECDF384061DCB871D9CF652262F562B20F0657BD5158300804060BFD2E851ACF7456D08D2242ACD2CDCF1614078EC6A9367B2BF72C428EB8B6F9E4C891233F555F5F7F6BEAA1C71F7FFCB2F4F71313427F8BC7457AF1E23E0A4FB18230C63CDD3995ADB81F92055D719A6E3B66CC98ECF9287EC41C40EC2FF216D774CD0B30071D7450DB2AE158CCF03FFFF33FD9F651CC8D9F21560EC7FC96F9A67E1DC7AFAA98BBB2EDD6B4A82B9FD4AF7559D08D79EE8E97251C5653D0FDCE77BE93DDFFC8473E92EDF7E23221B1AF8BF9D1E807D75B6FBD6CDE320E3E89BE27F2D6384B40A552C90E4E8C8552A3468DCAE655A3F03AACB5A02BEF14FF2BD9A6392FA2C61952FB537C7E4D11BAD95FB060D2CE67C7C99327BF50807AEEBF478F1E7D731A249F1E4CBFDFBE2EE846121D45D738C2274E25D3B1C5E3B182370A5D7941F7A69B6ECAFE83C64E2A6F23468CC81E1FD65AD0FDCB5FFE929D3227AEA112FF46012D9E8B9592713F7668F16F5E64ABBDC87C24D0F94EAF76B5AF826E31E36F975D76C906449D157463601583A3782C8E847DDDEB5E97C5416C174785C5EA8938A5485C1B221E8FA3D96205783CD659921247CC468213071CC4A02E3F0A2E068F91C0449214D7CA8D09BEF85E710AA6386237066F79AC453CC7D16A5D254291F044BCE789501C49176725882386E3F9F8B9E27E1C9DD731697AED6B5F9B1DF010EF11D7B3B8FCF2CBB3D7C49172E2AFB093F63D5D58300804F4BBFADD21ADAF0BBAB1222B5653C541A3717DB3FC1ABABD957B162147EC897C72F8F0E1EBA73FDBE4745CF748FC1BF7456F71C7F17149A258DDB8DF7EFB65A7668C1613B37196ADFC7EC4A0B8378E1ACA711A0769476CC6E945E3A0F38E2D56ECC62AE298BB8A224A7CD728B2C425C7E260F458C91B67FDFA7FFFEFFF659F110596983313A77D9EAF75B798BBB2ED57B7A82B9FD4AFADB4A01BF39BD1C7E52DE6AD87D51474E37BE407A8C4B572E394CA71204ABE6024E64CA3801BFBCA934F3EB95D7F1607A7C42ADBB83E6E9CB5E090430E59A1A02BEFA4A3F477B97B5E448D4571FDA9BEBEFE859A82EEEEFE3A053375EAD475D3C1F373715DA2FEF4C0030F5C9106C8E2F83E76446BD7E2C2E9F9D18D9DB5FCC2EAB505DD28E28E1E3D3A3B75431C49142B236B0BBAB17D5C943D4E2911473C46812C9E8BA390E2A88D986C89A26FC7EF123BC4D8E9C5ED8F7DEC63D9648D826EB1E32F56674771BE634137928818A4FDF9CF7FCE1E9B3F7F7E56F88D98895335C7B525E2344B71F46DB4385D48C44C9C9E398EC69D356B5656A8CD5B1464F3D32AC5B528E208DA187045CB0F2C8855E551AC8DB889826E0CC06210981774E328B4486062B0164955DE2226E3144C91E8445CE631DCDDA3E0E29A14917CC5633128740DDD01555CE8C9C2824120A0DFD5EF9A58EB8382EEEEBBEFDE36911605DDB804473C16638FBCA0DB5BB9671172C49ECC2707DB787A308FE36312374E3B1B13C6F9E96AE376DE5A5A5AC4BD71D4908ED3D81F44D1388ABD2B6B7110508CFB77DA69A764D75D77ED349EBFFAD5AF263BEEB863DB7C8638EDB37C72758BB92B7B5D778BBAF249FD5A972DE607637E316F7156BFE83BF2FBB5AB5D639E3C169AC4429238702572D5FAFAFAB616B96A7EF681DA532E478137FAB3CF7CE633D9FC653E1F1FFB4D79275D49E36D93BABABAE7F2426A1CB4D41FE2736B8AB9CFC5F7F2D729A04993265D14477AF4A7638E39E6376990CCB2235AFB16097074EC71947BEC6CF21609723C1ECF7756D08D899328EC47A2DD5941374E7D16D740896DE3A8C9782EB68B626EEDD143B5897FECB8A2D816F723C18ED5BA7194A5826E71E32F0AFEF1B7FDC10F7ED0AEA01B1D794CB8C56999F36DF3235DBB6A471C7144DBB671A4ECE69B6F9E2543F13E918CE483B6783E4EA31447BDC5ED5B6FBD358BC558911BDBC4D16C9160C5D1C0175F7C715B41B7B36BAC75D6E288E23C698A23832306E348DE782E0AD771BFF628B8F3CF3F3FD97EFBEDB302767E5A938E4953EDEF41FC15AAB8D0538505834040BFABDF6558DF147463E23F0E2A1CD6BA42214E2D17078ED616747B33F7ECEF1C513E39F4C6F1F901D2718ADA38CD78C4685C7A262E611463ECDA31B3B817F743354EE3524F871D7658D6E2D24FF119713BE6B7629570DC8E4B30C5294FF3B37DEDBDF7DED92AB7D8774401378ABD71EDCB28D4E4DB89D33ECB27D7B498BBB2D7AFAAA82B9FD4AFADB4C5A5DC629F17FD4DB55ACD56BFFEFCE73FCF9E8B53287FEB5BDFCA6EFFE217BF688BBB583012796A1C1812B9692C3C89DBDFF8C637DA5D433756ECC6D903E27ADD71204C5C82302E8918B7A3DD7EFBEDF6BFAC545D5DDD797931350E7EEA0FF1B93505DDF3FC550A6AF4E8D1EF1A3366CCBF22D1E90F4F3CF1C43569803C1CDFC38EA8E70ABA8F3FFE78BBC7E3FEB09514746B93A4CE0ABA0F3DF4505B012D12EE61ADE7EDDF6CB3CDB29D51EDC5E0E300812802C6D194B5DF217644714467BCB7826E71E32F8E5A8D84A6B6A01BAB5EF3D8C95B1C311B2D56CD464213AFCB1F8B6BDEC660AF76D03667CE9CEC761468F3415B5CCF2612AA88A3484CE2F94F7FFAD3D9445E9C82241295E9D3A7275FFCE217B3EF112B70E328DC485CA2CF7AECB1C7B2442B2602E3F425713F6235E2330E2688FBB1DDDA5EA7A263D2B4C71E7B747A2083F8EBF7C9FC9E282C180402FA5DFD2E7D309E89DC2A563C449E181359C71C734C7600DFA9A79E9A3DDFB1A0DB5BB9677FE788F2C9A1378E8F49B298208EDB471E796416538F3EFA68763FC6D85FFFFAD7C5BDB817A7ADDB4781245E93FFBCB12A381616445C76FCCEF159B14238B65D7FFDF5B3B981B8966E9CFAD47C539FE793FB0E5BF3626EAEB3A2EE3EF249FDDA9AB4587D1BFD532C14897FE394ECD10745DF13972F8CDBD16FDC73CF3DD94293782CE64163FF16672288F788B9D128D2D6BE6F1C8C985FD736FAAF38D824E6BFA3FF8C330EC4ED68711D5EFB5F5626FD7B6E9F17536385785FAFD28DCF1B356A54DBE996E3FBF8AB14586363E339717A94FE907EF6D9699034D911F56C41F79BDFFC66ED1115D9A920867551D08D9D415C003E6F7124661C5D14CFC72996E37A24B103D972CB2DB3CE3C767EC35A4FB91CA7998895B7FFBFBD7B01B2ABAE0F072E8F2AA01544B04E112B288DC58A967690581DA3680B858A74389C3D09221A0151C8EE461E02A504860E0F11D8DD84470B96E2C08838541019FC6FF65E12B1415E02F29077082621101E2148122A9CFFF91E73334BD8BC36DCDD7BEE7E3E33DFD9DD7BEF3E38F9F2FB7E7FF77BCFB97139DC287031708BE63A5E01D918A435225ED519979C885717350A99816EEBE45FBC3AADF1CAB1680AA2F188CFA3D189F7B369DC178F8B8D59BC5A2C365FD1F0C4136F313C7DF4D147CBF7A58957B935DE5BA2B1698B8D545C3E3986AF8D4D5BE4E5673FFBD9F255B6F1FDF1D878C56FBCE236DEAB397E5EBCF7F32EBBEC5236409167F1FD8D4B8545C4ABDCE27D72E2318B162D2ABF3FF2332EED34F8BF2F7E4EB1DE94AF606B9C897CDB6DB7955FC799E9B1316CBC78E1D4534F2D733EEE8FBF3D5EF4D0B87C53BC322F7E573C0129FF5A6EB8B0B183059B40C0BA6BDD6584F6337169CE9D77DE39DF7DF7DDCB27D3E22D5AA2BF8A5E2C2ED319BD60A3DF6A66EF39DA3DA27E726CE57D3C511CFBE5C89338F331F65CF1E285344DCB4B2BC68B58637F7DCF3DF7C87B793FE6F3349EBF8AF7548FDF1DC3E218F8C615B8DEF39EF794EF4DD9384B78C18205E573585FF9CA57CA2B7DC5202686BBF1364CF17C46FCCCB83F9EAC96A723D64F0E1EC60E6798BB213F473F695D5B679C78E289E5D501E284A45887E28CDCF87D71C598B81265D4C4380969DAB469E55501A3378D752EAE1A106B4FD4C6786E34D6C3F83C22DE06EEA28B2E2AD798B85265AC4571824C449CEDDB380338A25157D55FD6A6A3A3E396C62C27AE563192E2F70D9A25DDE25FA3C52549B27DB1D0BC1CC3BB9174FBEDB7C7A5969F8EDFAF10BDB903DDC30F3FBC7C1F93461C76D8616B1CE8AEFE33A2B98EFBE2520F51E8EEBEFBEEF2558E71099B934E3AA9BC2F9E60699C951B85250A4A5C96394ECD8FC63C9AFAA1FEBEE79F7FBE1CCC35F3BD4B14A2E1E55F6CBCC68F1FBFCE88C7C5ABC2A29988C17D343F8D57CA466EC4C6EF9FFFF99FCB01FEE04D5B5C92249A9C688656BFACD2EA1103DBB80453BCA74EE461FC9EB82D9AA368B462B0BCFAFB60C4654D8E38E288557F436C20D7F4DFDA18FAC61389ABDFD7B8B44ABCE2389AB8F7BDEF7DE5DF1D9BD13DF6D86355FE375EA127FF5A6AB8B03183059B40C0BA6BDD6504F733F1FE8B7BEEB967D9B3C50B45A3CF8C3322E26A3F9153F12458E3C9FA66F79EA3D923EA27C756DE47EE449E44BEC6BE2AAE8E153975ECB1C7967BE9C8A75D77DDB53C2352DECBFBB19EA771E65B9C58102FEC8EEF993C7972F93BBFFFFDEF976FCB14CF7B350624F1A2F075450CA7E5E988F693317C3DE42DC31FE6AECFCFD14F5AD7D62BE28CD6783FDCF83C5E9C122FF668EC6362681A2733C573E431588DB35EE3B9F4461F9A2449F97EBBAB479C1C37F877FCF6B7BF2D9FC31C2AE28428F59775C9B26C7C4747C7AB8DC16AFCDB8F84F83D8386B9AFC6DFE15FA3028AE6E94B471C71C4B218B88D84A79F7E7A5691204F14F14585E8CD8B785F90386371F02590079FC9B874E9D2558F8B274C1A5F0F8E38CB3186FB430D65A3118F57CC479E8CD67BE12A44AD917F7166F75003FBA1722306AE8D5C8B5799C560365E00101FD7F4F31B6778473EAE9E9F6BFB9BE23D73D6F69846FEC759E243E57F346FF1B7C5E743FD7FB464C992216F977F2D315C18EE60C12610B0EE5A7719E17E327AAAA1DEFB2BFAACB86FF5BD48B37BCFD1EA11F593636F1F15EF0DBAB6FB07E7A9BC97F7F274CD35C4F34D6DD34F56E5F7D146CFA3C71AD7B834FC68AD1BEA2F4349D374C6E04B2FC7C0BF99E2E70FBED472FC7EFF0A153279F2E4538F3FFEF897E37FDA662A169CFB8B84BCAD4896131422A1C1967FF28F376973369CC1824D20807517FDA47E12792FEFE5A990A7A3D34FB6F2EFC1BA665D63441D7AE8A15B747474DCD518B0C65B0D346BA81B3FB7F87DAF0E3A3BF7AEF8FDFE152AE690430EB9FC98638E79A15967EA3EFDF4D337C530B748904B1422A110C93FF9C79BB849DBD0C1824D20807517FDA47E12792FEFE5A990A7A3D74FB6DACFC7BA26AC6BA3AAA3A363C7229E1C7CA6EE75D75DF7A6CEE8E2E70D3E3377E5EFDBD1D1AFA84993269D3479F2E417DFECF7D45DF99EB9F3DAFDCC5C854821927F4223342A9BB50D192CD804025877D14FEA2791F7F25E9E0A793ABAFD642BFC5CAC6BC2BAD652B22CFBF0E0A16EC459679D953FF9E4931B359F8BEF8F9F33F8E7C6EF89DFE7A8575CBCB7EDC1071FFCFC85175EB820AEE5BE315E78E1855F7577775F55FCCCA7DBF93D7315228548FE09F937AA9BC1F51D2CD804025877D14FEA2791F7F25E9E0A793AFAFDE468FD3CAC6BC2BAD6D2569EA97BD7E0E16B9CAD7BF1C517E7BFFBDDEF36683E178F8FEF5BEDACDC7CE5CF77666EBB28FE81B72BFE417BBEFCE52F2FB9ECB2CB1E7DE69967FE6F03F2E4FFE6CF9FFFCB534F3DF5CA9583DC9EF8790A915088E49FFCA3499BB7F5192CD804025877D14FEA2791F7F25E9E0A79DA1AFDE448FE1CAC6BC2BA5629F19EB6699ACEE8E8E8587D109B777575E5575C71457EC71D77E48F3EFA68FEECB3CF9643B9F8185FC7ED717F6767E71BBE377E5EFC5CEF99DBA6264E9CB873F18F7C7196654F1F76D8614F5C74D145BF9E3D7BF63D0F3EF8E0BCC58B17BF54E4C9D2A79F7EFAB1FBEEBBEFF6E27FF6FED34F3FFD9AE27BEE29BEE7A9F8BEF87E85482844F24FFE31CA9B389B4000EB2EFA49FD24F25EDECB53214FF59358D78475AD32B22C1BDFD1D171CB1083D9E1C42DF1F31CD5B16193830E3AE8EF8B7FF033D234BDAEF8C7BF75D0B5BCE3E3AD717BDC1F8F8BC72B440A804224FF8446A8053683368100D65DF493FA49E4BDBC97A7429EEA27B1AE09EB5A256559F6858E8E8E6B8A58B18143DC78FC35F1FD8E2228440A91FC13F2AF953783368100D65DF493FA49E4BDBC97A7429EEA27B1AE09EB5AE51D7AE8A1DB7474741C98A6696FF171A088C78B7879E5F0F6E5955F0FACBCFFC078BCA3060A914224FF84FC6BF5CDA04D20807517FDA47E12792FEFE5A990A7FA49AC6BC2BA06A0102944F24FC8BF16DC0CDA04025877D14FEA2791F7F25E9E0A79AA9FC4BA26AC6B000A914224FF84FC6BC1CDA04D20807517FDA47E12792FEFE5A990A7FA49AC6BC2BA06A0102944F24FC8BF16DC0CDA04025877D14FEA2791F7F25E9E0A79AA9FC4BA26AC6B000A914224FF84FC6BC1CDE031368100D65DF493FA49E4BDBC97A7AD112FBDF4527EEFBDF7961F37E67679AA9FC4BA26AC6B000A914224FF84FC6B93CD604747476E13083032C68D1BD7B9C5165B5877F593423F29EF85BC97A76B8C18CE167F72F971636E97A7EDBB8F7F8B612EEAAF750D40211206BAFEDDE5DFD8B272A00BC0C8ACB9F52449ACBBFA49A19F94F742DECB53035D36C6560E01EAAF750D40211206BA42FE8DADE182E30C3032EBED84587357C60447443F29F493F25EC87B796AA00BA8BFEA2F8042241422F927FF589F0183E30C3032EB6D7DD040B7EE88E827857E52DE0B792F4F0D7401F557FD055088844224FFE41FEB3360709C019ABFD60E3E3BD759BAFA49A19F94F742DECB53035D40FD557F011422A110C93FF9C77A0F191C6780E6AFB5F52106BACED2D54F0AFDA4BC17F25E9E1AE802EAAFFA0BA010098548FEC93FD63964709C019ABBCE0E7576AEB374F593423F29EF85BC97A706BA80FAABFE0228444221927FF28FF51A3438CE00CD5D67EB6B19E83A4B573F29F493F25EC87B796AA00BA8BFEA2F8042241422F927FF58EBA0C1710668DE1ABBB6B3739DA5AB9F14FA49792FE4BD3C35D005D45FF5174021120A91FC937FAC73D8E03803346F8DADAFC740D759BAFA49A19F94F742DECB53035D40FD557F011422A110C93FF9C71A870D8E33807517FDA47E12792FEFE5A981AE3C05EB9AB0AE0128440A91FC13F2CF600100EBAE7E52E827E5BD90F7F2D440579E82FAABFE0254DAC0C0C06BCB962D53045A208A7F870545215A2EFF84FC335800C0BA8B7E523F89BC97F7F2D440579E82754D58D7004AB367CF5EB068D12285A005E289279EF86151886E957F42FE192C0060DD453FA99F44DECB7B793A32F1D24B2F95C3D9F8B831B7CB53B0AE09EB1A40D3D46AB5FD6FBAE9A6250B172E5C5CA557182D5FBEBC9D5E51B470EEDCB9571645685E11FBCA3F21FF0C1600B0EE32B6FAC9050B16E827B18F92F7F254C853B0AEE93BAD6B006B168B5FBCA2A5881571EDF9568FFFFCCFFFCC274D9AB4EAEBCB2FBF3C8F27EAAAF0B7AF2156AC3CFEFBCABFFE5CC83F830500ACBB8CA57E72CE9C39F939E79C935F73CD35FA49ECA3E4BD3C15F214AC6BFA4EEB1A40F52549F28E8E8E8EF9699AFE7ED09374754FD4015561BD02B0EE42439EE7EF58B264C9B2C58B17E793274FFEB923020080BE1380CAEBE8E838379E942BE20F871E7AE816C5C7092BBF8E98E008011558C70C1600ACBB507AE491477E96AF54ABD59EC9B2EC20470500007D27009595A6E9EE31C86D0C708BAF2735CECE5D197547096875060B00D65D088F3FFEF8675E7DF5D5C6F36AF96BAFBDF6EAC9279FBC284992AD1D1D0000F49D0054CEB469D336EDE8E8B875D0F036CFB2ECCEC15F3B4B17A802830500EB2EE479BED9A2458B9ECE5713B74D9A34E942470800007D2700959365D9D1430C6F870A67E9022DCD6001C0BA0B0F3DF4D079F91A5C79E5952FA469BAA7A3040080BE1380CA489264878E8E8E25EB39D075962ED0D20C1600ACBB8C6D0B172EFCC0F2E5CB5F5DD3136B7FF8C31F5E9E3265CAFD13264CD8DCD1020040DF094025A469FAE30D18E63A4B176869060B00D65DC6B679F3E6DD9BAFC3FDF7DFFF549665C7395A0000E83B016879699AEEB781C35C67E9022DCD6001C0BACBD89524C96677DE79E78A753DB1F6DC73CFFDA2C8DD67E2F18E1A0000FA4E005A5A514C0E2BE2BFD234BDB1F87867114F3A4B17A8F8BA66B00060DD650C3BF9E493FF7DC58A15FFB796E7D55EECEEEEAE39530200007D27009515EFA77BF0C1078F4BD3F463071D74D0E78B8F933C510754680DB35E01587719C3E23DCAAEBAEAAAF96B7A56EDF6DB6FBFACC8DBBBBD97190000FA4E002A2949922D8B22F3F2EAB77BA20EA80AEB15807517BEFAD5AF7E72EEDCB9AFACFEA4DAABAFBEFAEB499326FD2E4DD33D1D250000F49D00545292243B7574743CBEFAED9EA803AAC27A0560DD8570D659675DFD5A61D0F36A7F88DB8A9CBDC0D1010040DF0940651545E69345CC19E2764FD4015559C7AC5700D65D8817AB6EDDDFDFBFB4F1ACDAC2850B7F58E4EBEFE276470700007D27009595A6E9BF14C5E69AD56FF7441D5015D62B00EB2E347476761EF2FCF3CFBFB278F1E2FC6B5FFBDA6FB22C3BC851010040DF0940A51585E69B435D0AC21375405558AF00ACBB30D845175D74C739E79C9317B97A83A3010080BE1380CA2B8ACD69699AFEDB10B77BA20EA8CA3A66BD02B0EEC22A4992EC14791A1F1D0D0000F49D00545E5170FEA388C387B8DD13754055D631EB15807517E4290000FA4E00DA539AA6D71545E78B0A11A07106C0BA8B3C0500007D2700AD57706E9D3871E21E0A11A07106C0BA8B3C0500007D2700AD5770E62549F27E8508D0385365799EBFF5B1C71EFBD19C39735E191818C8FBFBFBC5084771DC5F9B3D7BF6825AADB6BF8CB4EE823C050040DF09006F5EC1599124C95B152240E34C953DF6D86357CF9E3D3B5FB46851BE6CD9B27CC58A156284238E7B1CFF9B6EBA69497F7FFFBEB2D2BA0BF21400007D27006CA42449B62D0ACE730A11A071A6EAE2CCDC18261AAC8E7E2C5CB870717F7FFFADB2D2BA0BF21400007D27006CA42CCB3E52149CFB152240E34CD5C565969D99DB3A67EAF6F7F72F9795D65D90A70000E83B0160E38BCD5E5996D5142240E34CD5C57BB81AA6B64EC4BF87ACB4EE823C050040DF09001B294DD34945C1B942210234CE54DDFA0E745F7A6161FED86DFF95DF37F3B432E2F3B8CD10D64017EB2EF2140000F49D00B49C2CCBBE5DC4F7142240E34CD5ADCF4077E9F3F3F37B7F7E727EF7CF8E7D5DC46D719F41AC812ED65DE4290000E83B0168B562F3DD344D8F5588008D3355B73E03DD27EFBBEE0DC3DC46FCEEBE9F1AC41AE862DD459E020080BE1380962B363F28E2CB0A11A071A6EAD667A0FB40FDAC350E74E33E8358035DACBBC8530000D07702D052B22CEB2FE20B0A11A071A6EAD667A07B6FFFB4350E74E33E8358035DACBBC8530000D07702D06AC5E63793264DFAA84204689CA93A035D035DACBB204F0100D07702D08EC5E6992449B65788008D3355B73E03DDFB669EB6C6816EDC67106BA08B7517790A0000FA4E005AC6E1871FFE2745B179A5F874138508D0385375EB33D07DF897D3D738D08DFB0C620D74B1EE224F010040DF0940CB48926487A2D8CC5788008D33ED607D06BACFCEBF27BFF7FF9DF2C6CB2D17B7C57D06B106BA587791A70000A0EF04A0950ACDDF1571874204689C6907EB33D08D78FCF6CBDF30D08DDB0C610D74B1EE224F010040DF09404B49D374BFA2D85CAF10011A67DAC17A0D74972FCF1FFEDF0BDF78B9E5E2B6B8CF20D64017EB2EF2140000F49D00B48C2CCBBE5E149B4B142240E34C3B58D74077E9F3F3F3877ED9B7C6F7D08DFBE23186B106BA587791A70000A0EF04A0550ACDBF665976BA4204689C69076B1CE82E5F9E2F7CB896FFE6C613D738CC6D443C261EEB6C5D035DACBBC8530000D07702D00A85667A9AA647294480C6997630D440775D67E53A5BD74017EB2EF2140000F49D00B4AC344D7F5C149B03152240E34C3B186AA0BB3E67E5AEED6C5D8359035DACBBC8530000D07702309A85E6E62CCB3EA510011A67DAC15003DDE10E731B61306BA08B7517790A0000FA4E0046B3D03C9224C987142240E34C3B58E37BE80A035DACBBC8530000D0770250D142F3529224EF5088008D33EDC040D74017EB2EC8530000F49D00B48D18E4C64057210234CEB40B035D035DACBB204F0100D07702D036E252CB71C9658508D038D32E0C740D74B1EE823C050040DF09403B15994F1771B34204689C691706BA06BA5877419E0200A0EF04A06DA4699A1485E66A8508D038D32E0C740D74B1EE823C050040DF0940DBC8B2ECE8A2D0F4294480C6997661A06BA08B7517E4290000FA4E00DAA9C8FC7B9AA627294480C6997661A06BA08B7517E4290000FA4E00DAA9C85C5AC4648508D038D32E0C740D74B1EE823C050040DF0940DB48D3F46745A1D957210234CEB40B035D035DACBB204F0100D07702D04E45E68E891327FEAD4204689C691706BA06BA5877419E0200A0EF04A09D8ACCFC2449765088008D33EDC240D74017EB2EC8530000F49D00B48569D3A66D5A149957264C98B0B94204689C691706BA06BA5877419E0200A0EF04A02D2449B27D51649E5188008D33EDC440D74017EB2EC8530000F49D00B4852CCB762B8ACC6F142240E34C45FE7DEB454C58D7E30C740D74B1EE823C050040DF09405B48D3F41FB22CEB5788008D3355F9F75D196B1DEC1AE81AE862DD05790A0080BE1380B690A6E9214591B95C210234CE54E5DF77B51872B06BA06BA08B7517E4290000FA4E00DA429665C71571B64204689CA9CABFEF1AE275835D035D035DACBB204F0100D07702D02E05E6DC344DA72A4480C699AAFCFBAE23CAC1AE81AE812ED65D90A70000E83B01689702736511131522A09D1A67219A3DD05DB264C91B6E5BB46851FEC8238F0CF9F8279F7CF2755F3FF1C413F90B2FBC30E463172C58903FF0C0031BF4F7C4EF9E3367CE1AEF7FE69967F2FBEEBBAFFC7CEEDCB9E5EF5EB66C59FEDBDFFE365FBA7469D307BA72B2FD43F5C1136B0000A0EF04A049B22CAB15F139850880AA6C8C46FB92CB3104DD6EBBEDF2EBAEBBAEFC7AC68C19F917BFF8C5BCA7A727DF7DF7DDDFF0F8DFFFFEF7F94E3BED944F9D3AB5FCFAFAEBAF8F9A9A7FE10B5F78DDE3162E5C98FFE217BFC8BFF4A52FE51FFDE847CBCF234E3EF9E47CD75D775D153FF8C10FCAE1EC19679CB12AF6DD77DF7CD34D37CD4F3FFDF4D7DDFEF0C30F973FFB8A2BAEC8B7DF7EFBF2F3ADB7DE3ABFEAAAABF2F9F3E7977FC7EDB7DFEE0C5D604CD40F470100007D2700552D30F72749B2AB4204405536466B1BE43634FB0CDD18CEBEF5AD6FCD67CE9C590E6B8B5F996FBEF9E6E5C72DB6D822FFF33FFFF3558FBDF0C20BCBDB7FFEF39FE78B172FCE77DC71C7FC2B5FF94AFEA77FFAA7E510B8F1B8CB2FBFBC7CDCEA71C82187E49FFAD4A7F2EF7EF7BBE5D73148BEFAEAABCBDFB7F7DE7BAF31E2B137DC7043FEE8A38FE6C71D775CBECD36DBE403030306BAC098AD1F8E020000FA4E00AA5A609E4B92645B850880AA6C8CD636C86D1889F7D0FDFEF7BF9FDF7CF3CDF9565B6D95FFE4273FC93B3B3BF371E3C69567D5362E7F1C97338E01EEBBDFFDEEFCA9A79E2A07B371F66DDC7EC925979467D59E75D659AB7E660C5E4F3BEDB47CF9F2E5F9E73EF7B9FCD24B2FCDBFF6B5AFE5071F7C707EF6D9679767D9C619BF311CFEC8473E923FFEF8E365C4EF7BCBCAA171E3B68F7DEC63F92F7FF9CBFCBCF3CECBDFF6B6B7E59B6CB249FEE10F7FB81CE8FEF77FFF77F998F89E69D3A6E5E3C78FCFEFB9E71E035DA0ADEB87A3000080BE1380CAD9679F7DDE561498E50A110015DA18AD7590DBD0CC816E0C4D4F39E5943262581AC3DABFFCCBBF2C87AD71766E7C1E71FEF9E79767E0167F4EFEAE77BDABBC5CF2DBDFFEF6BCAFAFAFFC39F7DE7B6F7EC001079443DD134F3C317FE8A187F2238E3822FFC0073E509E811BDF77D1451795C3DC88DD76DB2D3FF2C82357FD1D7119E5B70C71466F23BEF7BDEFBDEEB1832FB91CF77FFAD39F2E3FC6DFF48D6F7CA3FCFD06BA401BD70FEB100000FA4E00AA274992F71705669E420440BB69E64037CE9ADD6BAFBD565DD2F8DC73CF2D07B28323CEBABDFBEEBBF32CCBF2F7BCE73DE525988F39E698F27BE352C9F1734E3AE9A4F22CDC6BAEB9A63C9376CA9429430E66E3BD76E3E7FCD55FFD5539F01D3CA4DD76DB6DF33BEEB8A3FC3BE2B131088EAF3FF8C10FBE61A0FBCE77BEB3FC5D31D08DF7DA8DB38BE37BE277BBE432D0EEEC670000D0770250D5E2F289226E5588006837CDBEE4F2C2850BCB61E8C30F3F5C9E35FB962186B0F1B818AEC659BA8DF7D48DF7BF8DF7DE1D3CD06DFCCCB8CCF2C5175F9C5F70C105ABE2A73FFDE9AA4B2EFFEA57BF2ABF77DEBC791B74866EBC5F6E5C7E396EDB679F7DBC872E3056F73ED6210000F49D00544F9AA6FB1705E65A8508807633D203DD2449CAF7B68D38E18413560D7423A64F9FBE6AA01B97688ECB310F35D08DD86CB3CDCAF7DC8DF7BADD669B6DCA016C63A01BF7C7FBE636DE733706BA7129E75B6EB9A51C14C7DF73E59557965F0F3E43F7DA6BAFCD3FFFF9CFE7DB6DB7DDAA4B2EAF3ED07DE9A5970C7481B6663F030080BE13804ACAB2EC88A2C05CAC1001D06E9A3DD08DCB2917BF26BFEBAEBBCA816E9C39FB677FF667656CB5D5566B1CE87EFDEB5FCFF7DF7FFFB50E746FBCF1C6F2F3A38E3A6AD540F7339FF94C7EDC71C795EFD71BC3D88D7D0FDDD507BA071D74D0EB1E6FA00BB41BFB190000F49D0054B5B89C9265D9A90A1100EDA69903DD1884EEB0C30EE519B43BEFBC73F9BEB69D9D9DF9F1C71F5F9E9DFB9DEF7C273FF3CC33CBCB2D0F1EE83EF0C003F9965B6E595E82796D03DDB86DD2A449F9B871E3560D740F3CF0C0FCB39FFD6CFE8D6F7C237FF6D967CBC7CE993327EFEEEE2ECFAE8D33858BFFECFCB6DB6E2BBF3EE38C33F2993367968F7BEAA9A7F2534F3DB51CE8C6FDF13B3EFEF18F9783E5F89EF8FB76D96597557F97812ED0A67B1FEB100000FA4E002A595C2E4CD3F44885088076D3CC816E9CED1AC3D6175E78A1BC84725C1E79DB6DB7CDDFFEF6B7E75B6CB1C5AA98366DDAEB06BA31308D41EACB2FBFBC6AA0BBD75E7BBD61A0BBDF7EFB9583DBB8BCF2EA975C5E53CC9D3BB71CCEFEFAD7BF7EC37D975C724979DF01071C50BE27EFFBDEF7BEF2E70F0C0CE47BECB147795FFC7DF7DD779F812ED0CE7B1FEB100000FA4E00AA274DD3FF290ACC010A1100EDA6D9975C5EB468D17A3F76C99225E559B2AB7F5F9C49FBE28B2FBEEEB18F3CF248BE74E9D25567D62E58B0A07CBFDEF8B8B6DF11EFDD7BEBADB7AEFADEC111BF277E467CBE7CF9F221FFBEA16E37D005DA89FD0C0000FA4E00AA5A5CE66459365E2102A0DD347BA02B0C7481CAED7DAC430000E83B01A86471793C49929D142200DA8D81AE812E80FD0C0000FA4E00DAA1B82C4B92644B8508807663A06BA00B603F030080BE13804A4B9264EBA2B82C518800684706BA06BA00F6330000E83B01A8B42449C615C5E5418508807664A06BA00B603F030080BE1380AA1796095996CD528800684706BA06BA00F6330000E83B01A8B4344D8BDAD2F1438508807664A06BA00B603F030080BE13804ACBB2ACAB88F3152200DA9181AE812E80FD0C0000FA4E00AA5E58CE4CD3F43B0A1100EDC840D74017C07E0600007D2700552F2C971571A84204403B32D035D005B09F010040DF0940A5A5697A6396657B2B4400B423035D035D00FB190000F49D0054BDB0DC3571E2C48F2B4400B423035D035D00FB190000F49D0054BDB03C9524C97B152200DA9181AE812E80FD0C0000FA4E002A2B4992CD8AC2F24A7C548800684706BA06BA00F6330000E83B01A8AC383337CED0558800685706BA06BA00F6330000E83B01A87251F99B780F5D8508807665A06BA00B603F030080BE1380CA4AD3749F226E548800685706BA06BA00F6330000E83B01A8AC344DBF5A1496FF528800685706BA06BA00F6330000E83B01A8AC2CCB4E28E20C8508807665A06BA00B603F030080BE13802A17959E344D3B152200DA9581AE812E80FD0C0000FA4E00AA5C54AE2A22558800685706BA06BA00F6330000E83B01A8AC2CCB6615F1198508807665A06BA00B603F030080BE13802A179507932419A71001D0AE0C740D7401EC670000D0770250E5A2B2244992AD152200DA9581AE812E80FD0C0000FA4E002A2949922D8BA2F2B24204403B33D035D005B09F010040DF0940252549B25351541E5788006867030303AF2D5BB6CC30B505A2F87758D0DFDFBF5C5602A3C97E0600007D2700552A289F2C628E4204403B9B3D7BF682458B1619A8B6403CF1C4133FECEFEFBF555602A3BC0FB29F010040DF094035A469FA2F4551B9462102A09DD56AB5FD6FBAE9A6250B172E5CEC4CDD513B3377E1DCB973AFECEFEF9F57C4BEB212184DF6330000E83B01A88C2CCBBE5914950B142200DA5D0C11E3CCD02256C47BB88A118F152B8FBF612E30EAEC670000D0770250A582725A9AA6FFA61001000063681F643F030080BE1380CA1494FF28E270850800001843FB20FB190000F49D0054439AA6D71545E58B0A1100003056D8CF0000A0EF04A04A05E5D6891327EEA11001000063681F643F030080BE1380CA1494794992BC5F21020000C6D03EC87E0600007D27009529282B922479AB420400008CA17D90FD0C0000FA4E005A5F9224DB1605E53985080000184BEC670000D07702500959967DA42828F72B440000C058623F030080BE1380AA1493BDB22CAB29440000C018DB0BD9CF0000A0EF04A0F5A5693AA928285728440000C058623F030080BE13804AC8B2ECDB457C4F21020000C612FB190000F49D0054A5987C374DD363152200464AF2A31F6DF6ED73EADBADF38179BEC9D1BD37BCB3F1E53767D4DFE1E801F026EE85EC670000D07702508962F28322BEAC10013052BACF1DD8A1ABB77E5D7CDED5533BADABB776EDE0E8EEA9EF5DDED7579FD0DD53FB71E3FB3A7B07EEEC9A3E73FCF117F76F3D6D5A7D734712808DDC0BD9CF0000A0EF04A0F56559D65FC41714220046C2B133EAEFEDECABFD63575F6DD6949EFA5F77F5D606E2EBA9BDB58F35E2C80B7EF1AE786CF198CBBAFAEA5F8ACFA7F6D4FEA9AB77E0A1E2F1D717B1B4B8EFEF1D4D003686FD0C0000FA4E00AA524C7E3369D2A48F2A44008C84CEDEDA2145CCE9EAAD2DEEECAB5FD3DD5B9B39B5B7BE67D779F50F447C7BFAC05FC4E3E2F2CA5DBD03F7744EAFEFD7D9539B513CFEC1F231D3678E8F21B02309C09BB017B29F010040DF0940258AC93349926CAF10013052065F723906BA5DBD0357FFF16CDC227A6BCF94B7F7D53B3B7B6B0FC459B99DBD038715B7BFD8D957FB590C8263A05BC47C4712808DDC0BD9CF0000A0EF04A0B51D7EF8E17F521493578A4F375188001829E5A596FB6A8F96EF97DB5B9B1903DEC67DF13EB9F1B1FBDC1BB72D3E3FAAB8FFECF8BA78EC6DE5C7BEDAACC15F03C070D9CF0000A0EF04A0E52549B243514C867D86934204C086EAEAAB9DDCD55BFFDFB8EC725C56F98F67E8D62E2D3EF644149F3F158F3BBA77E083C5631676F70E9CD9DD57EB2E6EBF3BCEEA2D3ECE5BF971AEA309C0C6B09F010040DF0940150AC9DF1571874204C0481A7CC9E5F2F2C97DF5099DE7D7C6454CE999B54BDC3EA567E0935D3DF56F759E3F73B7A37B6F78E7EA67E41ED5376BA7E2F19F703401B09F010040DF0940DB4AD374BFA2985CAF100130923A7BFADF3FF83D74BB7B07F6983A63D68E8DE83AAFBE4DF78CFA87BAFAEAA7C499BC5D3D03E7C7A598E332CC8D9FD1D5533FA9B86F8AA30980FD0C0000FA4E00DA5696655F2F8AC9250A110023656AEFACBFE9EAADDD15C3DAF8BAABA7765AF1F54F0647676FFD88AEBE817DBA7AEB9362B8BBF2712714F7FDAA71B9E6E2F32BBF357DE6BB1D5100EC670000D07702D0CE85E45FB32C3B5D21020000C6E07EC87E0600007D27002D5F48A6A7697A94420400008CC1FD90FD0C0000FA4E005A5B9AA63F2E8AC9810A11000030D6D8CF0000A0EF04A00A85E4E62CCB3EA51001000063703F643F030080BE1380962F248F2449F221850800001883FB21FB190000F49D00B47C21792949927728440000C018DC0FD9CF0000A0EF04A075C5203706BA0A1100003016D9CF0000A0EF04A0A5C5A596E392CB0A1100003016D9CF0000A0EF04A0D58BC8A78BB879630B91104208218410425435EC0C01001881E7E2F59D000C4F9AA6495148AE76240000000000A0390C740118B62CCB8E2E0A499F23010000000000CD61A00BC0C614917F4FD3F424470200000000009AC34017808D2922971631D991000000000080E630D00560D8D234FD595148F675240000000000A0390C7401D8982272C7C48913FFD691000000000080E630D00560638AC8FC24497670240000000000A0390C7401189669D3A66D5A149157264C98B0B9A3010000000000CD61A00BC0B02449B27D51449E71240000000000A0790C740118962CCB762B8AC86F1C090000000000681E035D0086254DD37FC8B2ACDF91000000000080E631D0056058D2343DA42822973B120000000000D03C06BA000C4B9665C71571B623010000000000CD63A00BC0700BC8B9699A4E75240000000000A0790C7401186E01B9B288898E040000000000348F812E00C3926559AD88CF39120000000000D03C06BA000CB780DC9F24C9AE8E040000000000348F812E00C32D20CF2549B2AD23010000000000CD63A00BC006DB679F7DDE561490E58E0400000000003497812E001B2C4992F71705649E23010000000000CD65A00BC0708AC7278AB8D591000000000080E632D0056083A569BA7F5140AE7524000060F4253FFAD166DF3EA7BEDD3A1F98E79B1CDD7BC33B1B5F7E7346FD1D8E1E0000B43E035D0036589665471405E46247020000465FF7B9033B74F5D6AF8BCFBB7A6AA775F5D6AE1D1CDD3DF5BDCBFBFAEA13BA7B6A3F6E7C5F67EFC09D5DD3678E3FFEE2FEADA74DAB6FEE480200406B32D0056038C5E3942CCB4E7524000060741D3BA3FEDECEBEDA3F76F5D5664DE9A9FF75576F6D20BE9EDA5BFB58238EBCE017EF8AC7168FB9ACABAFFEA5F87C6A4FED9FBA7A071E2A1E7F7D114B8BFBFEDED1040080D664A00BC0708AC785699A1EE9480000C0E8EAECAD1D52C49CAEDEDAE2CEBEFA35DDBDB599537BEB7B769D57FF40C4B7A70FFC453C2E2EAFDCD53B704FE7F4FA7E9D3DB519C5E31F2C1F337DE6F818023B920000D0BA0C7401D860699AFE4F51400E7024000060F40DBEE4720C74BB7A07AEFEE3D9B845F4D69E296FEFAB7776F6D61E88B3723B7B070E2B6E7FB1B3AFF6B31804C740B788F98E240000B426035D0086533CE6645936DE91000080D1575E6AB9AFF668F97EB9BDB59931E06DDC17EF931B1FBBCFBD71DBE2F3A38AFBCF8EAF8BC7DE567EECABCD1AFC350000D07A0C7401184EF1783C49929D1C090000185D5D7DB593BB7AEBFF1B975D8ECB2AFFF10CDDDAA5C5C79E88E2F3A7E27147F70E7CB078CCC2EEDE8133BBFB6ADDC5ED77C759BDC5C7792B3FCE75340100A03519E802309CE2B12C49922D1D090000187D832FB95C5E3EB9AF3EA1F3FCDAB888293DB37689DBA7F40C7CB2ABA7FEADCEF367EE7674EF0DEF5CFD8CDCA3FA66ED543CFE138E260000B41E035D00364892245B17C5638923010000ADA1B3A7FFFD83DF43B7BB77608FA93366EDD888AEF3EADB74CFA87FA8ABAF7E4A9CC9DBD533707E5C8A392EC3DCF8195D3DF5938AFBA6389A0000D07A0C7401D82049928C2B8AC7838E0400008CBEA9BDB3FEA6ABB776570C6BE3EBAE9EDA69C5D73F191C9DBDF523BAFA06F6E9EAAD4F8AE1EECAC79D50DCF7ABC6E59A8BCFAFFCD6F499EF76440100A0F518E802B0A18563429665B31C090000000000683E035D0036489AA645EDE8F8A123010000000000CD67A00BC006C9B2ACAB88F31D090000000000683E035D0036B4709C99A6E9771C090000000000683E035D0036B4705C56C4A18E040000000000349F812E001B244DD31BB32CDBDB91000000000080E633D00560430BC75D13274EFCB823010000000000CD67A00BC086168EA7922479AF23010000000000CD67A00BC07A9B366DDAA6513884104208218410420821841042083172614201C0060D751D050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C6BAFF0FC6E57D9A0AC9FE2D0000000049454E44AE426082, 1); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('b97761b9-1c51-11ec-94ee-5ef70686b817', 1, 'flowConSign.bpmn', 'b97761b8-1c51-11ec-94ee-5ef70686b817', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A62706D6E323D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A64633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E222069643D226469616772616D5F666C6F77436F6E5369676E22207873693A736368656D614C6F636174696F6E3D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2042504D4E32302E787364223E0A20203C70726F636573732069643D22666C6F77436F6E5369676E22206E616D653D22E5A49AE5AE9EE4BE8BE58AA0E7ADBE2220697345786563757461626C653D2274727565223E0A202020203C657874656E73696F6E456C656D656E74733E0A2020202020203C666C6F7761626C653A657865637574696F6E4C697374656E6572206576656E743D22656E642220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E557064617465466C6F775374617475734C697374656E6572223E3C2F666C6F7761626C653A657865637574696F6E4C697374656E65723E0A202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C73746172744576656E742069643D224576656E745F3077706B6A3665223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D2241637469766974795F31786B376A346E22206E616D653D22E5BD95E585A52220666C6F7761626C653A61737369676E65653D22247B7374617274557365724E616D657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934353431313335343236373634382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A66616C73652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383936323633313922206C6162656C3D22E68F90E4BAA42220747970653D226D756C74695F7369676E222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383936333333373322206C6162656C3D22E58AA0E7ADBE2220747970653D226D756C74695F636F6E7369676E222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3131316B7970732220736F757263655265663D224576656E745F3077706B6A366522207461726765745265663D2241637469766974795F31786B376A346E223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3030366736716F22206E616D653D22E4BC9AE7ADBE2220666C6F7761626C653A61737369676E65653D22247B61737369676E65657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934353431313335343236373634382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383937333336303022206C6162656C3D22E5908CE6848F2220747970653D226D756C74695F6167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D2266616C73652220666C6F7761626C653A636F6C6C656374696F6E3D2261737369676E65654C6973742220666C6F7761626C653A656C656D656E745661726961626C653D2261737369676E6565223E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B6E724F66496E7374616E636573203D3D206E724F66436F6D706C65746564496E7374616E6365737D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F306374327969642220736F757263655265663D2241637469766974795F31786B376A346E22207461726765745265663D2241637469766974795F3030366736716F223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3070376F6D646D22206E616D653D22E5AEA1E689B92220666C6F7761626C653A61737369676E65653D2261646D696E2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934353431313335343236373634382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383936383238393522206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383936383639333922206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3035326B767A682220736F757263655265663D2241637469766974795F3030366736716F22207461726765745265663D2241637469766974795F3070376F6D646D223E3C2F73657175656E6365466C6F773E0A202020203C656E644576656E742069643D224576656E745F3165356D6D7870223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D22466C6F775F316E673571703722206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F3070376F6D646D22207461726765745265663D224576656E745F3165356D6D7870223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3030397037687922206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F3070376F6D646D22207461726765745265663D2241637469766974795F31786B376A346E223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F666C6F77436F6E5369676E223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22666C6F77436F6E5369676E222069643D2242504D4E506C616E655F666C6F77436F6E5369676E223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F3077706B6A3665222069643D2242504D4E53686170655F4576656E745F3077706B6A3665223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223130322E302220793D223330322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31786B376A346E222069643D2242504D4E53686170655F41637469766974795F31786B376A346E223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223139302E302220793D223238302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F3030366736716F222069643D2242504D4E53686170655F41637469766974795F3030366736716F223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223335302E302220793D223238302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F3070376F6D646D222069643D2242504D4E53686170655F41637469766974795F3070376F6D646D223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223531302E302220793D223238302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F3165356D6D7870222069643D2242504D4E53686170655F4576656E745F3165356D6D7870223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223637322E302220793D223330322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30303970376879222069643D2242504D4E456467655F466C6F775F30303970376879223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223536302E302220793D223238302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223536302E302220793D223233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223238302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223338392E302220793D223231322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F316E6735717037222069643D2242504D4E456467655F466C6F775F316E6735717037223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223631302E302220793D223332302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223637322E302220793D223332302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D223633302E302220793D223330322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F3035326B767A68222069643D2242504D4E456467655F466C6F775F3035326B767A68223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223435302E302220793D223332302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223531302E302220793D223332302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30637432796964222069643D2242504D4E456467655F466C6F775F30637432796964223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223239302E302220793D223332302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223335302E302220793D223332302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F3131316B797073222069643D2242504D4E456467655F466C6F775F3131316B797073223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223133382E302220793D223332302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223139302E302220793D223332302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('b9819aea-1c51-11ec-94ee-5ef70686b817', 1, 'flowConSign.flowConSign.png', 'b97761b8-1c51-11ec-94ee-5ef70686b817', 0x89504E470D0A1A0A0000000D49484452000002CE000001720806000000E50C5CBF00001D7A4944415478DAEDDD09749D65B92F7010541C8E80A0E2801E0E8E473DEA75A9E044970B44C185B81669485B6A4B0A051592940EF75C28A745BC9EDE5B0FCD4EC7B5BCCA209541AB16A8429BBD6999A70265924269296DD3093ADA0148BFFB3D1FD93DBBA1A12D6D93EC9DDF6FAD67ED640F49D8FCFB3D4FDEBCFBDB071C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015A6EA861B0EBA686CE1C85DDE31490EBC2037E33DC54F7F32A1F06ECF1E00003D46C37F357FB83E57981E1FD737E62FABCFE5FF525A0D8D85EF65B735157A3534E6FF507C5C5DAE796EFDF859C78F9832F3D051A30A077B260100A858C326148EAA6BCA9F5CDF949F7D6163E173E9A0DC1C9F0FC9E5BF50ACF327DE71F86B8373FECA74783E3D3E1ED2983FA53ED73C3FBDFFCD696D486FFB86671300808A5597CBF74FEB9E74F85D5DD75498D690CBCF1A922B1C577F45E19FA32E1ADFFCB1B85F6CCB4807E57975E30B3FA86BCC4F48EFFF74769FF1B38E8F61DB33090040C52BDDAA1183733A20DFF8DAEA725AB9FCAAECFAA6425D3A603F15ABCC75B9E673D2EBD7D735E56F89813B06E7B4967A260100A868D9168DA6FC826C3F733A38C7205DBC2DF631BF365CFFEDBDE9C73F4B6FFF3FF1797ADF07B2CBA6FCECD2CF0100A022A583EFC8FA5CE1EED8AE11DB315E5B71CEFFBFF4B2312AFD7879DCEF825CF3B1E97D5A1A72CDFFD9D0946F48AF7F3456A9D3CBC56D978B3C9B000054B41DCEAA11DB2E9A0ABDEAC6E53F157561E3EC4FC4F51736367FBDBEB1F0D3BA71B3FE2D4E49D77E85F9674DB38F49EFFF35CF26000015ABAE71E6474BF73837E49ABF3A64C2ECA38B557F45E1B08609858FA703F57F642F246C6C1E175B3862FB46F16BA443F5C5E96D177A360100A8484372B3BF549FCB3F1243F16B0370761EE73F97565DAE30B8BEA9F9FBE970DD3786E8B6FBFD7B7ADB7DC56D1EE9C7537F3A7ED6119E510000000000000000000000000000000000000000000000806EECCC33CF4C9452AAA7962E00C01E0DCE9E05C0F10F00340E00C73F00340E00C73F00340E00C73F00340E00C73F00340E00C73F00340E00C73F00340E00C73F00D038001CFF00D038001CFF00D038001CFF00D038001CFF00D038001CFF00D038001CFF00D038001CFF0040E3001CFF0040E30070FC0340E30070FC0340E30070FC0340E30070FC0340E30070FC0340E30070FC0340E30070FC03008D03C0F10F008D03C0F10F008D03C0F10F008D03C0F10F008D03C0F10F008D03C0F10F008D03C0F10F00340E00C73F00340E00C73F00340E00C73F00340E804E337FFEFC73C78E1D9B5455551DE3D900C0E00CB0134992BC7BDDBA759B57AF5E9DD4D6D6DEEA1901C0E00CB013CF3EFBEC2D499B7C3EBFAAA6A6A6B767050083334089850B179ED0DADA5A9C9B936DDBB6B58E1C3972455555D5A19E1D000CCE0007645B340E5AB162C5CAA49DB8AE6FDFBE933C4300189C010EC85E107845D281A953A7AEADAEAE3ECEB3044071482EC4A0BC8B2A78A6804AD3D2D2F2CF5BB66C69ED68707EF5D557375D78E1854FF6EAD5EB60CF16003138F7DA8DC1B997670AA8348B172F7E3CD985279F7C72794D4DCD70CF1600C5E1B960B519E849AAAAAA0E9A3B77EED65D0DCE2FBDF4D21DE9717055DCDFB306C0AE569D7B7986804A3472E4C85F6CDDBAF59537989BD7373434E4AD3803D07E782E586D067A92D8BB7CFDF5D72FED686A7EF0C107AF4C8F838FDAE30C40FBC1B997D566A0A7193870E0D7172D5AF472FBA1B9B5B5F5E1BE7DFB2E71560D003A1A9E0B569B819E66CC9831376E4B959E5023AE4B8F83133D3B00743438F7B2DA0CF434F10E813367CEDC509C9A5B5A5AAE4B8F814BBC732000BB1A9E0BDE0005E869EAEAEAFAAF59B3E6E5D5AB5727679F7DF663353535BD3D2B00EC6A70EE6570067AA2C993273F3476ECD8F88BDB0CCF06C07E9624C9DB9E7BEEB91BEEB9E79E979B9B9B939933679665C5E05CAE3F7BFABC6F9B3367CEB27C3EFF43F99BA9E44FFEF6A0A64D9B961DFFE252FE00F6B3B469DC981EB492152B56249B376F4EB66EDDAA3AB9E2798FE7FFF6DB6F5F97369253E54FC99FFCED492D5BB64CFE003A43ACB4C441CB00D1F5D5D2D2B23A6D1CF7CB9F923FF9933F806E28FE3C69A5AFFBACBCA48D638BFC29F9933FF903E886628F998376F7A9F8FF217F4AFEE44FFE00CAB8716C5CDB923CF7C06F9327665D96557C1CD739D86B1CF2277FF2A7E40FD038DA6AC39AA5C9E3B78E4C1EBD65D80E15D7C56D0EF81A87FCC99FFC29F903348EB45E7862FAEB9A46B1963C719303BEC6217FF2277F4AFE008D23EAA9C2980E1B47DCE680AF71C89FFCC99F923F40E348EBF199A33A6C1C719B03BEC6217FF2277F4AFE008D43E3D038E44FFEE44FFEE40F60F71A47BC8ABCA3C611B739E06B1CF2277FF2A7E40FD038D27AE6AEF11D368EB8CD015FE3903FF9933F257F80C691D68B4BE7258FDFF61FAFFF33657A5DDCE680AF71C89FFCC99F923F40E368AB850F5EFDBAC611D739D86B1CF2277FF2A7E40FD0388AB5654BF2CCDD935EFF67CAF4BAB8CD015FE3903FF9933F257F408F6F1CF1CE58F3EF6AEA708F5FDCE6DDB3340EF9933FF953F207F4DCC6B1654BD2F24C3E79EC6FFFABC3A651ACB84FDCD7EA8BC6217FF2277F4AFE801ED53876B5CA62F545E3903FF9933FF9933FC0E09CD6EEACB2BCD1EA8B06A071C89FFCC99F923FA047348E37DB348AA501681CF2277FF2A7E40FE8118D43691CF2277FF2A7E4AF7B1A3060C061679E79E619D5D5D5B9F4B239AD85696D4A2B69BB8CCF9BDB6E3F23EEEF59A343EBD6AD7BEFF4E9D32F1B3F7EFCA3A3478F5E3D62C488CDE79F7FFEB608D479E79DF7CAD0A143D75F7CF1C58B2FBBECB29B860D1BF6BDF421071A9C1DB0350EF953F2A7E42F344C287CBCE1BFEE7E4777CB6B4D4DCD49E92C332DADAD6D43F2EE56DC7F5A3CDE94C876F7DD77DF79E3C68D5B3A78F0E0241D96931B6FBC3179E8A18792050B16242FBEF86212E2323E8FEBE3F6E1C3876FABADADDD9A0ED0B7F6E9D3E75F0CCE4AE3903FF9933F5519F9FBC984C2BBEB72F9BFBE51C57DE2BEE9C717363435FFCFA8FAA6E627EB73F9ABB67F9E6BAEEFE281F9F874F0BD770F87E58EEADEF87AA6C61E6CDEBC79A74C9C3871D9B9E79E9BFCF18F7F4C56AD5A95EC89B87F3C2E1DA05F6E6868B8210DD4911A8732B8C89FFCC99F2AEFFC9D3FF18EC3EB9BF20F3734CDFEFCCE2A6E8BFBC47DD341F9D486A67C433A24CFAB6F2A9C9E552EFF4CFAF9F9715B57E473C08001875457574F4887DD6DED07E0FAFAFAE4DA6BAF7DC305C2B83DEEB793E1795B7CDDF8FAA6C81E24CDC7413366CC981E03F355575D956CD8B021D91BF1F8F83A699036F5EBD7EF748D43195CE44FFEE44F95F9E09CCBDF59DF981F52DF58B86DC76A1E1AB7C57D1A1AF3BDD3217A41432EFF5C7ADDE2F8B8AD96143F6E682C9CD999D94C87DBA36B6A6A1E2D1D78FBF4E9934C99322559B264C91ECD3771FF785C3CBEDD00FD487C1F1365CF189A0FBBE69A6BE6FFF4A73F4D9E7BEEB9645F8AAF970EE39B6B6B6B476B1CCAE0227FF2277FAABC07E761130A47D58DCB7F6AC79AF581E2E09CAD385F31FB33E9E7BFABCF35FFB6B41A1A9BAFB92037EB5F3B3397E9C0FCE9B496960EB963C68C495E78E185BD9A6FE2F1F175DA0DCF2FC4F7335956F8D09CCBE5D65C72C925C99A356B92FD21BEEE88112336F5EFDFFF6A8D43195CE44FFEE44F95EFE03C7CCC9DFF945E2EABCF15A6BF56E9C757140EDB61706E6AFE4E5DAE796E5A634B2BBDCF43715B27AF342F2D5D659E3E7DFA3E9D71E2EBB55B7D7EC1CA73056FCFB8E69A6B9E89A139FE91ED4FF1F5870E1DBAB66FDFBE176B1CCAE0227FF2277FAA3C07E70B7233DE930ECC738AD7A7D7158AB7950ECEF54DF97B1B72F9D1A595DEE7BECE1A9C63CF71E9F68C810307260F3FFCF07E9971E2EBC6D72FDDB661CF73058A3DCD3FFBD9CFF6DB4AF3CE569E070D1AB43E0DD4691A8732B8C89FFCC99F2AD7C139BFFCBFB760E497B71F9CE3AC1AF54D855E71168DEC0C1BB97CE3858DB33F910ECDDFAF6B2AF4EB8C3CB6BD1070FB4AF3FE1A9A4B87E7D295E7F8FE26CD0A92FE0F3E355E08B8AFF734EFCE9EE77EFDFAADA9AAAA7A9FC6A10C2EF2277FF2A7CA6B70CE5694636B46491D902407C6D68CEC3EE39BFF477ABF3B2EC8351F1BABCE43FFEFADEFAA6B2C4CAA1B3FEBA4FAC6E671E96D8FD68D9BF595FD99C5B653CEB51687D89B6EBAA953669CF83E25ABCEAD4E555741E2947371D68BAE3069D2A46569A01A350E6570913FF9933F551EF91B3165E6A1A55B344AB66A9C9AD6E33138C700DD902B9CD890CB9F306A54E1E0F4FABFD5E5F2F7C4C01D97431AF3A70CC9E5BF503F7ED67E1D284BCFD31C2FE0EB4CED5E3078AF89B302C49B9BC46AF3FAF5EBBB64708EEF7BD65967ADABC43749D1380C2EF2A7E44FC95FD7E9DDBBF789A55B34F6F6EC196FE66C1BA55B36E2E7317996B97847C069D3A6255DE9EAABAF5E90066A8AC6A1340EF9933FF953F2B70F579BA71587D638DF725788EF5BB2EA3CCDE459C6D6AF5F7FC479E79D97AC5CB9B24B07E7F4FBBF9AFE46B662D4A8516FD13894C6217FF2277FAA73F35769FD37A473C5E1E9A0BAB538B476F66A73E9AA73C9E0BC357E2E136899BAF9E69B478F183122E90E060D1AB4280DD4D7CBE437D8425ABD340E838BFC29F993BF72CEDFF2E5CB8F59BC78F1E373E7CEDD7AE9A597FEEF5EBD7A1D5C29394C6F3FA3F46DB4BB52BBB7E73EC3045AA69A9A9A1EBBF1C61BBBC5E03C79F2E4787BCAFF2C937FB0C5F0BFE13F5C8DC3E0227F4AFE5477CC5FBC77C3FCF9F3AFD8B2654B6BC97B2CBC72FDF5D72F1D3870E0D72B2187E9F54DC5FBFDEE77BFEBD21927BE7FC9CFDC64022D53A3478F5EFDD0430F758BC179CE9C39F3AAABABA79759E378C37FB81A87C145FE94FCA9EE96BF850B179EB062C58A0EF7682E5AB4E8E53163C6DC585555756839E7B0A6A6265FBCFDC1071FECD21927BE7FF167899FCB045AA6860F1FBEB9B3CFDDDC91A79F7E3AB66A3C50A68D63A7FF70350E838BFC29F953DD257FA97F7AF6D9676F696D6DDD654FDE964A1FB3A1A1A1E1C7E59AC3F47271F1FAAE9E75E2FB97FC8C8B4DA065EABCF3CEDBF6D24B2F758BC1F9C5175FDC9086696999378E1DFEE16A1C0617F953F2A7BA43DD73CF3DC9BA75EB36BF8977F97D79F2E4C90F5555551D538639FC47F1F3AE9E75E2FB97AC38AF378196A9B3CE3A2B79E59557BAC5E09CFE1CEB77E31F425955A5368E38F7767A002EBB9FBBD2F25549F9FBC73FFE9135F6B8DCD9ED69F34E962C59B2C375CF3FFF7C9645F993BF7D512B56ACC832D8D1EDAB56AD4A9E78E289ECE3458B16256BD7AE4D366FDE9CFCFDEF7F4F366CD8D0ADFFDB962D5B968C1D3B3659BD7AF51EF7E6784C3CB6DCF3D8D5B34E7CFF929FE7551368991A3C78F02BDD65C5393D283D5B012BCE65F7A7CAD877F5F18F7F7CA73561C2849D3EE684134E48BEFBDDEF261B376EB4E2277F7B5D31149F7CF2C9F1FF26BB8C6352FBFB0C1F3E3C39F0C00393DFFEF6B7C9B5D75E9B0D38C71E7B6CF2ED6F7F3BFB3C6AEEDCB9F2277FBB5D3104FFF297BFDC5EA79E7A6AF296B7BC25B9FCF2CB77B8FE99679EC9EE1F197BDFFBDE977D7CE8A18726D75F7F7DB274E9D22CB7711CEDEEFFCEE2FD1A060D1A745B3E9F5FB56DDBB6D6DD68CBAFB6B4B45C77F6D9673F96FE7F9D51462BCEDB73182BBB569CD9A72EBAE8A2F5DD658FF3934F3EF96019EF712EDB17C7C42A4ABCDAF7CA2BAFDCA13EF4A10F25BFF8C52F76FA98BBEFBE3B79E73BDF990C1B36CCE02C7F7B558B172F4EBEFAD5AF66BFA8C5CF1BC3707C5EBABA1C2BCB91B7A38F3E3A1B6CE2F24B5FFA5236B07CF2939FCC2E3FF5A94F25B95C4EFEE46FB72BCE2875F0C10727DFFBDEF73AACC8D68C193392050B1664BFBC1D76D86149737373590ECEC5FCA5435BEF912347AE78A31707B6B6B63E1C2F0E4CFFBF2E89FB976B0EED71669FBBE4924B5EE82E67D598356B5673199E55A3224EC7F4E94F7F3A3BF8B7AF8E06E7A85FFDEA57C9BBDEF5AED7FDF9DCE0227FBB539B366D4AAEB8E28A6C00F9FCE73F9FBD41407190FEDCE73E971C7EF8E149636363F6A7F089132726471C714496B5934E3A29193C787076F99DEF7C27DBAAF1810F7C20B9E69A6BE44FFEF6A86EBDF5D6E4B39FFD6CB270E1C2ACE2AF1871DC8BEB8BD77DE10B5F48EEBAEBAE2CAB6F7FFBDBB3BF7AC4F132727BD5555765F789C78C1A352A39FEF8E39379F3E69545FEE26C197DFBF69D3475EAD4B5AFBEFAEAA69256BC3EFD25E0CAF4B625E9FFDB896572568D0E73E8AC1AEC73E93FF69BBACB799C2FBFFCF26965741EE78A78038058C98BFFFFB1C2FC9BDFFC6687FAE0073F98A407CFECF6D8CFD7FEB1A79F7E7AD630E2A4EE0667F9DBD3AAADADCDF21383CBDBDEF6B66C25AF58871C7248F2894F7C22BBFD273FF94976FF189A63C5E69C73CEC9EE1F4373AC3EC7B6A13FFCE10FF2277F6FAA62FBC5CE160D8A150B04A5F72DDDAA11B77FEB5BDFCA2E631121DE8577FEFCF96595BFEAEAEAE3EAEAEA9E4C2D7FE9A597EE183264480C9A8FC6F5959043E771669F1B3162C4C9C3870FDFD61D5E1BD8A74F9F79E5F2CE81BBABBB378EBFFEF5AFC931C71C937CE4231FC92E637B4634818F7EF4A3D9E7B1C2129737DD74D30E8F7BEAA9A7B2A1251A45DCE7D9679F35B8C8DF1ED5BDF7DE9BFD093CFED47DF3CD37BFAE62057AFAF4E9C9238F3C92E4F3F9E4FBDFFF7E72D04107251FFBD8C7923FFFF9CFD9CAF49FFEF4A7E4C31FFE7096D9AF7DED6BD99FD0E54FFEF674707EEF7BDF9BC45F5E238F91A5582C88CF63DB50FBC1F93DEF794FB6573806E7D80B7DE79D77668F8955E9723DFEC53B05D6D4D40C4FFBEFAAB82C97770EDCCDE1BADBBC7360FA0BCA36EF1C58192BCE6F193468D0D6952B577669A0962C5972571AA496F879348ECEAD78F14BEC178DD5BCD8BB1C4D2056F7E2B7E3B7BEF5ADD970DDFE3131301F77DC71D9C75FFEF297B3956983B3FCEDE9568D7881696CB978A38AAD1891C1534E3925F9E10F7FB8D355C11FFCE007D98B0A6FB9E516F993BFFDB2E21CFB9963DB465C17BFC495F31EE7379A072A2D837DFAF4393C9D2DB61607D6F885BC2BC4F72D199AB7C6CF65022D63C3860DBB357E83EE4A3FFFF9CFA7A6619AA271747EB5B4B424BD7AF54ABEF8C52F269FF9CC67B226107B4E63682E5D6D2956ACCAC49FD263D5AFB86A1DABCFB182687096BFDDADD8BB7CD1451765157B9463E5383E8E5FCAE2057FF1F1D0A143B79F9E2E4EFD15A7CF8C95C071E3C66583720CD5D75D775D72DA69A775781A3BF993BF5D0DCEB19F3E8E5FF1178E38FE4D9D3A35FBBC74C5F92F7FF94B72E2892726471E79648767D5E8EE6719EA69F92B59759E561C5AA74C99D225334E7CDF92C1799AC9B3FC7F23FB97DADADA97A3097585356BD6DC9F066965FC1C1A47E7D7F2E5CB93FEFDFB6F5F4939A06DDF5EBC182B9ACA962D5B76389D516CCD8895C2D2AF110DE5A8A38ECAFEACAE71C8DF9E546CCB882D18C59F75D6AC59D92F6D91BDF6F7FDCA57BE925C70C105D97DE36C0891DDD8EB1CA711F3170FF9EBEC3DCEED07E7DEBD7BEF74B141FEBA56FAFFE5C4E2D09ACE199DBEEA1CDFAFA6A666FB368DF8794C9E15A0A1A1E1867885705748BFF7F569981A358ECEAFD83B1A8DA0782AB0DB6EBB6DFB568DBABABA6C2539F68EC6F94E7FFFFBDF67034DACEEB57FD38938A5DD37BEF18D6C35E6FEFBEFD738E46FB7EABEFBEECB5E841A5B85E20D16E2745F03070E4CDEFFFEF727EF78C73BB6FF1523DEBCE1EAABAF4E7EFCE31F27DFFCE637B317B3C6101D7B4CE32C07B14A1DB717CFCC217FF2B727EFA697F6A06CB538CED71CC7BF071E7820FB3CB6B1C52F72C50586D1A34767C7CBB83D7ED98BBFD215B70F8D1F3F3E7B416B9C0946FEBAE5AAF3BDC5C175CC98319D3AE3C4F72B596DBED7C45921AAAAAADE3760C0804D9D7D9EC3F4B7F4D8A2B132BEBFC6D1F9F5E8A38F662B78F167F08B2FBE386B00F102C1E22A733488680CB19D23FED4147B99636F6A476F62112BCFDD799FA9C1A5FB9D47377E698B5FCE629F729C69E3D24B2FCDCEEA127B9ACF3DF7DCEDC34D6CDFD855CD9933C7E02C7F6FBAE2EC41710C7CF8E1875F77DBAF7FFDEBECB61FFDE847D98BA5E305D5F10B5BBC2035CE3B5E3C7616DF5950FEBA979A9A9AE3D359A3B538C0C6FFC3CE10DFA764686E8D9FC3C45941FAF5EB77FAE0C18337C700D41956AE5C393B0DD2F3699DA671748F374279ECB1C7B201B812DF26DCE0525E558E6FE92E7FE59DBFD8271F7F31DBD9DB67C70A742C20C4C7A5DBD74AF3BAB3EBE5AFFBA8AEAE9E50BA65237E41DA9FE2EB976ED188EF6FD2AC40B5B5B5A3478C18B129FE91ED4FE901E6C934B80FA4A1FA778D43691CF2277FF2A7E46F7F1A3060C021E900FB4871908D6D61FB6B788EAF9B7EBFD692D5E647E2FB9B322B54FFFEFDAF1E3A74E8DAFDB5F2BC72E5CADB63684E83F46B8D43691CF2277FF2A7E4AF33A473C7D169BD50BAF21C6753D997E2EB95AE34B77DBFA34D9715AE6FDFBE17D7D6D6AEDFD77B9EDBF6342FAEF495668D43E3903F257FF2277FDD4F3A7F7CBA74782EBE60706FCFB6118F6FF742C06C688EEFE759EF39BF999DD6AF5FBF3593264D5A167BBEF6C6DAB56BEF6B3B7BC6CA4ADED3AC71681CF2A7E44FFEE4AF2C569E1F291D7263F5395E041F6795DAC33770CB1ED76E953969FBFA569A7BE06F6647C6A9E2CE3AEBAC75575E79E58255AB56BDB2276FA3BD74E9D2BB468F1E3DB56D606E8CAFA771288D43FEE44FFE94FC75A5D873DCF682C1F6036FF6F6DC71DEEE78C3A5050B16242FBEF86236D4C4657C1ED7C7EDEDDE46BB58DBE2EBDAD3DCC3C59B93C43BFBA583EFCA73CE39E7F9C993273F3C67CE9C794F3FFDF4E2D5AB576F4CF3B461E5CA95CF3DF1C4130FA6FF38675E7EF9E5D3D2C7CC4B1FB33C1E57896F6EA271681CF2A7E44FFEE4AFEC17088F2F3DCFF35ED6BD4E39477B07F6EEDDFB1B69307E99FE46353D0DC9FD257B85E2F2FEB83E6E8FFBC5FD7BF293A571681CF2A7E44FC95F590CD027B5BD3DF7D63D1C96E3FED3E2F19E45D038340EF953F2277FF2D7630C1830E0B074103EA3BABA3A975E36A7B530AD4D6D43F2A6B6CF9BDB6E3F23EEEF59038D43E3903F257FF2277F001A87C6217F4AFEE44FFE00340EA571C89FFCC99F3238031A87D238E44FFEE44FC91FA071288DA3C7E66FE3C68DC9E38F3F9E5DEECDF5F2277F4AFE008D43691C159DBF1882D31F39BBDC9BEBE54FFE94FC011A87D2380CCE0667F953F207681C4AE330381B9CE54FC91F607076C0D638E4CFE02C7F4AFE00340E8D43FE0CCEF2E7F8277F001A87C6217F0667F973FC73FC03D038340EF93338CB9FFC39FE01681C4AE33038CB9FFC298333A071288DC3E06C70963F257F80C6A1340E83B3C159FE94FC010667A571C89FC159FE94FC01681C1A87FC199CE5CFF14FFE00DE8CE6E6E66D9B376F76D0EE0695FE7F5896368E2DF26770963FF973FC03E886E6CC99B36CC58A150EDCDDA09E7FFEF9EBD2C671BFFC75CFDAB871633604C7E5DE5C2F7FF2A7E40F2853F97CFE87B7DF7EFBBA969696D5565EBA6CA5A565D1A24553D3A6B138AD53E54FC99FFCC91F40371507ABF84D3FADADB1C74C757A6D6D7BFE4F953F79903FF9933F000000000000000000000000000000000000000000000000002ADAFF079DBE4A708996EDEC0000000049454E44AE426082, 1); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('d273a35e-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract.bpmn', 'd273a35d-1cd8-11ec-acd8-3ae4f1d3c3af', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A62706D6E323D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A64633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E222069643D226469616772616D5F666C6F77436F6E747261637422207873693A736368656D614C6F636174696F6E3D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2042504D4E32302E787364223E0A20203C70726F636573732069643D22666C6F77436F6E747261637422206E616D653D22E59088E5908CE5AEA1E689B92220697345786563757461626C653D2274727565223E0A202020203C657874656E73696F6E456C656D656E74733E0A2020202020203C666C6F7761626C653A657865637574696F6E4C697374656E6572206576656E743D22656E642220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E557064617465466C6F775374617475734C697374656E6572223E3C2F666C6F7761626C653A657865637574696F6E4C697374656E65723E0A202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C73746172744576656E742069643D224576656E745F3170736D697364223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D2241637469766974795F306E796C61317222206E616D653D22E59088E5908CE5BD95E585A52220666C6F7761626C653A61737369676E65653D22247B7374617274557365724E616D657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935343932303334383934363433322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A66616C73652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839363537313222206C6162656C3D22E68F90E4BAA42220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F303063657865612220736F757263655265663D224576656E745F3170736D69736422207461726765745265663D2241637469766974795F306E796C613172223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3175637268353222206E616D653D22E4B89AE58AA1E983A8E9A286E5AFBCE5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22247B64657074506F73744C65616465727D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935343932303334383934363433322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550545F504F53545F4C45414445522671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E44657074506F73744C65616465724C697374656E6572223E3C2F666C6F7761626C653A7461736B4C697374656E65723E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839373234353522206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30346B63616A632220736F757263655265663D2241637469766974795F306E796C61317222207461726765745265663D2241637469766974795F31756372683532223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30323666766E712220736F757263655265663D2241637469766974795F3175637268353222207461726765745265663D22476174657761795F30396364787466223E3C2F73657175656E6365466C6F773E0A202020203C706172616C6C656C476174657761792069643D22476174657761795F30396364787466223E3C2F706172616C6C656C476174657761793E0A202020203C757365725461736B2069643D2241637469766974795F3133386D346E6E22206E616D653D22E5B7A5E7A88BE983A8E5AEA1E689B92220666C6F7761626C653A63616E64696461746555736572733D2261646D696E2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353139343939313937323335322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839373831303122206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F307A7A307539672220736F757263655265663D22476174657761795F3039636478746622207461726765745265663D2241637469766974795F3133386D346E6E223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F30746D336D706822206E616D653D22E980A0E4BBB7E983A8E5AEA1E689B92220666C6F7761626C653A61737369676E65653D2261646D696E2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353139343939313937323335322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383839383233373722206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F317978716265302220736F757263655265663D22476174657761795F3039636478746622207461726765745265663D2241637469766974795F30746D336D7068223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31323465387A332220736F757263655265663D2241637469766974795F3133386D346E6E22207461726765745265663D22476174657761795F306F79366F666C223E3C2F73657175656E6365466C6F773E0A202020203C706172616C6C656C476174657761792069643D22476174657761795F306F79366F666C223E3C2F706172616C6C656C476174657761793E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3175766A3364732220736F757263655265663D2241637469766974795F30746D336D706822207461726765745265663D22476174657761795F306F79366F666C223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3179757579696522206E616D653D22E8B4A2E58AA1E983A8E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303936343531393339353333323039362C313434303936343531393339313133373739322220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353132373739303833333636342671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B504F53542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383930333738313422206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383930343234383922206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F316B79686E6C7A2220736F757263655265663D22476174657761795F306F79366F666C22207461726765745265663D2241637469766974795F31797575796965223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3039386E63767722206E616D653D22E6B395E58AA1E983A8E4BC9AE7ADBE2220666C6F7761626C653A61737369676E65653D22247B61737369676E65657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353030313039333439323733362671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383931393036363222206C6162656C3D22E5908CE6848F2220747970653D226D756C74695F6167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383931393734303622206C6162656C3D22E68B92E7BB9D2220747970653D226D756C74695F726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D2266616C73652220666C6F7761626C653A636F6C6C656374696F6E3D2261737369676E65654C6973742220666C6F7761626C653A656C656D656E745661726961626C653D2261737369676E6565223E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B6E724F66496E7374616E636573203D3D206E724F66436F6D706C65746564496E7374616E6365737D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3064693671613622206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F3179757579696522207461726765745265663D2241637469766974795F31656577743031223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D22476174657761795F316D356672757A223E3C2F6578636C7573697665476174657761793E0A202020203C73657175656E6365466C6F772069643D22466C6F775F306A7976317A622220736F757263655265663D2241637469766974795F3039386E63767722207461726765745265663D22476174657761795F316D356672757A223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F316833706E787922206E616D653D22E680BBE7BB8FE79086E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303931313431303538313231333431362220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935343932303334383934363433322671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383934343935303822206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383934353238353022206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31663879786F7622206E616D653D22E5908CE6848FE4BABAE695B0E5A4A7E4BA8E3430252220736F757263655265663D22476174657761795F316D356672757A22207461726765745265663D2241637469766974795F316833706E7879223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6D756C74694167726565436F756E74202F206D756C74694E756D4F66496E7374616E636573203E20302E347D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C656E644576656E742069643D224576656E745F3132616A6F3364223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31613371636C6D22206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F316833706E787922207461726765745265663D224576656E745F3132616A6F3364223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F306C6C6F79353622206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F3179757579696522207461726765745265663D2241637469766974795F306E796C613172223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3165657774303122206E616D653D22E6B395E58AA1E983A8E5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22313434303936343338373937393339393136382220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303935353030313039333439323733362671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B504F53542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383933333730323422206C6162656C3D22E4BC9AE7ADBE2220747970653D226D756C74695F7369676E222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383933343139303122206C6162656C3D22E58AA0E7ADBE2220747970653D226D756C74695F636F6E7369676E222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F307A6D736E33782220736F757263655265663D2241637469766974795F3165657774303122207461726765745265663D2241637469766974795F3039386E637677223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3176737269766222206E616D653D22E5908CE6848FE4BABAE695B0E5B08FE4BA8E3430252220736F757263655265663D22476174657761795F316D356672757A22207461726765745265663D2241637469766974795F306E796C613172223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6D756C74694167726565436F756E74202F206D756C74694E756D4F66496E7374616E636573203C3D20302E347D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F316D323430366622206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F316833706E787922207461726765745265663D2241637469766974795F306E796C613172223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F666C6F77436F6E7472616374223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22666C6F77436F6E7472616374222069643D2242504D4E506C616E655F666C6F77436F6E7472616374223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F3170736D697364222069643D2242504D4E53686170655F4576656E745F3170736D697364223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D2239322E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F306E796C613172222069643D2242504D4E53686170655F41637469766974795F306E796C613172223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223138302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31756372683532222069643D2242504D4E53686170655F41637469766974795F31756372683532223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223334302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F30396364787466222069643D2242504D4E53686170655F476174657761795F30396364787466223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D223530352E302220793D223330352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F3133386D346E6E222069643D2242504D4E53686170655F41637469766974795F3133386D346E6E223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223636302E302220793D223136302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30746D336D7068222069643D2242504D4E53686170655F41637469766974795F30746D336D7068223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223636302E302220793D223339302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F306F79366F666C222069643D2242504D4E53686170655F476174657761795F306F79366F666C223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D223835352E302220793D223330352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31797575796965222069643D2242504D4E53686170655F41637469766974795F31797575796965223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313030302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F3039386E637677222069643D2242504D4E53686170655F41637469766974795F3039386E637677223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313336302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F316D356672757A222069643D2242504D4E53686170655F476174657761795F316D356672757A223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D22313531352E302220793D223330352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F316833706E7879222069643D2242504D4E53686170655F41637469766974795F316833706E7879223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313637302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F3132616A6F3364222069643D2242504D4E53686170655F4576656E745F3132616A6F3364223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D22313836322E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31656577743031222069643D2242504D4E53686170655F41637469766974795F31656577743031223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D22313139302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F316D3234303666222069643D2242504D4E456467655F466C6F775F316D3234303666223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313732302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313732302E302220793D223534302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231302E302220793D223534302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223935342E302220793D223532322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31767372697662222069643D2242504D4E456467655F466C6F775F31767372697662223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313534302E302220793D223330352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313534302E302220793D223133302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223133302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223239302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2238392E302220783D223834312E302220793D223131322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F307A6D736E3378222069643D2242504D4E456467655F466C6F775F307A6D736E3378223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313239302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313336302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F306C6C6F793536222069643D2242504D4E456467655F466C6F775F306C6C6F793536223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313035302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313035302E302220793D223530302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223530302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D223337302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223632392E302220793D223438322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31613371636C6D222069643D2242504D4E456467655F466C6F775F31613371636C6D223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313737302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313836322E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D22313830352E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31663879786F76222069643D2242504D4E456467655F466C6F775F31663879786F76223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313536352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313637302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2238392E302220783D22313537332E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F306A7976317A62222069643D2242504D4E456467655F466C6F775F306A7976317A62223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313436302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313531352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30646936716136222069643D2242504D4E456467655F466C6F775F30646936716136223E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313130302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313139302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D22313133342E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F316B79686E6C7A222069643D2242504D4E456467655F466C6F775F316B79686E6C7A223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223930352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D22313030302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F3175766A336473222069643D2242504D4E456467655F466C6F775F3175766A336473223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223736302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223335352E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31323465387A33222069643D2242504D4E456467655F466C6F775F31323465387A33223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223736302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E302220793D223330352E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31797871626530222069643D2242504D4E456467655F466C6F775F31797871626530223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223335352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223636302E302220793D223433302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F307A7A30753967222069643D2242504D4E456467655F466C6F775F307A7A30753967223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223330352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223636302E302220793D223230302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30323666766E71222069643D2242504D4E456467655F466C6F775F30323666766E71223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223434302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223530352E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30346B63616A63222069643D2242504D4E456467655F466C6F775F30346B63616A63223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223238302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223334302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30306365786561222069643D2242504D4E456467655F466C6F775F30306365786561223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223132382E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223138302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('d28a86bf-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract.flowContract.png', 'd273a35d-1cd8-11ec-acd8-3ae4f1d3c3af', 0x89504E470D0A1A0A0000000D4948445200000774000002260806000000AB78BB71000069854944415478DAECDD07981D55D938F05014AC34FB5F6CE0A7D83F15151B114114145009D98426862F8496DD0D298A88A11B5BB27743899F48533F0145098A81ECBD1702482F22016921B484D02142820AF39F77D859EE6E76934DB26576F7F77B9EF3E496B96577DF9C79CF79E7CC0C1B06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000834CE389D52D1B7FF6D757AC6ABBC9D32E7FCD4127565FDDDDE7279D587D93DF2E000000000000402A8AA9F5A5CA5F56D6F2826B7A7B7C6373F93BD11A9ACBB736942A67B4DD2F951B3A7BFFC6E66A7D7DA97A40C7C70F3CE9B24D1A9A2BA7C7EBEA9BAB7BA5EFF5C7A953A7AE9B3E76F7CABE6FFD8CF2E7D36D4FE9ECB9F4BDFEB7CB9FA3A9F2B3EEFE4EE27B747CECD0D2851BACF858F5AD63675DF7325104000000000000F48AD6C2EA8D8DCD977EB0B316CFC536B16D43A9B2736373A5B1A154BEB9A1B9BA5BD64A953BD3FB07C6739DBD7F7DA932A9B1A9BA6FC7C763756F1466EB9BAA273496AACDF5A5F2110DD3E7BD397DEC9186A6F2D4688DA5F22756785DA9B26D146E3BFBAC6CD570FEBD9BCA13E3FDF3FB8796CA5B74DC7ECAACB91BA5DBDC54DF5C1D993D9024EBA4F74F4ADBC28652F5C2F83EAD3FC3F8F899D3CFBE62C439E7AC973DD65CD9B1A1A97A717E1F000000000000A0C76505DD52E5F286A6CA842850B66F5951F4F2D8A6B1A9B247AC9E6D2C5516A48FDD17B75BDB03F9EDC6A66A5DC7F7AF6FAA9E5C5FAA4EE9F8F884A6CA4EE9FBDC92B6246D8BE273D2CF189BFE5B6E2D10DF7E68A9E57DB16DAC988DEDE3766D4137FD8EDF1B3BEB825776F67365DFB7A97274573FF7D4D3AA1B3694AAF3E2F30F69BEF49DADEF77707A7F4EB652B8A9F2DD585D9C1579D39FB1F16773364D9F9B3BBEA9FA81F14D97BE3BBD7DFDC1335B36134100000000000040AFC90BBA71EDDAFA1995F7B46F2D6FCC0BBAB16DC3F44BB74AEFFFAAA1543EADB6353695CFCA8BAF1DC5AAD6F435F7765CC97A48F3C56FA92F956F489F3B3BDDE6BAACF0DB54F9657ABBE5B099E5B7C7E7BCF41E2D9F8BC75BDFEFA5826E9CF2B9A932F6C5EF56DD380AB3794BDFFB90F4F999B58FC536B1EDD4A9D5F51B4AD5D9E9F3A7A6EDE1EC435E2CDCDE1D9F1577EB9B2BBB3496AAE7642B899BCBB7B6AEE65D38F1E48BDE90BEF69AF477F321D103000000000000F4AABCA03B79DAE5AF7971A56C143AB362E7A22880B62BE83697B78B226CDA7E52DB62B56A3CD7F1BDA3E819AB70EB9BABE7D53757BE59FB5CEB299B87D7972AC74D28553F35E1C44B374FB7AD66AB669BAAFB37962A47E5DBA6B79BD2F718D37ABBADA09BBEFFD6F1FED9ED99D5AF66D7E47DA95D9A3EF7B7768FC569A15F2CDCA6B7ABD3E33B3436952F88D71FD65C7D6F149EDBBE5F536542FA593FCA3EB3B9FC9DF8191A4BE5AFC5B57ED3D7EE9EBEC767C63755BEE81ABA00000000000040AFC90BBA87962E7C6D1453F3C7A3B89A3F575BD06D68AE5C15C5D6DA966E7375C7826E9CB6B8BEB9F2E76C75ED89D52DA3C01A2B63F3E71B4BE52FA5AFBB287DFDE3E9BFBF8FCF8EE26876AAE452E5A986E9D58FC476F54D73DF969DD6B975756DC76BE8C6678F6F2A7FBAE3CFD5D529971B9BCBE3D2D73C9D1574E354D3A5CAF5F533CA9F6F2DD6FEA9F6E78FF768F7DA52F598F4E73C36AEB91B2B86E37B64A76506000000000000E80DED0BBA95875E3A9572E5A18E05DDFA52657CACAACD56ACA6B763E56C763DD9E6F257EA9BAB7BD5BE6F3CD758AA36E7F71B9A2BC7A7AFF9CB4127565FFDD236D5735EBC5E6EB9A1A1A93CB575BBCFA49FF9EFC6E92DEFCAEE972A3F6D6CAE1C54F3BEED0BBA4DE5BDD336A3E3CFD5554137BEEF84A6962F448BEBF4A6AF3D344EA3DC5A38BE2ABB7E6EFAF3E4B7DB3E2756E596AAB363856FFADEBF8B4275FAF34C8ADF8528020000000000007A455EB48DDBD929966B5A142FE314CBD93633CB1F4DB7BBECD052798B28764EFCF145AFCAAE7B3BB3658728A8C6E98DE314C88D3F9BB36943A9FC87B87E6DED8ADCECFD63756B5C3777FABC3767F7A3185BAA2C4FDB7FEA4BD50362556E5CAF367DFDA8EC74C9E97687962EDCA0B6B01A85E3C652E5E7F9FD58D53B76D605AFECF8734511B8F6B4CD1DBD781DDDCAD238D574DB6B4AD5E6F4B3EF8855BBB5D7046E3D75F4B551F4CEEE972A47A6F77F9BFE7B5B5C0B581401000000000000BD62CAACB91BD59E6A3917D79BCDAE7F5B2ADF90AD4A2D55B78FD5B1AD85D039F5A5CA9551088E7F273455769A50AA7CB86166CB3651EC8CE26C579FD7D854199B3E3F2556C6C6F568E3D4CB07CF6CD92C5E97ADD8CD4FB53CB36587FAA6EA096DAF9BDEF2AE28A0468BD32377F9FECDD58F67A7802E55FE1EA7525EDDDF47ED0AE2B6DFC5F44BB7EA58B88D9FB7B6180C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014445D5D5DA2699AA6699AA6699AA6699AA6699AD6D3CDEC2B00400F1574FD1600000000809E64DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205000000001494794700008915000000005050E61D0100245600000000404199770400905801000000000565DE1100406205C0109424C9CB172C5870CE95575EF9AF72B99CCC9D3B57EBE396FEDE5F98376FDEA24AA5B2AB88040000BA62DE1100406205C010B460C18273E7CD9B972C59B22459B66C59F2DC73CF697DDCE2F71EBFFF4B2EB9E4A9B973E7EE2C2A010080CE987704009058013004C5CADC28262AACF67F5BBC78F1A373E7CEBD46540200009D31EF080020B10260088AD32C5B995B9C95BA73E7CE5D2E2A010080CE987704009058013004C5355C15538BD3E2EF212A010080CE98770400905801300475B7A0FBCF2717270BAE3D2D99DF7274D6E2763CA608ABA00B0000F40DF38E0000122B0086A0EE1474973EF16072CB45DF4FFEF6E749ED5A3C16CF29C42AE8020000BDCFBC230080C40A8021A83B05DDFBE7CF5EA1989BB707E65FA010ABA00B0000F401F38E0000122B0086A0EE14746FAB4EEBB2A01BCF29C42AE8020000BDCFBC230080C40A8021A83B05DD5BE64EEDB2A01BCF29C42AE8020000BDCFBC230080C40A8021484157411700001818CC3B020048AC001882BA53D09DDF72749705DD784E215641170000E87DE61D01002456000C41DD29E8DE79C5CC2E0BBAF19C42AC822E0000D0FBCC3B020048AC001882BA53D07DECC19B935B2EFEC18AA75B4E1F8BE714621574010080DE67DE1100406205C010D49D826EB47BAE3B7385826E3CA608ABA00B0000F40DF38E0000122B0086A06E1574972F4FEEFCEBC92B9E6E397D2C9E538855D00500007A9F7947000089150043D0AA0ABA4B9F7830B9E38AE62EAFA11BCFC5368AB10ABA000040EF32EF080020B1026008EAB2A0BB7C79B2F8CE4AF2F739877759CCCD5B6C13DB5AADABA00B0000F41EF38E0000122B0086A0CE0ABAAB5A956BB5AE822E0000D0F7CC3B020048AC0018823A2BE8766755EECA56EB2ACC2AE80200003DCFBC230080C40A8021A8B382EE9A1673F3A630ABA00B0000F43CF38E0000122B0086A02EAFA1AB29E80200008562DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000C410ABA0ABA0000C0C060DE1100406205C010A4A0ABA00B00000C0CE61D01002456000CAEFD51356DC357B59D82AE822E00003060C679C60B0000122B0006D3FEA8B5ADB4B0ABA0ABA00B00000C9C719EDF020080C40A8041B43FEAD03A2DEC2AE82AE802000003679CE7B7000020B1026010ED8FBA68ED0ABB0ABA0ABA0000C0C019E7F92D000048AC001844FBA355B4ACB0ABA0ABA00B00000C9C719EDF020080C40A1862FD95A615B1A0BB6CD9B264E9D2A5ABDC6ED1A245C96DB7DDB65AEFBD64C992E4CA2BAFECF2F9471E7924993F7F7E767BE1C285C9934F3E997D9F7FFCE31FDDFA4E6BDBC4E4E06FF63E000098770400905801E8AF28CC2997CF3AEBACE4A73FFD6997EDF4D34FCFB6BBFCF2CB937DF7DD37F9D8C73E96BCE215AF480E3AE8A0E4FDEF7F7FF2BEF7BDAF5D5BBE7C79B278F1E2E4B2CB2E4B76DB6DB7E4831FFC60763BDAF7BFFFFD76DBC6674771F684134E686B3BEFBC73B2EEBAEB26C71E7B6CBBC7EFBCF3CEEC7BFCFAD7BF4E5EFFFAD767B737DA68A3E4ECB3CF4E1E7CF0C1F8BF925C77DD7556E8A2DF0500403E090020B102D05FD1337FDF95157273BD5DD0DD6FBFFD92ADB7DE3A6B1FF8C007B2C268FC9B3F16DF2DB6AB56ABC92EBBEC92ACB3CE3AC911471C915C73CD35D9B651F43DEFBCF392638E3926BB1FAB65CF3CF3CCEC76C7B6CF3EFB249FFDEC67931FFFF8C7D9FDD9B36727E79E7B6EB2FEFAEB275FFEF297BB6CB1ED85175E98DC7DF7DDC9E4C993938D37DE382997CB0ABAE8770100904F020048AC00F457F4DEDF776585DC5C5F9E72394E5B9C7E6472F3CD3777FADCF9E79F9FAD9E3DFEF8E3936BAFBD36DBF6C0030F4C8E3BEEB8E480030E682BE8C6F651783DFAE8A3B315BBDB6DB75D72EAA9A726DFFEF6B793BDF6DA2BF9D18F7E94ADB27DE69967928B2EBA285BE97BCF3DF7642D4EB71CEF138FE78F7DF8C31F4EAEB8E28A64FAF4E9C9061B6C901595DFFBDEF76605DD33CE3823DB265E3375EAD4649B6DB6E9F4FB2BE8A2DF0500403E090020B102D05FB13A7FDF951672734529E8C64ADC57BDEA55D9F3AF7DED6B939FFCE427C937BEF18D766DF7DD77CF0AB877DC714756E07DC73BDE91ADC08DD79C72CA29593137DA873EF4A1AC109CBF779C467958272B7AF3169F5DBB6DED2997E3F9CF7DEE73D9BFF1FDC68D1B977DBE822EFA5D0000E4930000122B00FD15BDAE2805DD6853A64CC99E9F38716252A954B2026EC7162B69C78F1FDF696176871D7648468D1A956CB5D55659C1B7B648BBE9A69B26D75F7F7D766AE5D8360AC1717F8B2DB658A1A01B05E538CD731474E35ABB717DDF784D7CB6532EA3DF0500403E090020B102D05FD1678A52D08D55AF1B6EB861F6FCCB5EF6B2AC307BF8E18767D7C58DC71A1B1BB3FB37DD7453B64A77D6AC59C949279DD4D62EB8E082B6532E5F7DF5D5C9CB5FFEF2E4BEFBEE5BAD15BA71BDDC38FD723CF695AF7CC53574D1EF0200209F0400905801E8AFE85F4529E846E176E79D774ED65B6FBDE4A8A38ECA56C8C6E98D77D96597EC3563C68C490E3AE8A0B6ED63BBCD37DF3CBBD6EDC61B6F9C1560F3826E3C1FD7CD9D366D5A5B4177934D3649AEBAEAAA64F6ECD9D9FBFDE637BFC9EED7AED08D6BF86EBFFDF6C9EB5EF7BAB6532E772CE8FEF39FFF54D045BF0B00807C1200406205A0BFA26F14A5A07BDC71C76505D328D456ABD5E4E1871FCE0ABABBEDB65BF69AFDF6DB6F8582EE9C3973B2DB871C72485B4177DB6DB74D264F9E9C6CB6D9665931766DAFA1DBB1A0BBC71E7BB4DB5E4117FD2E0000F2490000891580FE8A5ED39B05DDD34F3F3D2BB0E66DEBADB7CE0AA39FF8C427DA3DFECB5FFE3279F6D967DB0AB551D08D42EA8C193392830F3E387BCD09279C90DDCFBF6F6CB7DD76DB257BEEB967F29EF7BCA7ADA01BD7D9FDC217BE9015831F7BECB16CDB2BAFBC323B6573ACAEBDF3CE3BB3F7BBF6DA6BB3FBF1BE2D2D2DD9760F3DF450B63A380ABAF17C7CC6473EF29164D75D77CD5E3373E6CCE4DDEF7E77D2D4D4A4A08B7E170000F9240080C40A407F45EFEBCD82EE25975C921C79E491AB6C7941B5B6A01BA758FEE4273FB9423BFEF8E3DBB6FBEA57BF9A156EE3F4CA1D4FB9DC555BB87061569CBDF1C61B5778EE17BFF845F6DCD7BFFEF5EC9ABC6F7DEB5BB3F72F97CB59113A9E7BCB5BDE92CC9F3F5F4117FD2E0000F2490000891580FE8ADED797A75CEE4EBBF7DE7BBB759DDABBEEBA2B59BA7469DBCADA458B16258B172FCEFE5DD9EB9E79E699E49A6BAE697B6D6D8BCF8DF788DBCB972F5FE1F9A79E7AAAD3C71574D1EF0200209F0400905801E8AFE815452BE80EF5A6A0ABDF050000F9240080C40A407F451B055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF2828055D055DF4BB0000C8270100245600FA2B0A4A41574117FD2E0000F2490000891580FE8A8252D055D045BF0B00807C1200406205A0BFA2A014741574D1EF0200209F0400905801E8AF28A872B9FCC2B265CB14530BD0D2BFC3A2B973E72E1795FA5D0000904F020048AC00F45764E6CD9BB768C992250AAA0568F7DE7BEF6FE7CE9D7B8DA8D4EF0200807C1200406205A0BF2253A95476BDE4924B9E5ABC78F1A356EAF6DBCADCC50B172EFCCDDCB973EF4BDBCEA252BF0B0000F2490000891580FE8A3651448C95A1697B2EAEE1AAF5797BAEF5F7AF98ABDF050000F9240080C40A407F05A0DF0500403E090020B102D05F01A0DF0500403E090020B102D05F01E8770100904F020020B102F45700E8770100904F020048AC00F45700FA5D0000904F020048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B00FD15807E170000F9240000122B407F05807E170000F9240080C40A407F05A0DF0500403E090080C40AD05F01A0DF0500403E090020B102D05F01E8770100403E090020B102D05F01E8770100904F020048AC00F45700E8770100904F020048AC00F45700FA5D0000E493000048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B407F05807E170000F9240080C40A407F05A0DFF55B0000403E090020B102D05F01E8770100904F020020B102F45700E8770100904F020048AC00F45700FA5D0000E493000048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B00FD15807E170000F9240000122B407F05807E170000F9240080C40A407F05A0DF0500403E090080C40AD05F01A0DF0500403E090020B102D05F01E8770100403E090020B102F457FA2B00FD2E0000F2490000891580FE0A00FD2E0000F2490000891580FE0A40BF0B00807C1200008915A0BF0240BF0B00807C1200406205A0BF02D0EF0200209F944F020048AC00FD1500FA5D0000E4930000122B00FD15807E170000E4930000122B00FD15807E170000F9240000122B407F05807E170000F9240080C40A407F05A0DF0500403E0900C0AA93A86A2452AB6855BF29C0401000FD2E0000F2490080BE4FA28677A3A03BDC6F0A30100440BF0B00807C1200A07F12A9AAD5B980812000FA5D0000E4930000C54CA4865B9D0B180802A0DF0500403E090050DC64AA6A752E602008807E170000F92400403193A9E156E702068200E8770100904F02001437A1AA5A9D0B180802A0DF0500403E090050CC846AB8D5B980812000FA5D0000E4930000C54DAAAA122BC0401000FD2E0000F2490080622655C3255680812000FA5D0000E49300C0A09324C9CB172C5870CE95575EF9AF72B99CCC9D3B7740B648AC06EA774F7FEF2FCC9B376F51A552D955FCCDD5C49F812000FA5DE493F249C4BDB817A79A38954FA25FD3F46B00B97427746EDA09264B962C49962D5B963CF7DC735A1FB7F8BDC7EFFF924B2E792ADD31ED2CFE34F1672008807E17F9A47C12712FEEC5A9264EE593E8D734FD1A40268E288A4ED00EA1FFDBE2C58B1F4D7744D7883F4DFC190802A0DF453E299F44DC8B7B71AA8953F924FA354DBF069089D34338A2A8384718A53BA2E5E24F137F068200E877914FCA2711F7E25E9C6AE2543E897E4DD3AF0164E2DCF37602C569F1F7107F9AF833100440BF8B7C523E89B817F7E25413A7F249F46B9A7E0D60B57644FF7C7271B2E0DAD392F92D47672D6EC763761E7644E24FFC61200850A03EB61AFDEC2A5AD56F4A3E299F944F8A7B4DDC8B53718A713CFA35FD1AC0A0DA112D7DE2C1E4968BBE9FFCEDCF93DAB5782C9EB303B123127FE20F03418082F4B1C3BB51D01DEE37259F944FCA27C5BD7815F7E2549C621C8F7E4DBF0630A87644F7CF9FBDC24E286F0FCCBFC00EC48E48FC893F0C04018AD4CF56ADCE954FCA27E593E25EDC8B7B71AA8953E378F46BFA358021B523BAAD3AADCB1D513C6707624724FEC41F06820005EA67875B9D2B9F944FCA27C5BDB817F7E25413A7C6F1E8D7F46B00436A4774CBDCA95DEE88E2393B103B22F127FE30100428585F5BB53A573E299F944F8A7B712FEEC5A9264E8DE3D1AFE9D700EC88EC88EC88C49FF8C34010A0987DED70AB73E593F249F9A4B817F7E25E9C6AE2D4381EFD9A7E0D60C8EC88E6B71CDDE58E289EB303B123127FE20F03418002F6B755AB73E593F249F9A4B817F7E25E9C6AE2D4381EFD9A7E0D6048EC88EEBC6266973BA278CE0EC48E48FC893F0C04010AD8DF0EB73A573E299F944F8A7B712FEEC5A9264E8DE3D1AFE9D70086C48EE8B1076F4E6EB9F8072B9E26227D2C9EB303B123127FE20F03418082F6B955FDAE7C523E299F14F7E25EDC8B53712A4E8DE3D1AFE9D70006FD8E28DA3DD79DB9C28E281EB3F3B023127FE20F03418002F7B9C3478C18A1DF954FCA27E593E25EDC8B7B712A4E318E47BFA65F0318E43BA2E5CB933BFF7AF28AA789481F8BE7EC40EC88C49FF8A3DBB66D1D086EEB5701D037FDEE861B6EA8DF954FCA27E593E25EDC8B7B712A4E318E47BFA65F0318BC3BA2A54F3C98DC71457397E7FE8FE7621B3B113B22F127FE58F520306D4BD236B1F55F834100FD2EF249F924E25EDC8B53712A4EE593E8D734FD1AC01AEE88962F4F16DF5949FE3EE7F02E7742798B6D625B4719D911893FF1C72A0781DB76711F00FD2EF249F924E25EDC8B53712A4EE593E8D734FD1A40F77644AB3A9AC851467644E24FFCB15683C0553D0E807E17F9A47C12712FEEC5A93815A7F249F46B9A7E0DA0EB1D51778E265AD9514676287644E24FFCD1EDC19EC120807E17F9A47C12712FEEC5A93815A7F249F46B9A7E0D60F576446BBA13CA9B1D8A1D91F8137FACD620CF601040BF8B7C523E89B817F7E2549C8A53F924FA354DBF06D0FD1D91664724FEC41F7D3608341804D0EF229F944F22EEC5BD38D5C4A97C12FD9AA65F1B34BEF5AD6F6D5C5757B7FBC891234BE9BFE5B4DD93B667D396B4FE1BF7CBADCFEF1EDBFBAD0D414F3DF5D4A6B367CF3E7AE6CC997F3BEAA8A31E9D3265CAB2030F3CF085089471E3C6FD7BE2C4894F7FEF7BDFBBEFE8A38FBE60D2A4495F4E5FB28E1D911D801D91F8D32442FD3808341804D0EF229F944F1640E389D52D1B7FF6D757887BCD384A9C8A53F9E460C927BBBB6F9B3CEDF2D71C7462F5D5DD7D7ED289D537ADECFD0E2D5DF8DA29B3E66EA45FD3F46B033FF75C1DA3468DDAA1AEAEEEBCB43DD75ABCED6E8BEDCF8BD7DB250D01575F7DF5B81933663C78C001072453A64C49CE3DF7DCE4FAEBAF4FEEBEFBEEE4B1C71E4B42FC1BF7E3F1787EF2E4C92F8C1933E6B94993265D347AF4E87749B0353B22F127FEE8A741A0E202807E17F9A47CB287C484737DA9F29795B57C523ABD3DBEB1B9FC9D680DCDE55B1B4A9533DAEE97CA0DE25E338E12A7E2543E59847CB2B7F76D8DCDD5FAFA52F5808E8F1F78D2659B3434574E8FD7D53757F74ADFEB8F53A74E5D377DECEE957DDFF80EF5A5F2219D3D97BED7FF76F97334557ED6DDDF497C8F8E8F1D5ABA7083151FABBE75ECACEB5EA65FD3AFC93D7BCFA851A3B6A9ABABBB6A358BB85DB5ABE2FDEC9E06A19B6FBE79A7934E3A69D1D8B16393DFFFFEF7C9238F3C92AC8ED83E5E3766CC987F3536369E9306CAEB24D89A1D91F8137FF4D2202EA9698A0B00FA5DE493F2C95ED03AF97C6363F3A51FECACC573B1CD8B93CA959D1B9B2B8D0DA5F2CD0DCDD5DDB256AADC99DE3F309E13F79A71943815A7433E9FECCBF7E9B77D5B7DA932A9B1A9BA6FC7C763F560FA9A53EA9BAA273496AACDF5A5F2110DD3E7BD397DEC9186A6F2D4688DA5F22756785DA97278637379BFCE3E2B5B95987FEFA6F2C478FFFCFEA1A5F2161DB78F95BEE93637D5375747BE98E127EBA4F74F4ADBC28652F5C2F83EAD3FC3F8F899D3CFBE62C439E7AC973DD65CD9B1A1A97A717E5FBFA65F937BF6AC6F7DEB5B1B8E1C39F2C4BABABA173A16661B1A1A925FFFFAD72B5D7819CFC7769D14755F88F78DF7B7AB1A04D2BFFB7A175E78E1EC28E49E71C619C9D2A54B93B511AF8FF74903E4D9BDF6DA6B3709B626C1167FE28F5E18BC75A7B0A0B800A0DF453E299F5CDB49B552E5F286A6CA8498C46DDFB289E3CB639BC6A6CA1EB1C2A8B15459903E765FDC6E6D0FE4B71B9BAA75E25E338E12A7E27448E793FDF57E7DBA6FAB6FAA9E5C5FAA4EE9F8F884A6CA4EE9FBDC92B6246D8BE273D2CF189BFE5B6E2D40DD7E68A9E57DF54D73DFD6582A7F296FE9E3673796AAC7D43E76D8CCF2DB3BBE7FF67D9B2A4777F5734F3DADBA6143A93A2F3EFF90E64BDF198FA53FF3C1E9FD39D94AE1A6CA7763757156E44D7FC6C69FCDD9347D6EEEF8A6EA07C6375DFAEEF4F6F507CF6CD94CBFA65F937BF6BCBABABACD478D1AF5B7DA42ECE8D1A39359B366250F3CF0C06AD5E762FB785DBCBE4361F7A6F81CBBAC012CFDFB6E7CD65967DD71F0C107270B162C487A52BCDFD8B163978D1933E62809B626C1167FE28F1E1EB475B7B0A0B800A0DF453E299F5CCB49B5B8BE5FFD8CCA7BDAB79637E6936AD9A4F0F44BB74AEFFFAAA1543EADB6353695CF8A096A71AF19478953713AE4F3C922BC6FAFEFDB62556BFA9A7B3BAE643DA4F9E2B7D497CA37BC58A0AD5C97157E9B2ABF4C6FB74481363EE7C5D7B77CAEA1A932ADAD952A8F6545AB9AC7D2D77EB6617A75E328CCE62D4ECB9C6E3BB3F6B1D826DE73EAD4EAFA0DA5EAECF4F953D3F6706B61609D170B622D9F8BBBF5CD955D1A4BD573B295C4CDE55B5B57F32E9C78F2456F485F7B4DFABBF9907E4DBF26F7EC79A3468D7A6FDA1EAC2DBE4E9B362DB9FFFEFBD7AA3E17AF8FF7E950D4BD3F3ECFAE6B008A626EA9547AE288238E489E78E289A437C4FB4E9932E5D97DF6D9E74C09B626C1167FE28F1E1CACAD4E6141710140BF8B7C523EB916936A93A75DFE9A175713C564703621BC282689DB4DAA3597B78B89EAB4FDA4B6C58A9E784EDC6BC651E2549C0EF97CB210EFDF9BFBB6287AC62ADCFAE6EA79F5CD956FD63ED77A4AD8E1F5A5CA71134AD54F4D38F1D2CDD36DABD9AAD9A6EAFE8DA5CA0A8BA226942EFDEF749BBBD26DFE1AA7576EF75933AB5FCDAEC9FB52BB34DDF66FED1E8BD3CEBE58B84D6F57A7C777686C2A5F10AF3FACB9FADE283CB77DBFA6CA84F43BFC286EC73548E367682C95BF16D7FA4D5FBB7BFA1E9F19DF54F9A26BE8EAD7E49E3DA77565EE83B5AB7267CF9EDDA335BA78BF0EAB75EFB752778089D32C9F75D65977463137FED3F6A678FF8913273EB9E79E7B7E4F82AD49B0C59FF8A3870669AB5B58505C00D0EF229F944FAEE1A4DAA1A50B5F1B13CE6D93BEA54A357FAE7652ADA1B972554C48D7B6749BAB157435E328712A4E07753EB94EDAF66DFD776D74F63E3D9E4FF6D6BE2D4E5B5CDF5CF973AC788DE26B145863656CFE7CEBE9932F4A5FFF78FAEFEFE3B3A3389A9D3AB65479AA617AF5231DBF6BAC98CD4E3DDB5CF94C145857F6737575CAE5C6E6F2B8F4FD9FCE0ABA712ADB52E5FAFA19E5CFB7166BFF54FBF3C77B74F8FC63D29FF3D8B8E66EAC246E2895FF373B2DB37E4DBF26F75C6B714DDBDAD32CEFB7DF7EC98D37DED82B35BA78DF78FFDAD32FBBA6EE0012D7CC3DE490437A6D656E672B75F7DF7FFFA7D340D94582AD49B0C59FF8A30706676B5258505C00D0EF229F944FAEF1A45AE5A1974E675779A8E3A45A7DA9323E561E65AB7AD2DB8DA54A5376CDBDE6F257EA9BAB7B897BCD384A9C8AD341994F46F1F5D4D61CF1D4616B5ED45DD9FBF4683ED95BFBB678AEB1546DCEEF3734578E4F5FF397834EACBEFAA56DAAE7BC78BDDC72434353796AEB769F493FF3DF8DD35BDED5EEFD9AAA7551C4CA4FDD1CA7914D3FE3F0AE7EAEAE0ABAF17D2734B57C215A5CA737FDDC43E334CA71ADDE288665D7CF4D7F9EFC76DBF78F55B9A5EAEC58E19BBEF7EFA2509DFE3C93E277A15FD3AFC93DD7DEC891234FAC5D99DB5BC5DCDAA26EED4ADDF87CBBB30120FDC3ED3C76ECD81EBF666E77AEA9BBD75E7B3D3162C488D74BB03509B6F8137FACE5A06C4D0B0B8A0B807E57BF8B7C523EB99A936AD9C46E9CE6AEA6C5046F9CE62EDB6666F9A3E976971D5A2A6F1113C2137F7CD1ABB26B03CE6CD9A1A1A93C234E01593FA3656B71AF19478953713AE8F2C97D3BE4896B52D4AD2DE6E66D9FDECA277B7ADFD6F8B3399B3694CA7F88EBD7D6AEC8CDDE3F56B7C67573A7CF7B7376BFA9BC77BADDF2B4FDA7BE543D2056E5C6F56AD3D78FCA4E979C6E17AB76D3CF2BA58FDD91BF2E4C9D7ACECB5B4FA3FCDBB1B32E7865C79FABB1B9725067A76D7EE9F5711DDDCAD238956DDB6B4AD5E6EC734A95EB6BAF39DA7AEAE86BA3A896DD2F558E8CCF4DFFBD2DAE05AC5FD3AFC93DD7CEA851A3B6A9ABAB7B3E2FAE5E70C1057D52A38BCFA959A5FB7C7C0F9956C19D74D2498BCE38E38CA43F9C7CF2C98BD2406992606B126CF127FE1415D67230B6368505C50540BFABDF453E299FEC8629B3E66E547BBABBB609EA5265E7EC1A81A5F20DD9CA9D5275FBC65265DBD6C9E239F5A5CA95311917FF4E68AAEC34A154F970C3CC966DC4BD661C254EC5E9A0CB273B2BC6AE4E51B7B3D7FFA28BD7F7483ED9D3FBB628764671B6ABCF6B6CAA8C4D9F9F122B63E37AB471EAE58367B66C16AFCB56ECB69E6A390A51F54DD5131A9A2B93D3ED4E8D025567EFD7D054F96EED698FD3DB1FCF4E315BAAFC3D4EA5BCBABF8FDA15C46D9F31FDD2AD3A166EE3E7AD2D06EBD7F46B72CF3557575777555E589D366D5A9FD6E8E2F36A8ABA57C9B40AECEAABAF1E17AB739F7EFAE97E29E8C6E7EEBDF7DE4F8D1E3DFA5D126C4D822DFEC49F41E05ABCC7DA1616141700FDAE7E17F9A47C52DC8B37712F4E3571BAF679DC9A167557A7983B74F2C9245947BFA6E9D706AF3DF6D863FBDA532DDF7FFFFD7D5AA38BCFAB3DF5727C1F7F95829A3163C683E79D775ED29FCE3CF3CCBBD340996547A4D911893FF16710D8CF8505C50540BFABDF453E299F14F79AB817A79A385DFBFC6D758BBA6B52CC954FEAD734FDDA80575757775E5E4C9D356B56BFD4E8E2736B56E99EE7AF52404F3FFDF466E3C68D4B1E7EF8E17E2DE8A69FFF9FD1A3472FA9BDC8BA1D91664724FEC49F41603F15160C0601FDAE7E17F9E480CB2707DB785ADC6BC651E2549C0E8A7CB2BB45DDB529E6CA27F56B9ABC73C01A3D7AF426757575CFE5C5D4BE5E9D5BBB4AB7A6A0FB5C7C2F7F9D82F9D39FFE74D49429539222D87FFFFD17A681F2E981F07B4BBF67356DC3ED8824D8E24F33C0EB7E4CF6C160AB270B0B0683C0509F7CD3EF0E62F2C9C1954F3EF4D043EFBCEFBEFB6EB9E1861B9E3BF2C8238F1F3E7CF8FAA25CDC1B4789534D9C16681CBFAAA26E4F1473E593FA354DDE3920E33F7D7EF7BC90DAD0D0D0AF35BAF8FC9AA2EEEEFE8205D3DCDCFCF773CF3DB71005DD534E39E5A634487E3840FE23E641BDD2FF907644126CF1A70D91826EB762B20F06593D5D583018040613FD2EF2C941964FA6C3E8F5EEB8E38EE9CB972F7F3E1F57A7DBFDFBECB3CF7E70BFFDF6FBB44817F7C651E25413A7051AC77755D45D7758CF1573E593FA354DDE39E0E23F7DBC39DFEE57BFFA55BFD6E8E2F36BBE73B3BF60C11C75D4518F5E7FFDF58528E8CE9B37EFE6912347CE1E60FF1157FA1FD28E48822DFEB42156D0EDEE80B0B70657BD51583018040603FD2EF2C941964FDE73CF3DDB2E59B2A4CB6B272D5CB8F05FD3A64D3B77C488111B8978716F1C254E35715A90717C6745DDDB87F56C31573EA95FD3E49D032AFE478D1A55C99FBFEEBAEBFAB546179F9F7F97F85EFE82053379F2E4650B162C284441F7F6DB6F8F532E5F3B40FF2376FA1FD28E48822DFEB4215AD05D5992DE9B83AADE2A2C180C0203997E17F9E420CA2753AFB9EBAEBBFEFCFCF3CFAF728CFD422A7DCDD2C6C6C67D45BDB8378E12A79A382DC838BEB3A26E4F1773E593FA354DDE3960E23FFDF7BEFCF1FEAED5C5E7D77CC7FBFC050B66DCB8712F3CFEF8E38528E83EF6D8634BD320797080FF476CF71FD28E48822DFEB4215ED0ED98A47467309514A0190C0283857E17F9E4206A575E7965F2D4534F2D5BDDB1F6134F3CF1AF534E39E5FA112346BC53DC8B7BE32871AA89D35E18C7AFAE38CD72C795B9B7B73EDE1FF930FA354DDED99FF1FF4C7EBFBF6B75F1F9352B749FF6172C98BDF7DE3BF9F7BFFF5D88826EFA3D9EEE46800FA8D6DF3BA2679E7926EB7CE3DFFEF8FCA79F7E3A3AFEC2EC88065B7CF566FCC5DFEDFEFBEFCF6EDF7BEFBD2BFD3BC6913B0F3CF0C02ADF73D1A245C96DB7DDD6ADCF8FF77BF8E1877B2D16962C5992FDDFE8EAF9471E7924993F7F7E767BE1C285C9934F3E992C5BB62CF9C73FFE912C5DBA54FCAD414B13B964C30D378C41DAC455EC9A8A5C5818D6FAFD6330F84A59045070AF6CEDAF067CBF3BD4F7A143753C1379D7E2C58BFB24F7ECCF1CB1BB2D7E9E9FFCE427C9A38F3EBADA63ED784DBC564C1723EE9F7DF6D9151EBBFBEEBB93871E7AA84FC75C0321EE8DA356DE86529CAE6A7EEB89279E58E1B3632E23E6A5CC37F5C9387E75AC6C85EEA9C37A7685AE7CD2FE7785D6B1FFB9E69A6B92E5CB97AFB0DD3DF7DCD3ABDF43DEA975D6FABB56179F5FF37DFE635AA5600E38E0807F1765856EDA49DD350856E816E65411D1C97FE52B5FC912A29D76DA29BBDF31B17DCF7BDEB3CA9617F5E2FCE95B6EB965A7EDC4134FECF43B6CBBEDB6C997BEF4A5E49FFFFCA723260758FCFDE637BF495EF39AD764B737D86083E4DC73CFED74BB18CCBDF9CD6F4E3EFAD18F26BFFEF5AFDBB5D881C736311177D9659725BBEDB65BF2C10F7E30BB1DEDFBDFFF7EF2BEF7BDAFAD9D75D6596D83C04D36D924F9AFFFFAAFEC3DB6D9669B76DB456B6E6ECEB6FDF18F7FBCC273B52D4F7022013AE18413DADACE3BEF9CACBBEEBAC9B1C71EDBEEF13BEFBC33DB3EBEFFEB5FFFFAECF6461B6D949C7DF6D9C9830F3E98FD7F8AFF0B8E2C5FB3981C66A518405FD3EF52D8F14C4C9ED5E66DEF7FFFFBB349AAFCF9FFFEEFFF4E66CC98D1ABB9671172C4D569E79D775EB2FFFEFB5F5CA9541E79E185179EEFC630FB3FE9EFE3B7DFFEF6B7FF9EFE5D2FB442B7FFE33E62EEAD6F7D6B72FEF9E7B77BFCBDEF7D6FF2C31FFEB04FC65C032DEEADD01D9A71DAB158BBE38E3B663117FFC63C66C7CF9F3C7972B2CE3AEB24A79D765AF6995124D9628B2D92CF7FFEF36DDFE3861B6E10A7BD378E5F9B62EEEDBD5CD4954FEAD7DADA05175C90BCEC652F6B2BA4461F147177D14517B5DBEEEF7FFF7BD6A7C4F3D1AF44DF56DBA64D9BD6969B8D1F3FBEAD1D70C0019DCE4FC60131F24EF1DF55FCC74A582B74E996C30E3BECE9A25C43F7D65B6FBD6E005F43B75017738F24F9B39FFD6CF28E77BC239933674EF2F6B7BF3DBB1F47FEE4DBDC75D75DD90EE088238E4866CE9CB9423BFCF0C3B3E763BBFCA8A05FFDEA57C9E9A79FDEAEBDE52D6F498E3BEEB84EBFC75FFFFAD7E495AF7C653269D22405DD01127FF951B8DD29E8C6D1AF51B48F3879E73BDF99B588B9B8BFFEFAEB67C94A6C77E69967763A79BBCF3EFB64711945D9B83F7BF6EC6C122FDEF3939FFC64F2C52F7E31D975D75DB3D79F7AEAA9592C8D1D3B36BB9D272E13274ECC0ABF31E0AB6DDFFDEE77B3F7CC8FC68DEF1FDFE9CB5FFE72972DB6BFF0C20BB3EF1D83C18D37DE382997CB0ABA3D18937D3098722D4700FD2E03643C73C9259724AF7AD5AB92E9D3A76793F91147318E89D510D1B6DA6AAB64EAD4A96D676DE98DDCB30839E29AE493A3468DDA23FD9DA5C3BB250F7735BE7EFEF9E76F9C366DDAB9E9DFF581D85ED41723EE63BCF5ED6F7F3B8BBB18D7444C45DB6CB3CDB2F8CEEFC7CA1871AFA03B94E334FF2EF7DD775FF2894F7C225B4C103F731469E37EED6ADC58B010F3059B6FBE79561C897FE3A0A078AF982F887F63C142A95412A7FD3B8EEFAC981BD7CC5DB793C77BAAA82B9FD4AFB53BF0248AB3EF7EF7BBB3A26CDCDE7AEBAD93B7BDED6DD9EDDA33101C7AE8A1C9C73FFEF1ECF6D5575F9D1D64182DCE761A31FAF39FFF3C7BEE97BFFC65F2A94F7D2AEBEBF6D8638F6C6153CC67467137F69DF17C6C1FAB82E59DE2BFABF8770D5DBAED88238EB8FFFAEBAF2F4441B7A5A5A53C72E4C8D903EC3FE2CA929D7E29E8C60E288EDE89A4353F3544FC478C9DD51BDFF8C6B6231DF3826E9C02218A671D5B9E48E705DDFC68CCCE92EFAE0ABAD17EFAD39F661335DD39ED8E8160FFC6DF8D37DE98C54E14413B2BE8C6113AF1FC2DB7DC92155E6340F4A637BD2979C52B5E916CB7DD7659C2317CF8F064D34D375DE1C8B648428E3EFAE8EC1426B16D0C0A6380B8D75E7B253FFAD18FB2F78D53271D7FFCF1D9E7C6F67FF8C31FB2F78ACF89E42A622DB68BDBF9CF1605DD612B59F1931774E3FBC4AA8F7C82308EC41BD67A045EFED8873FFCE1E48A2BAEC82615E3678E23F122E623693AE38C33B26DE23531B118AB866FBEF9661311AB19937D30A8EAADC282412030D0E97729DC78260ABA3149B5E79E7BC6D1FF6D93FA1DF3B9830F3EB8D772CF22E4886B9A4F8E183162A3F47777729AB73FF99FFFFCE7D99AA1F5D3D75D77DDE9E9730FA47FDB93623B115F9CB88F03A5A358F5FBDFFF3E99376F5E7656AD68AF7EF5ABB3B8CAEFC744AEB81FF205DD211DA751548EF88B988BD5BCF9D9E3A2C0FB810F7C203BAB57535353F6F9279D7452566C8E79A71D76D8215B2117FFC6FBC79C40ED5C9838EDB7717C57C5DC7556F2FCDA1675E593FAB5762D8AA0115B7160481C3898B798331F5653248DB35C461FF3BBDFFD2E3B80E4B7BFFD6DF6F8B5D75E9BF56B71C048ED299AE360957C0E75DF7DF7CD0E6889D7BDFCE52F4FBEF6B5AFB51574E59DE2BFABF81F356A5425DF2EE2B03FC5E7D7ACD0ADF80B164CFA9FFF8228D414C1B1C71E7B5E1A283F1C20FF11BB95ECF47541F7C0030FCC3AF548B2DFF08637B4DB3945721D3B9778BEB1B1B1ADA01BA74FE86C856EECB486B51674E368C7889358911B4716D5B638A54E4CC2C4F3713EFF8EDF294EA513EFD3D0D0A0A05BF0F88B5363478CFCE94F7FEAB4A0FBC73FFE311B08E5A7C28B23C462703761C28476936EDFFBDEF7B25393E4C9CD1D77DC910DA822A189F7896D4E39E5946CC016ED431FFA5016BBF9299423AEA64C99920DDAE2678855B971C45C0CFCE200814888E2142979413756895F7AE9A5C955575DD5AEC50AF1389AEEFFFEEFFFDA4E55326C25C5DF78EFFC77D1F1B426F1FCE73EF7B9ECDF384061DCB871D9CF652262F562B20F0657BD5158300804060BFD2E851ACF7456D08D2242ACD2CDCF1614078EC6A9367B2BF72C428EB8B6F9E4C891233F555F5F7F6BEAA1C71F7FFCB2F4F71313427F8BC7457AF1E23E0A4FB18230C63CDD3995ADB81F92055D719A6E3B66CC98ECF9287EC41C40EC2FF216D774CD0B30071D7450DB2AE158CCF03FFFF33FD9F651CC8D9F21560EC7FC96F9A67E1DC7AFAA98BBB2EDD6B4A82B9FD4AF7559D08D79EE8E97251C5653D0FDCE77BE93DDFFC8473E92EDF7E23221B1AF8BF9D1E807D75B6FBD6CDE320E3E89BE27F2D6384B40A552C90E4E8C8552A3468DCAE655A3F03AACB5A02BEF14FF2BD9A6392FA2C61952FB537C7E4D11BAD95FB060D2CE67C7C99327BF50807AEEBF478F1E7D731A249F1E4CBFDFBE2EE846121D45D738C2274E25D3B1C5E3B182370A5D7941F7A69B6ECAFE83C64E2A6F23468CC81E1FD65AD0FDCB5FFE929D3227AEA112FF46012D9E8B9592713F7668F16F5E64ABBDC87C24D0F94EAF76B5AF826E31E36F975D76C906449D157463601583A3782C8E847DDDEB5E97C5416C174785C5EA8938A5485C1B221E8FA3D96205783CD659921247CC468213071CC4A02E3F0A2E068F91C0449214D7CA8D09BEF85E710AA6386237066F79AC453CC7D16A5D254291F044BCE789501C49176725882386E3F9F8B9E27E1C9DD731697AED6B5F9B1DF010EF11D7B3B8FCF2CBB3D7C49172E2AFB093F63D5D58300804F4BBFADD21ADAF0BBAB1222B5653C541A3717DB3FC1ABABD957B162147EC897C72F8F0E1EBA73FDBE4745CF748FC1BF7456F71C7F17149A258DDB8DF7EFB65A7668C1613B37196ADFC7EC4A0B8378E1ACA711A0769476CC6E945E3A0F38E2D56ECC62AE298BB8A224A7CD728B2C425C7E260F458C91B67FDFA7FFFEFFF659F110596983313A77D9EAF75B798BBB2ED57B7A82B9FD4AFADB4A01BF39BD1C7E52DE6AD87D51474E37BE407A8C4B572E394CA71204ABE6024E64CA3801BFBCA934F3EB95D7F1607A7C42ADBB83E6E9CB5E090430E59A1A02BEFA4A3F477B97B5E448D4571FDA9BEBEFE859A82EEEEFE3A053375EAD475D3C1F373715DA2FEF4C0030F5C9106C8E2F83E76446BD7E2C2E9F9D18D9DB5FCC2EAB505DD28E28E1E3D3A3B75431C49142B236B0BBAB17D5C943D4E2911473C46812C9E8BA390E2A88D986C89A26FC7EF123BC4D8E9C5ED8F7DEC63D9648D826EB1E32F56674771BE634137928818A4FDF9CF7FCE1E9B3F7F7E56F88D98895335C7B525E2344B71F46DB4385D48C44C9C9E398EC69D356B5656A8CD5B1464F3D32AC5B528E208DA187045CB0F2C8855E551AC8DB889826E0CC06210981774E328B4486062B0164955DE2226E3144C91E8445CE631DCDDA3E0E29A14917CC5633128740DDD01555CE8C9C2824120A0DFD5EF9A58EB8382EEEEBBEFDE36911605DDB804473C16638FBCA0DB5BB9671172C49ECC2707DB787A308FE36312374E3B1B13C6F9E96AE376DE5A5A5AC4BD71D4908ED3D81F44D1388ABD2B6B7110508CFB77DA69A764D75D77ED349EBFFAD5AF263BEEB863DB7C8638EDB37C72758BB92B7B5D778BBAF249FD5A972DE607637E316F7156BFE83BF2FBB5AB5D639E3C169AC4429238702572D5FAFAFAB616B96A7EF681DA532E478137FAB3CF7CE633D9FC653E1F1FFB4D79275D49E36D93BABABAE7F2426A1CB4D41FE2736B8AB9CFC5F7F2D729A04993265D14477AF4A7638E39E6376990CCB2235AFB16097074EC71947BEC6CF21609723C1ECF7756D08D899328EC47A2DD5941374E7D16D740896DE3A8C9782EB68B626EEDD143B5897FECB8A2D816F723C18ED5BA7194A5826E71E32F0AFEF1B7FDC10F7ED0AEA01B1D794CB8C56999F36DF3235DBB6A471C7144DBB671A4ECE69B6F9E2543F13E918CE483B6783E4EA31447BDC5ED5B6FBD358BC558911BDBC4D16C9160C5D1C0175F7C715B41B7B36BAC75D6E288E23C698A23832306E348DE782E0AD771BFF628B8F3CF3F3FD97EFBEDB302767E5A938E4953EDEF41FC15AAB8D0538505834040BFABDF6558DF147463E23F0E2A1CD6BA42214E2D17078ED616747B33F7ECEF1C513E39F4C6F1F901D2718ADA38CD78C4685C7A262E611463ECDA31B3B817F743354EE3524F871D7658D6E2D24FF119713BE6B7629570DC8E4B30C5294FF3B37DEDBDF7DED92AB7D8774401378ABD71EDCB28D4E4DB89D33ECB27D7B498BBB2D7AFAAA82B9FD4AFADB4C5A5DC629F17FD4DB55ACD56BFFEFCE73FCF9E8B53287FEB5BDFCA6EFFE217BF688BBB583012796A1C1812B9692C3C89DBDFF8C637DA5D433756ECC6D903E27ADD71204C5C82302E8918B7A3DD7EFBEDF6BFAC545D5DDD797931350E7EEA0FF1B93505DDF3FC550A6AF4E8D1EF1A3366CCBF22D1E90F4F3CF1C43569803C1CDFC38EA8E70ABA8F3FFE78BBC7E3FEB09514746B93A4CE0ABA0F3DF4505B012D12EE61ADE7EDDF6CB3CDB29D51EDC5E0E300812802C6D194B5DF217644714467BCB7826E71E32F8E5A8D84A6B6A01BAB5EF3D8C95B1C311B2D56CD464213AFCB1F8B6BDEC660AF76D03667CE9CEC761468F3415B5CCF2612AA88A3484CE2F94F7FFAD3D9445E9C82241295E9D3A7275FFCE217B3EF112B70E328DC485CA2CF7AECB1C7B2442B2602E3F425713F6235E2330E2688FBB1DDDA5EA7A263D2B4C71E7B747A2083F8EBF7C9FC9E282C180402FA5DFD2E7D309E89DC2A563C449E181359C71C734C7600DFA9A79E9A3DDFB1A0DB5BB9677FE788F2C9A1378E8F49B298208EDB471E796416538F3EFA68763FC6D85FFFFAD7C5BDB817A7ADDB4781245E93FFBCB12A381616445C76FCCEF159B14238B65D7FFDF5B3B981B8966E9CFAD47C539FE793FB0E5BF3626EAEB3A2EE3EF249FDDA9AB4587D1BFD532C14897FE394ECD10745DF13972F8CDBD16FDC73CF3DD94293782CE64163FF16672288F788B9D128D2D6BE6F1C8C985FD736FAAF38D824E6BFA3FF8C330EC4ED68711D5EFB5F5626FD7B6E9F17536385785FAFD28DCF1B356A54DBE996E3FBF8AB14586363E339717A94FE907EF6D9699034D911F56C41F79BDFFC66ED1115D9A920867551D08D9D415C003E6F7124661C5D14CFC72996E37A24B103D972CB2DB3CE3C767EC35A4FB91CA7998895B7FFBFBD7B01B2ABAE0F072E8F2AA01544B04E112B288DC58A967690581DA3680B858A74389C3D09221A0151C8EE461E02A504860E0F11D8DD84470B96E2C08838541019FC6FF65E12B1415E02F29077082621101E2148122A9CFFF91E73334BD8BC36DCDD7BEE7E3E33DFD9DD7BEF3E38F9F2FB7E7FF77BCFB97139DC287031708BE63A5E01D918A435225ED519979C885717350A99816EEBE45FBC3AADF1CAB1680AA2F188CFA3D189F7B369DC178F8B8D59BC5A2C365FD1F0C4136F313C7DF4D147CBF7A58957B935DE5BA2B1698B8D545C3E3986AF8D4D5BE4E5673FFBD9F255B6F1FDF1D878C56FBCE236DEAB397E5EBCF7F32EBBEC5236409167F1FD8D4B8545C4ABDCE27D72E2318B162D2ABF3FF2332EED34F8BF2F7E4EB1DE94AF606B9C897CDB6DB7955FC799E9B1316CBC78E1D4534F2D733EEE8FBF3D5EF4D0B87C53BC322F7E573C0129FF5A6EB8B0B183059B40C0BA6BDD6584F6337169CE9D77DE39DF7DF7DDCB27D3E22D5AA2BF8A5E2C2ED319BD60A3DF6A66EF39DA3DA27E726CE57D3C511CFBE5C89338F331F65CF1E285344DCB4B2BC68B58637F7DCF3DF7C87B793FE6F3349EBF8AF7548FDF1DC3E218F8C615B8DEF39EF794EF4DD9384B78C18205E573585FF9CA57CA2B7DC5202686BBF1364CF17C46FCCCB83F9EAC96A723D64F0E1EC60E6798BB213F473F695D5B679C78E289E5D501E284A45887E28CDCF87D71C598B81265D4C4380969DAB469E55501A3378D752EAE1A106B4FD4C6786E34D6C3F83C22DE06EEA28B2E2AD798B85265AC4571824C449CEDDB380338A25157D55FD6A6A3A3E396C62C27AE563192E2F70D9A25DDE25FA3C52549B27DB1D0BC1CC3BB9174FBEDB7C7A5969F8EDFAF10BDB903DDC30F3FBC7C1F93461C76D8616B1CE8AEFE33A2B98EFBE2520F51E8EEBEFBEEF2558E71099B934E3AA9BC2F9E60699C951B85250A4A5C96394ECD8FC63C9AFAA1FEBEE79F7FBE1CCC35F3BD4B14A2E1E55F6CBCC68F1FBFCE88C7C5ABC2A29988C17D343F8D57CA466EC4C6EF9FFFF99FCB01FEE04D5B5C92249A9C688656BFACD2EA1103DBB80453BCA74EE461FC9EB82D9AA368B462B0BCFAFB60C4654D8E38E288557F436C20D7F4DFDA18FAC61389ABDFD7B8B44ABCE2389AB8F7BDEF7DE5DF1D9BD13DF6D86355FE375EA127FF5A6AB8B03183059B40C0BA6BDD6504F733F1FE8B7BEEB967D9B3C50B45A3CF8C3322E26A3F9153F12458E3C9FA66F79EA3D923EA27C756DE47EE449E44BEC6BE2AAE8E153975ECB1C7967BE9C8A75D77DDB53C2352DECBFBB19EA771E65B9C58102FEC8EEF993C7972F93BBFFFFDEF976FCB14CF7B350624F1A2F075450CA7E5E988F693317C3DE42DC31FE6AECFCFD14F5AD7D62BE28CD6783FDCF83C5E9C122FF668EC6362681A2733C573E431588DB35EE3B9F4461F9A2449F97EBBAB479C1C37F877FCF6B7BF2D9FC31C2AE28428F59775C9B26C7C4747C7AB8DC16AFCDB8F84F83D8386B9AFC6DFE15FA3028AE6E94B471C71C4B218B88D84A79F7E7A5691204F14F14585E8CD8B785F90386371F02590079FC9B874E9D2558F8B274C1A5F0F8E38CB3186FB430D65A3118F57CC479E8CD67BE12A44AD917F7166F75003FBA1722306AE8D5C8B5799C560365E00101FD7F4F31B6778473EAE9E9F6BFB9BE23D73D6F69846FEC759E243E57F346FF1B7C5E743FD7FB464C992216F977F2D315C18EE60C12610B0EE5A7719E17E327AAAA1DEFB2BFAACB86FF5BD48B37BCFD1EA11F593636F1F15EF0DBAB6FB07E7A9BC97F7F274CD35C4F34D6DD34F56E5F7D146CFA3C71AD7B834FC68AD1BEA2F4349D374C6E04B2FC7C0BF99E2E70FBED472FC7EFF0A153279F2E4538F3FFEF897E37FDA662A169CFB8B84BCAD4896131422A1C1967FF28F376973369CC1824D20807517FDA47E12792FEFE5A990A7A3D34FB6F2EFC1BA665D63441D7AE8A15B747474DCD518B0C65B0D346BA81B3FB7F87DAF0E3A3BF7AEF8FDFE152AE690430EB9FC98638E79A15967EA3EFDF4D337C530B748904B1422A110C93FF9C79BB849DBD0C1824D20807517FDA47E12792FEFE5A990A7A3D74FB6DACFC7BA26AC6BA3AAA3A363C7229E1C7CA6EE75D75DF7A6CEE8E2E70D3E3377E5EFDBD1D1AFA84993269D3479F2E417DFECF7D45DF99EB9F3DAFDCC5C854821927F4223342A9BB50D192CD804025877D14FEA2791F7F25E9E0A793ABAFD642BFC5CAC6BC2BAD652B22CFBF0E0A16EC459679D953FF9E4931B359F8BEF8F9F33F8E7C6EF89DFE7A8575CBCB7EDC1071FFCFC85175EB820AEE5BE315E78E1855F7577775F55FCCCA7DBF93D7315228548FE09F937AA9BC1F51D2CD804025877D14FEA2791F7F25E9E0A793AFAFDE468FD3CAC6BC2BAD6D2569EA97BD7E0E16B9CAD7BF1C517E7BFFBDDEF36683E178F8FEF5BEDACDC7CE5CF77666EBB28FE81B72BFE417BBEFCE52F2FB9ECB2CB1E7DE69967FE6F03F2E4FFE6CF9FFFCB534F3DF5CA9583DC9EF8790A915088E49FFCA3499BB7F5192CD804025877D14FEA2791F7F25E9E0A79DA1AFDE448FE1CAC6BC2BA5629F19EB6699ACEE8E8E8587D109B777575E5575C71457EC71D77E48F3EFA68FEECB3CF9643B9F8185FC7ED717F6767E71BBE377E5EFC5CEF99DBA6264E9CB873F18F7C7196654F1F76D8614F5C74D145BF9E3D7BF63D0F3EF8E0BCC58B17BF54E4C9D2A79F7EFAB1FBEEBBEFF6E27FF6FED34F3FFD9AE27BEE29BEE7A9F8BEF87E85482844F24FFE31CA9B389B4000EB2EFA49FD24F25EDECB53214FF59358D78475AD32B22C1BDFD1D171CB1083D9E1C42DF1F31CD5B16193830E3AE8EF8B7FF033D234BDAEF8C7BF75D0B5BCE3E3AD717BDC1F8F8BC72B440A804224FF8446A8053683368100D65DF493FA49E4BDBC97A7429EEA27B1AE09EB5A256559F6858E8E8E6B8A58B18143DC78FC35F1FD8E2228440A91FC13F2AF953783368100D65DF493FA49E4BDBC97A7429EEA27B1AE09EB5AE51D7AE8A1DB7474741C98A6696FF171A088C78B7879E5F0F6E5955F0FACBCFFC078BCA3060A914224FF84FC6BF5CDA04D20807517FDA47E12792FEFE5A990A7FA49AC6BC2BA06A0102944F24FC8BF16DC0CDA04025877D14FEA2791F7F25E9E0A79AA9FC4BA26AC6B000A914224FF84FC6BC1CDA04D20807517FDA47E12792FEFE5A990A7FA49AC6BC2BA06A0102944F24FC8BF16DC0CDA04025877D14FEA2791F7F25E9E0A79AA9FC4BA26AC6B000A914224FF84FC6BC1CDE031368100D65DF493FA49E4BDBC97A7AD112FBDF4527EEFBDF7961F37E67679AA9FC4BA26AC6B000A914224FF84FC6B93CD604747476E13083032C68D1BD7B9C5165B5877F593423F29EF85BC97A76B8C18CE167F72F971636E97A7EDBB8F7F8B612EEAAF750D40211206BAFEDDE5DFD8B272A00BC0C8ACB9F52449ACBBFA49A19F94F742DECB53035D36C6560E01EAAF750D40211206BA42FE8DADE182E30C3032EBED84587357C60447443F29F493F25EC87B796AA00BA8BFEA2F8042241422F927FF589F0183E30C3032EB6D7DD040B7EE88E827857E52DE0B792F4F0D7401F557FD055088844224FFE41FEB3360709C019ABFD60E3E3BD759BAFA49A19F94F742DECB53035D40FD557F011422A110C93FF9C77A0F191C6780E6AFB5F52106BACED2D54F0AFDA4BC17F25E9E1AE802EAAFFA0BA010098548FEC93FD63964709C019ABBCE0E7576AEB374F593423F29EF85BC97A706BA80FAABFE0228444221927FF28FF51A3438CE00CD5D67EB6B19E83A4B573F29F493F25EC87B796AA00BA8BFEA2F8042241422F927FF58EBA0C1710668DE1ABBB6B3739DA5AB9F14FA49792FE4BD3C35D005D45FF5174021120A91FC937FAC73D8E03803346F8DADAFC740D759BAFA49A19F94F742DECB53035D40FD557F011422A110C93FF9C71A870D8E33807517FDA47E12792FEFE5A981AE3C05EB9AB0AE0128440A91FC13F2CF600100EBAE7E52E827E5BD90F7F2D440579E82FAABFE0254DAC0C0C06BCB962D53045A208A7F870545215A2EFF84FC335800C0BA8B7E523F89BC97F7F2D440579E82754D58D7004AB367CF5EB068D12285A005E289279EF86151886E957F42FE192C0060DD453FA99F44DECB7B793A32F1D24B2F95C3D9F8B831B7CB53B0AE09EB1A40D3D46AB5FD6FBAE9A6250B172E5C5CA557182D5FBEBC9D5E51B470EEDCB9571645685E11FBCA3F21FF0C1600B0EE32B6FAC9050B16E827B18F92F7F254C853B0AEE93BAD6B006B168B5FBCA2A5881571EDF9568FFFFCCFFFCC274D9AB4EAEBCB2FBF3C8F27EAAAF0B7AF2156AC3CFEFBCABFFE5CC83F830500ACBB8CA57E72CE9C39F939E79C935F73CD35FA49ECA3E4BD3C15F214AC6BFA4EEB1A40F52549F28E8E8E8EF9699AFE7ED09374754FD4015561BD02B0EE42439EE7EF58B264C9B2C58B17E793274FFEB923020080BE1380CAEBE8E838379E942BE20F871E7AE816C5C7092BBF8E98E008011558C70C1600ACBB507AE491477E96AF54ABD59EC9B2EC20470500007D27009595A6E9EE31C86D0C708BAF2735CECE5D197547096875060B00D65D088F3FFEF8675E7DF5D5C6F36AF96BAFBDF6EAC9279FBC284992AD1D1D0000F49D0054CEB469D336EDE8E8B875D0F036CFB2ECCEC15F3B4B17A802830500EB2EE479BED9A2458B9ECE5713B74D9A34E942470800007D2700959365D9D1430C6F870A67E9022DCD6001C0BA0B0F3DF4D079F91A5C79E5952FA469BAA7A3040080BE1380CA489264878E8E8E25EB39D075962ED0D20C1600ACBB8C6D0B172EFCC0F2E5CB5F5DD3136B7FF8C31F5E9E3265CAFD13264CD8DCD1020040DF094025A469FAE30D18E63A4B176869060B00D65DC6B679F3E6DD9BAFC3FDF7DFFF549665C7395A0000E83B016879699AEEB781C35C67E9022DCD6001C0BACBD89524C96677DE79E78A753DB1F6DC73CFFDA2C8DD67E2F18E1A0000FA4E005A5A514C0E2BE2BFD234BDB1F87867114F3A4B17A8F8BA66B00060DD650C3BF9E493FF7DC58A15FFB796E7D55EECEEEEAE39530200007D27009515EFA77BF0C1078F4BD3F463071D74D0E78B8F933C510754680DB35E01587719C3E23DCAAEBAEAAAF96B7A56EDF6DB6FBFACC8DBBBBD97190000FA4E002A2949922D8B22F3F2EAB77BA20EA80AEB15807517BEFAD5AF7E72EEDCB9AFACFEA4DAABAFBEFAEB499326FD2E4DD33D1D250000F49D00545292243B7574743CBEFAED9EA803AAC27A0560DD8570D659675DFD5A61D0F36A7F88DB8A9CBDC0D1010040DF0940651545E69345CC19E2764FD4015559C7AC5700D65D8817AB6EDDDFDFBFB4F1ACDAC2850B7F58E4EBEFE276470700007D27009595A6E9BF14C5E69AD56FF7441D5015D62B00EB2E347476761EF2FCF3CFBFB278F1E2FC6B5FFBDA6FB22C3BC851010040DF0940A51585E69B435D0AC21375405558AF00ACBB30D845175D74C739E79C9317B97A83A3010080BE1380CA2B8ACD69699AFEDB10B77BA20EA8CA3A66BD02B0EEC22A4992EC14791A1F1D0D0000F49D00545E5170FEA388C387B8DD13754055D631EB15807517E4290000FA4E00DA539AA6D71545E78B0A11A07106C0BA8B3C0500007D2700AD57706E9D3871E21E0A11A07106C0BA8B3C0500007D2700AD5770E62549F27E8508D0385365799EBFF5B1C71EFBD19C39735E191818C8FBFBFBC5084771DC5F9B3D7BF6825AADB6BF8CB4EE823C050040DF09006F5EC1599124C95B152240E34C953DF6D86357CF9E3D3B5FB46851BE6CD9B27CC58A156284238E7B1CFF9B6EBA69497F7FFFBEB2D2BA0BF21400007D27006CA42449B62D0ACE730A11A071A6EAE2CCDC18261AAC8E7E2C5CB870717F7FFFADB2D2BA0BF21400007D27006CA42CCB3E52149CFB152240E34CD5C565969D99DB3A67EAF6F7F72F9795D65D90A70000E83B0160E38BCD5E5996D5142240E34CD5C57BB81AA6B64EC4BF87ACB4EE823C050040DF09001B294DD34945C1B942210234CE54DDFA0E745F7A6161FED86DFF95DF37F3B432E2F3B8CD10D64017EB2EF2140000F49D00B49C2CCBBE5DC4F7142240E34CD5ADCF4077E9F3F3F37B7F7E727EF7CF8E7D5DC46D719F41AC812ED65DE4290000E83B0168B562F3DD344D8F5588008D3355B73E03DD27EFBBEE0DC3DC46FCEEBE9F1AC41AE862DD459E020080BE1380962B363F28E2CB0A11A071A6EAD667A0FB40FDAC350E74E33E8358035DACBBC8530000D07702D052B22CEB2FE20B0A11A071A6EAD667A07B6FFFB4350E74E33E8358035DACBBC8530000D07702D06AC5E63793264DFAA84204689CA93A035D035DACBB204F0100D07702D08EC5E6992449B65788008D3355B73E03DDFB669EB6C6816EDC67106BA08B7517790A0000FA4E005AC6E1871FFE2745B179A5F874138508D0385375EB33D07DF897D3D738D08DFB0C620D74B1EE224F010040DF0940CB48926487A2D8CC5788008D33ED607D06BACFCEBF27BFF7FF9DF2C6CB2D17B7C57D06B106BA587791A70000A0EF04A0950ACDDF1571874204689C6907EB33D08D78FCF6CBDF30D08DDB0C610D74B1EE224F010040DF09404B49D374BFA2D85CAF10011A67DAC17A0D74972FCF1FFEDF0BDF78B9E5E2B6B8CF20D64017EB2EF2140000F49D00B48C2CCBBE5E149B4B142240E34C3B58D74077E9F3F3F3877ED9B7C6F7D08DFBE23186B106BA587791A70000A0EF04A0550ACDBF665976BA4204689C69076B1CE82E5F9E2F7CB896FFE6C613D738CC6D443C261EEB6C5D035DACBBC8530000D07702D00A85667A9AA647294480C6997630D440775D67E53A5BD74017EB2EF2140000F49D00B4AC344D7F5C149B03152240E34C3B186AA0BB3E67E5AEED6C5D8359035DACBBC8530000D07702309A85E6E62CCB3EA510011A67DAC15003DDE10E731B61306BA08B7517790A0000FA4E0046B3D03C9224C987142240E34C3B58E37BE80A035DACBBC8530000D0770250D142F3529224EF5088008D33EDC040D74017EB2EC8530000F49D00B48D18E4C64057210234CEB40B035D035DACBB204F0100D07702D036E252CB71C9658508D038D32E0C740D74B1EE823C050040DF09403B15994F1771B34204689C691706BA06BA5877419E0200A0EF04A06DA4699A1485E66A8508D038D32E0C740D74B1EE823C050040DF0940DBC8B2ECE8A2D0F4294480C6997661A06BA08B7517E4290000FA4E00DAA9C8FC7B9AA627294480C6997661A06BA08B7517E4290000FA4E00DAA9C85C5AC4648508D038D32E0C740D74B1EE823C050040DF0940DB48D3F46745A1D957210234CEB40B035D035DACBB204F0100D07702D04E45E68E891327FEAD4204689C691706BA06BA5877419E0200A0EF04A09D8ACCFC2449765088008D33EDC240D74017EB2EC8530000F49D00B48569D3A66D5A149957264C98B0B94204689C691706BA06BA5877419E0200A0EF04A02D2449B27D51649E5188008D33EDC440D74017EB2EC8530000F49D00B4852CCB762B8ACC6F142240E34C45FE7DEB454C58D7E30C740D74B1EE823C050040DF09405B48D3F41FB22CEB5788008D3355F9F75D196B1DEC1AE81AE862DD05790A0080BE1380B690A6E9214591B95C210234CE54E5DF77B51872B06BA06BA08B7517E4290000FA4E00DA429665C71571B64204689CA9CABFEF1AE275835D035D035DACBB204F0100D07702D02E05E6DC344DA72A4480C699AAFCFBAE23CAC1AE81AE812ED65D90A70000E83B01689702736511131522A09D1A67219A3DD05DB264C91B6E5BB46851FEC8238F0CF9F8279F7CF2755F3FF1C413F90B2FBC30E463172C58903FF0C0031BF4F7C4EF9E3367CE1AEF7FE69967F2FBEEBBAFFC7CEEDCB9E5EF5EB66C59FEDBDFFE365FBA7469D307BA72B2FD43F5C1136B0000A0EF04A049B22CAB15F139850880AA6C8C46FB92CB3104DD6EBBEDF2EBAEBBAEFC7AC68C19F917BFF8C5BCA7A727DF7DF7DDDFF0F8DFFFFEF7F94E3BED944F9D3AB5FCFAFAEBAF8F9A9A7FE10B5F78DDE3162E5C98FFE217BFC8BFF4A52FE51FFDE847CBCF234E3EF9E47CD75D775D153FF8C10FCAE1EC19679CB12AF6DD77DF7CD34D37CD4F3FFDF4D7DDFEF0C30F973FFB8A2BAEC8B7DF7EFBF2F3ADB7DE3ABFEAAAABF2F9F3E7977FC7EDB7DFEE0C5D604CD40F470100007D2700552D30F72749B2AB4204405536466B1BE43634FB0CDD18CEBEF5AD6FCD67CE9C590E6B8B5F996FBEF9E6E5C72DB6D822FFF33FFFF3558FBDF0C20BCBDB7FFEF39FE78B172FCE77DC71C7FC2B5FF94AFEA77FFAA7E510B8F1B8CB2FBFBC7CDCEA71C82187E49FFAD4A7F2EF7EF7BBE5D73148BEFAEAABCBDFB7F7DE7BAF31E2B137DC7043FEE8A38FE6C71D775CBECD36DBE403030306BAC098AD1F8E020000FA4E00AA5A609E4B92645B850880AA6C8CD636C86D1889F7D0FDFEF7BF9FDF7CF3CDF9565B6D95FFE4273FC93B3B3BF371E3C69567D5362E7F1C97338E01EEBBDFFDEEFCA9A79E2A07B371F66DDC7EC925979467D59E75D659AB7E660C5E4F3BEDB47CF9F2E5F9E73EF7B9FCD24B2FCDBFF6B5AFE5071F7C707EF6D9679767D9C619BF311CFEC8473E923FFEF8E365C4EF7BCBCAA171E3B68F7DEC63F92F7FF9CBFCBCF3CECBDFF6B6B7E59B6CB249FEE10F7FB81CE8FEF77FFF77F998F89E69D3A6E5E3C78FCFEFB9E71E035DA0ADEB87A3000080BE1380CAD9679F7DDE561498E50A110015DA18AD7590DBD0CC816E0C4D4F39E5943262581AC3DABFFCCBBF2C87AD71766E7C1E71FEF9E79767E0167F4EFEAE77BDABBC5CF2DBDFFEF6BCAFAFAFFC39F7DE7B6F7EC001079443DD134F3C317FE8A187F2238E3822FFC0073E509E811BDF77D1451795C3DC88DD76DB2D3FF2C82357FD1D7119E5B70C71466F23BEF7BDEFBDEEB1832FB91CF77FFAD39F2E3FC6DFF48D6F7CA3FCFD06BA401BD70FEB100000FA4E00AA274992F71705669E420440BB69E64037CE9ADD6BAFBD565DD2F8DC73CF2D07B28323CEBABDFBEEBBF32CCBF2F7BCE73DE525988F39E698F27BE352C9F1734E3AE9A4F22CDC6BAEB9A63C9376CA9429430E66E3BD76E3E7FCD55FFD5539F01D3CA4DD76DB6DF33BEEB8A3FC3BE2B131088EAF3FF8C10FBE61A0FBCE77BEB3FC5D31D08DF7DA8DB38BE37BE277BBE432D0EEEC670000D0770250D5E2F289226E5588006837CDBEE4F2C2850BCB61E8C30F3F5C9E35FB962186B0F1B818AEC659BA8DF7D48DF7BF8DF7DE1D3CD06DFCCCB8CCF2C5175F9C5F70C105ABE2A73FFDE9AA4B2EFFEA57BF2ABF77DEBC791B74866EBC5F6E5C7E396EDB679F7DBC872E3056F73ED6210000F49D00544F9AA6FB1705E65A8508807633D203DD2449CAF7B68D38E18413560D7423A64F9FBE6AA01B97688ECB310F35D08DD86CB3CDCAF7DC8DF7BADD669B6DCA016C63A01BF7C7FBE636DE733706BA7129E75B6EB9A51C14C7DF73E59557965F0F3E43F7DA6BAFCD3FFFF9CFE7DB6DB7DDAA4B2EAF3ED07DE9A5970C7481B6663F030080BE13804ACAB2EC88A2C05CAC1001D06E9A3DD08DCB2917BF26BFEBAEBBCA816E9C39FB677FF667656CB5D5566B1CE87EFDEB5FCFF7DF7FFFB50E746FBCF1C6F2F3A38E3A6AD540F7339FF94C7EDC71C795EFD71BC3D88D7D0FDDD507BA071D74D0EB1E6FA00BB41BFB190000F49D0054B5B89C9265D9A90A1100EDA69903DD1884EEB0C30EE519B43BEFBC73F9BEB69D9D9DF9F1C71F5F9E9DFB9DEF7C273FF3CC33CBCB2D0F1EE83EF0C003F9965B6E595E82796D03DDB86DD2A449F9B871E3560D740F3CF0C0FCB39FFD6CFE8D6F7C237FF6D967CBC7CE993327EFEEEE2ECFAE8D33858BFFECFCB6DB6E2BBF3EE38C33F2993367968F7BEAA9A7F2534F3DB51CE8C6FDF13B3EFEF18F9783E5F89EF8FB76D96597557F97812ED0A67B1FEB100000FA4E002A595C2E4CD3F44885088076D3CC816E9CED1AC3D6175E78A1BC84725C1E79DB6DB7CDDFFEF6B7E75B6CB1C5AA98366DDAEB06BA31308D41EACB2FBFBC6AA0BBD75E7BBD61A0BBDF7EFB9583DBB8BCF2EA975C5E53CC9D3BB71CCEFEFAD7BF7EC37D975C724979DF01071C50BE27EFFBDEF7BEF2E70F0C0CE47BECB147795FFC7DF7DD779F812ED0CE7B1FEB100000FA4E00AA274DD3FF290ACC010A1100EDA6D9975C5EB468D17A3F76C99225E559B2AB7F5F9C49FBE28B2FBEEEB18F3CF248BE74E9D25567D62E58B0A07CBFDEF8B8B6DF11EFDD7BEBADB7AEFADEC111BF277E467CBE7CF9F221FFBEA16E37D005DA89FD0C0000FA4E00AA5A5CE66459365E2102A0DD347BA02B0C7481CAED7DAC430000E83B01A86471793C49929D142200DA8D81AE812E80FD0C0000FA4E00DAA1B82C4B92644B8508807663A06BA00B603F030080BE13804A4B9264EBA2B82C518800684706BA06BA00F6330000E83B01A8B42449C615C5E5418508807664A06BA00B603F030080BE1380AA1796095996CD528800684706BA06BA00F6330000E83B01A8B4344D8BDAD2F1438508807664A06BA00B603F030080BE13804ACBB2ACAB88F3152200DA9181AE812E80FD0C0000FA4E00AA5E58CE4CD3F43B0A1100EDC840D74017C07E0600007D2700552F2C971571A84204403B32D035D005B09F010040DF0940A5A5697A6396657B2B4400B423035D035D00FB190000F49D0054BDB0DC3571E2C48F2B4400B423035D035D00FB190000F49D0054BDB03C9524C97B152200DA9181AE812E80FD0C0000FA4E002A2B4992CD8AC2F24A7C548800684706BA06BA00F6330000E83B01A8AC383337CED0558800685706BA06BA00F6330000E83B01A87251F99B780F5D8508807665A06BA00B603F030080BE1380CA4AD3749F226E548800685706BA06BA00F6330000E83B01A8AC344DBF5A1496FF528800685706BA06BA00F6330000E83B01A8AC2CCB4E28E20C8508807665A06BA00B603F030080BE13802A17959E344D3B152200DA9581AE812E80FD0C0000FA4E00AA5C54AE2A22558800685706BA06BA00F6330000E83B01A8AC2CCB6615F1198508807665A06BA00B603F030080BE13802A179507932419A71001D0AE0C740D7401EC670000D0770250E5A2B2244992AD152200DA9581AE812E80FD0C0000FA4E002A2949922D8BA2F2B24204403B33D035D005B09F010040DF0940252549B25351541E5788006867030303AF2D5BB6CC30B505A2F87758D0DFDFBF5C5602A3C97E0600007D2700552A289F2C628E4204403B9B3D7BF682458B1619A8B6403CF1C4133FECEFEFBF555602A3BC0FB29F010040DF094035A469FA2F4551B9462102A09DD56AB5FD6FBAE9A6250B172E5CEC4CDD513B3377E1DCB973AFECEFEF9F57C4BEB212184DF6330000E83B01A88C2CCBBE5914950B142200DA5D0C11E3CCD02256C47BB88A118F152B8FBF612E30EAEC670000D0770250A582725A9AA6FFA61001000063681F643F030080BE1380CA1494FF28E270850800001843FB20FB190000F49D0054439AA6D71545E58B0A1100003056D8CF0000A0EF04A04A05E5D6891327EEA11001000063681F643F030080BE1380CA1494794992BC5F21020000C6D03EC87E0600007D27009529282B922479AB420400008CA17D90FD0C0000FA4E005A5F9224DB1605E53985080000184BEC670000D07702500959967DA42828F72B440000C058623F030080BE1380AA1493BDB22CAB29440000C018DB0BD9CF0000A0EF04A0F5A5693AA928285728440000C058623F030080BE13804AC8B2ECDB457C4F21020000C612FB190000F49D0054A5987C374DD363152200464AF2A31F6DF6ED73EADBADF38179BEC9D1BD37BCB3F1E53767D4DFE1E801F026EE85EC670000D07702508962F28322BEAC10013052BACF1DD8A1ABB77E5D7CDED5533BADABB776EDE0E8EEA9EF5DDED7579FD0DD53FB71E3FB3A7B07EEEC9A3E73FCF117F76F3D6D5A7D734712808DDC0BD9CF0000A0EF04A0F56559D65FC41714220046C2B133EAEFEDECABFD63575F6DD6949EFA5F77F5D606E2EBA9BDB58F35E2C80B7EF1AE786CF198CBBAFAEA5F8ACFA7F6D4FEA9AB77E0A1E2F1D717B1B4B8EFEF1D4D003686FD0C0000FA4E00AA524C7E3369D2A48F2A44008C84CEDEDA2145CCE9EAAD2DEEECAB5FD3DD5B9B39B5B7BE67D779F50F447C7BFAC05FC4E3E2F2CA5DBD03F7744EAFEFD7D9539B513CFEC1F231D3678E8F21B02309C09BB017B29F010040DF0940258AC93349926CAF10013052065F723906BA5DBD0357FFF16CDC227A6BCF94B7F7D53B3B7B6B0FC459B99DBD038715B7BFD8D957FB590C8263A05BC47C4712808DDC0BD9CF0000A0EF04A0B51D7EF8E17F521493578A4F375188001829E5A596FB6A8F96EF97DB5B9B1903DEC67DF13EB9F1B1FBDC1BB72D3E3FAAB8FFECF8BA78EC6DE5C7BEDAACC15F03C070D9CF0000A0EF04A0E52549B243514C867D86934204C086EAEAAB9DDCD55BFFDFB8EC725C56F98F67E8D62E2D3EF644149F3F158F3BBA77E083C5631676F70E9CD9DD57EB2E6EBF3BCEEA2D3ECE5BF971AEA309C0C6B09F010040DF0940150AC9DF1571874204C0481A7CC9E5F2F2C97DF5099DE7D7C6454CE999B54BDC3EA567E0935D3DF56F759E3F73B7A37B6F78E7EA67E41ED5376BA7E2F19F703401B09F010040DF0940DB4AD374BFA2985CAF100130923A7BFADF3FF83D74BB7B07F6983A63D68E8DE83AAFBE4DF78CFA87BAFAEAA7C499BC5D3D03E7C7A598E332CC8D9FD1D5533FA9B86F8AA30980FD0C0000FA4E00DA5696655F2F8AC9250A110023656AEFACBFE9EAADDD15C3DAF8BAABA7765AF1F54F0647676FFD88AEBE817DBA7AEB9362B8BBF2712714F7FDAA71B9E6E2F32BBF357DE6BB1D5100EC670000D07702D0CE85E45FB32C3B5D21020000C6E07EC87E0600007D27002D5F48A6A7697A94420400008CC1FD90FD0C0000FA4E005A5B9AA63F2E8AC9810A11000030D6D8CF0000A0EF04A00A85E4E62CCB3EA51001000063703F643F030080BE1380962F248F2449F221850800001883FB21FB190000F49D00B47C21792949927728440000C018DC0FD9CF0000A0EF04A075C5203706BA0A1100003016D9CF0000A0EF04A0A5C5A596E392CB0A1100003016D9CF0000A0EF04A0D58BC8A78BB879630B91104208218410425435EC0C01001881E7E2F59D000C4F9AA6495148AE76240000000000A0390C740118B62CCB8E2E0A499F23010000000000CD61A00BC0C614917F4FD3F424470200000000009AC34017808D2922971631D991000000000080E630D00560D8D234FD595148F675240000000000A0390C7401D8982272C7C48913FFD691000000000080E630D00560638AC8FC24497670240000000000A0390C7401189669D3A66D5A149157264C98B0B9A3010000000000CD61A00BC0B02449B27D51449E71240000000000A0790C740118962CCB762B8AC86F1C090000000000681E035D0086254DD37FC8B2ACDF91000000000080E631D0056058D2343DA42822973B120000000000D03C06BA000C4B9665C71571B623010000000000CD63A00BC0700BC8B9699A4E75240000000000A0790C7401186E01B9B288898E040000000000348F812E00C3926559AD88CF39120000000000D03C06BA000CB780DC9F24C9AE8E040000000000348F812E00C32D20CF2549B2AD23010000000000CD63A00BC006DB679F7DDE561490E58E0400000000003497812E001B2C4992F71705649E23010000000000CD65A00BC0708AC7278AB8D591000000000080E632D0056083A569BA7F5140AE7524000060F4253FFAD166DF3EA7BEDD3A1F98E79B1CDD7BC33B1B5F7E7346FD1D8E1E0000B43E035D0036589665471405E46247020000465FF7B9033B74F5D6AF8BCFBB7A6AA775F5D6AE1D1CDD3DF5BDCBFBFAEA13BA7B6A3F6E7C5F67EFC09D5DD3678E3FFEE2FEADA74DAB6FEE480200406B32D0056038C5E3942CCB4E7524000060741D3BA3FEDECEBEDA3F76F5D5664DE9A9FF75576F6D20BE9EDA5BFB58238EBCE017EF8AC7168FB9ACABAFFEA5F87C6A4FED9FBA7A071E2A1E7F7D114B8BFBFEDED1040080D664A00BC0708AC785699A1EE9480000C0E8EAECAD1D52C49CAEDEDAE2CEBEFA35DDBDB599537BEB7B769D57FF40C4B7A70FFC453C2E2EAFDCD53B704FE7F4FA7E9D3DB519C5E31F2C1F337DE6F818023B920000D0BA0C7401D860699AFE4F51400E7024000060F40DBEE4720C74BB7A07AEFEE3D9B845F4D69E296FEFAB7776F6D61E88B3723B7B070E2B6E7FB1B3AFF6B31804C740B788F98E240000B426035D0086533CE6645936DE91000080D1575E6AB9AFF668F97EB9BDB59931E06DDC17EF931B1FBBCFBD71DBE2F3A38AFBCF8EAF8BC7DE567EECABCD1AFC350000D07A0C7401184EF1783C49929D1C090000185D5D7DB593BB7AEBFF1B975D8ECB2AFFF10CDDDAA5C5C79E88E2F3A7E27147F70E7CB078CCC2EEDE8133BBFB6ADDC5ED77C759BDC5C7792B3FCE75340100A03519E802309CE2B12C49922D1D090000187D832FB95C5E3EB9AF3EA1F3FCDAB888293DB37689DBA7F40C7CB2ABA7FEADCEF367EE7674EF0DEF5CFD8CDCA3FA66ED543CFE138E260000B41E035D00364892245B17C5638923010000ADA1B3A7FFFD83DF43B7BB77608FA93366EDD888AEF3EADB74CFA87FA8ABAF7E4A9CC9DBD533707E5C8A392EC3DCF8195D3DF5938AFBA6389A0000D07A0C7401D82049928C2B8AC7838E0400008CBEA9BDB3FEA6ABB776570C6BE3EBAE9EDA69C5D73F191C9DBDF523BAFA06F6E9EAAD4F8AE1EECAC79D50DCF7ABC6E59A8BCFAFFCD6F499EF76440100A0F518E802B0A18563429665B31C090000000000683E035D0036489AA645EDE8F8A123010000000000CD67A00BC006C9B2ACAB88F31D090000000000683E035D0036B4709C99A6E9771C090000000000683E035D0036B4705C56C4A18E040000000000349F812E001B244DD31BB32CDBDB91000000000080E633D00560430BC75D13274EFCB823010000000000CD67A00BC086168EA7922479AF23010000000000CD67A00BC07A9B366DDAA6513884104208218410420821841042083172614201C0060D751D050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C6BAFF0FC6E57D9A0AC9FE2D0000000049454E44AE426082, 1); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('efd6c86d-1c4e-11ec-94ee-5ef70686b817', 1, 'flowSubmit.bpmn', 'efd6c86c-1c4e-11ec-94ee-5ef70686b817', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A62706D6E323D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A64633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E222069643D226469616772616D5F666C6F775375626D697422207873693A736368656D614C6F636174696F6E3D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2042504D4E32302E787364223E0A20203C70726F636573732069643D22666C6F775375626D697422206E616D653D22E68AA5E99480E794B3E8AFB72220697345786563757461626C653D2274727565223E0A202020203C657874656E73696F6E456C656D656E74733E0A2020202020203C666C6F7761626C653A657865637574696F6E4C697374656E6572206576656E743D22656E642220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E557064617465466C6F775374617475734C697374656E6572223E3C2F666C6F7761626C653A657865637574696F6E4C697374656E65723E0A202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C73746172744576656E742069643D224576656E745F31376E32727739223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D2241637469766974795F30336B6A75727422206E616D653D22E68AA5E99480E58D95E5BD95E585A52220666C6F7761626C653A61737369676E65653D22247B7374617274557365724E616D657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934373637353034313130373936382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A66616C73652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383833353236373622206C6162656C3D22E68F90E4BAA42220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30306C647661672220736F757263655265663D224576656E745F31376E3272773922207461726765745265663D2241637469766974795F30336B6A757274223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3079777866777522206E616D653D22E983A8E997A8E9A286E5AFBCE5AEA1E689B92220666C6F7761626C653A63616E64696461746547726F7570733D22247B64657074506F73744C65616465727D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934373637353034313130373936382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550545F504F53545F4C45414445522671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E44657074506F73744C65616465724C697374656E6572223E3C2F666C6F7761626C653A7461736B4C697374656E65723E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383833373230303322206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383833373538363622206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E0A202020202020202020203C666C6F7761626C653A666F726D5661726961626C652069643D2231343430393637353831363733343539373132223E3C2F666C6F7761626C653A666F726D5661726961626C653E0A20202020202020203C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F307839647832742220736F757263655265663D2241637469766974795F30336B6A75727422207461726765745265663D2241637469766974795F30797778667775223E3C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D22476174657761795F3137397A676E70223E3C2F6578636C7573697665476174657761793E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3138703368716222206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F3079777866777522207461726765745265663D22476174657761795F3137397A676E70223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C656E644576656E742069643D224576656E745F306E766A786768223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31716967616B7222206E616D653D22E68AA5E99480E98791E9A29DE5B08FE4BA8E313030302220736F757263655265663D22476174657761795F3137397A676E7022207461726765745265663D224576656E745F306E766A786768223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B746F74616C416D6F756E74203C3D20313030307D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F3071617934387522206E616D653D22E680BBE7BB8FE79086E5AEA1E689B92220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934373637353034313130373936382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383835333637373122206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383835343030383122206C6162656C3D22E68B92E7BB9D2220747970653D22726566757365222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F303538636D736222206E616D653D22E68AA5E99480E98791E9A29DE5A4A7E4BA8E313030302220736F757263655265663D22476174657761795F3137397A676E7022207461726765745265663D2241637469766974795F30716179343875223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B746F74616C416D6F756E74203E20313030307D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F3079637838666222206E616D653D22E5908CE6848F2220736F757263655265663D2241637469766974795F3071617934387522207461726765745265663D224576656E745F306E766A786768223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D226167726565223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D20276167726565277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F31686D61796B6822206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F3079777866777522207461726765745265663D2241637469766974795F30336B6A757274223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30396237756E7222206E616D653D22E68B92E7BB9D2220736F757263655265663D2241637469766974795F3071617934387522207461726765745265663D2241637469766974795F30336B6A757274223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A637573746F6D436F6E646974696F6E20747970653D226F7065726174696F6E22206F7065726174696F6E547970653D22726566757365223E3C2F666C6F7761626C653A637573746F6D436F6E646974696F6E3E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B6F7065726174696F6E54797065203D3D2027726566757365277D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F666C6F775375626D6974223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22666C6F775375626D6974222069643D2242504D4E506C616E655F666C6F775375626D6974223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F31376E32727739222069643D2242504D4E53686170655F4576656E745F31376E32727739223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223130322E302220793D223239322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30336B6A757274222069643D2242504D4E53686170655F41637469766974795F30336B6A757274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223139302E302220793D223237302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30797778667775222069643D2242504D4E53686170655F41637469766974795F30797778667775223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223335302E302220793D223237302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22476174657761795F3137397A676E70222069643D2242504D4E53686170655F476174657761795F3137397A676E70223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2235302E30222077696474683D2235302E302220783D223531352E302220793D223238352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F306E766A786768222069643D2242504D4E53686170655F4576656E745F306E766A786768223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223933322E302220793D223239322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F30716179343875222069643D2242504D4E53686170655F41637469766974795F30716179343875223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223730302E302220793D223337302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31686D61796B68222069643D2242504D4E456467655F466C6F775F31686D61796B68223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223430302E302220793D223237302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223430302E302220793D223234302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223234302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223237302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223330392E302220793D223232322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30796378386662222069643D2242504D4E456467655F466C6F775F30796378386662223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223830302E302220793D223431302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223935302E302220793D223431302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223935302E302220793D223332382E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D223836342E302220793D223339322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F303538636D7362222069643D2242504D4E456467655F466C6F775F303538636D7362223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223534302E302220793D223333352E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223534302E302220793D223431302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223730302E302220793D223431302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2239302E302220783D223537352E302220793D223338332E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31716967616B72222069643D2242504D4E456467655F466C6F775F31716967616B72223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223536352E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223933322E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2239302E302220783D223730342E302220793D223239322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31387033687162222069643D2242504D4E456467655F466C6F775F31387033687162223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223435302E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223531352E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232332E302220783D223437312E302220793D223239322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30783964783274222069643D2242504D4E456467655F466C6F775F30783964783274223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223239302E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223335302E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30306C64766167222069643D2242504D4E456467655F466C6F775F30306C64766167223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223133382E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223139302E302220793D223331302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30396237756E72222069643D2242504D4E456467655F466C6F775F30396237756E72223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223735302E302220793D223435302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223735302E302220793D223438302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223438302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223234302E302220793D223335302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C62706D6E64693A42504D4E4C6162656C3E0A202020202020202020203C6F6D6764633A426F756E6473206865696768743D2231342E30222077696474683D2232322E302220783D223438342E302220793D223436322E30223E3C2F6F6D6764633A426F756E64733E0A20202020202020203C2F62706D6E64693A42504D4E4C6162656C3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('efe9b42e-1c4e-11ec-94ee-5ef70686b817', 1, 'flowSubmit.flowSubmit.png', 'efd6c86c-1c4e-11ec-94ee-5ef70686b817', 0x89504E470D0A1A0A0000000D49484452000003D2000001EA0806000000E82576370000412B4944415478DAEDDD09981C659D3F702EEF83435D5D5714165DEF733D38D63FB3EB09A8A0CB10270104C2722733130251311A5856371A49A62781E0AA5C123934AE201148BA9B841BC20D41C215424E120921481220A9FFFBAB999EED4C66724E92393E9FE7799FE9AEAA3EA6FAEDAAFAF6FBD65BDB6D070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F432B5575CB1E3A9A3CA6F5DEF8259B6FDA0C2A43757EE9E34AEFC466B0F0000803EA7F19CE23F3414CA57C5ED86A6D2590D85D21FAB4B6353F9ABF9BCE6724D6353E97795C7D5178A77378C9DB2CFB0F327EF3C624479276B120000805EEFB471E577D43797BED2D05C9A3AB8A9FC91149C8B717F48A1F4F14A39F1DC1B776D09D2A50B53983E246E0F692A1DD85028CE4CCBFF29956569DE7ED626000000BD5E7DA174642AB7A630BCB8BEB93CB1B1509A32A450DEBB6174798F28A78E2DBE27968B6EDC2938DF5F3FB6FCB5FAA6D2B8B4FC23F93263A7EC13E1DB9A040000A0CFA8EEDA1D413A05E62B5B5A9F53299416E5D39BCBF529703F1CADD0F585E27FA4E9CFD73797AE89001E413A95B9D6240000007D42DEA5BBB9F4787E3E740AD211AC2BF3E23CE896B07DED6EE9F62969FE4FE37E5AF6CEFC6F73696AF57D000000E8D552101EDE5028DF12DDBBA3FB764B8B74E957E96F5394747B412C37A850DC2B2D33BFB150FCEFC6E652639A7E5FB462A7BFB35BFFCEB236010000E813D618B53BBA6937976BEAC794DE1F6570D3D4F7C5F4C14DC57D1B9ACA27D78F99F2B1B80456FB16E8539AA7EE9996FF9CB509000040AF57DF34F9DDD5E74837168A9F1D326EEAEE95D230BABC4BE3B8F27B53C0FE513E305953714C74F98EEEDE95E74821FB8C346FB0B509000040AF36A430F5930D85D2BD11925B02717E1DE9FFAD2EF585F2F10DCDC50352D81E10A1BA75B9EFA579B757BA85A7DB134E1E3BE52DD628000000000000000000000000000000000000000000000000000000000000000000ACC7B7BFFDED4C51B665F12D0400007A5C90B61650FF0000000419D43F0000004106F50F0000409041FD030000106440FD030000041950FF00000041C65A40FD030000106450FF0000000419D43F0000004106F50F0000409001F50F0000106440FD03000004196B01F50F00004090A19B9B3973E671A3468DCA6A6B6BF7B436000000411AD621CBB2372E5DBA74F9E2C58BB38103075E678D0000008234ACC3638F3D764DD6AA542A2DAAABAB3BCC5A0100000469E8C0934F3EB9FFAA55AB2A393A5BBD7AF5AAE1C3872FACADADDDD9DA0100000469A89272F38E0B172E7C266B27A60D1830E03C6B08000010A4A1CACC993347679D983061C273FDFAF5DBDB5A020000BA53682E47705E4F295B536C09F3E7CFDF63C58A15AB3A0BD2AFBCF2CA8B83070F9E515353B393B50500007497205DB30141BAC69A624B983D7BF683D97ACC983163415D5DDDE9D6160000D09DC274596B345B5B6D6DED8E77DF7DF7CAF505E9679F7DF6C6540F17C5F2D61A0000D05D82748DD668B685E1C387FFD7CA952B5F5E478E7EBEB1B1B1A4451A0000E88E61BAAC359AAD2DCE7DBEFCF2CBE77696A2A74F9F7E61AA87F739471A0000E88E41BA466B34DBC2D1471FBDEFAC59B35E6A1FA257AD5A75CF800103E618B51B0000E8CE61BAAC359A6D61E4C89157AE4EAA07EC8E69A91E9E6BED000000DD3948D7688D665BA8ADADDD79F2E4C9CB2A297AFEFCF997A53A3827A65B3B000040770FD379ABB435C1D6565F5F7FE492254B5E5ABC787176CC31C73C5057577798B5020000F484205D2348B3AD8C1F3FFEAE51A346458F8849D6060000F4015996BDFA89279EB8E2D65B6F7DA9582C6693274FEE912582744F7DEF69BDAF9E366DDABC52A974B0FAD7F33EBF891327E6F52FFEAA7F0000D007A41073653A88CE162E5C982D5FBE3C5BB972A5B2954BACF758FF37DC70C3D2146C0E52FF7A5E99376F9EFA0700007D45B404C641B440BBEDCBFCF9F317A7207387FAA7A87F0000D08D45775A2DD1DDA76530059915EA9FA2FE0100403716E7480A11DDA7C4E7A1FE29EA1F0000F48220F3C273F3B327EEBC207B68CA597989DB314DF81064D43FF50F000004E97665D992B9D983D70DCFEEBBE6B4354A4C8B79028820A3FEA97F000020C85495A71FBA6AAD105329731EBA5A001164D43FF50F00000499EAF2707964A74126E60920828CFAA7FE0100802053551E9C3CA2D32013F304104146FD53FF0000409011640419F54FFD030000362DC8C428C99D05999827800832EA9FFA070000824C5579F4E6B19D06999827800832EA9FFA070000824C55F9EBDCFBB307AFFFD1DADD6AD3B49827800832EA9FFA070000824CBBF2E4F48BD70A32314DF81064D43FF58F8DF67AAB0000A0B70799152BB2476F396FED6EB5695ACC13400419F54FFD6383ED9FCAC2D6BF0000F4C620B36CC9DC6CE6CDCD9D9EA31AF3621921449051FFD43F3638440F15A601007A639059B1229BFF68297BE0DAEF771A622A25968965B50E0A32EA9FFAC77A43F4FE9DDC0700A0270799F5B5026A1D1464D43FF58FCD0AD1EB9B0E00404F0B321BD20AB8AED64181449051FFD43F36382C0BD30000BD21C86C6A88A91481449051FFD43F362A240BD300003D3DC828828CFAA7FEB1D542B4300DC02639EAA8A376F9F6B7BF7D68BF7EFD0AE96F31952753793195ACF56FDC2FB6CE3F3496B7D6E8D4D2A54B77BBEAAAABCE1A3B76EC7D679E79E6E261C3862D3FF1C4135747853AE184135E1E3A74E8F3679C71C6ECB3CE3AEBEAD34E3BEDABE921DB0BD2028420A3FE29DDABFE358E2BBFB7F19C5B5ED74742B430CDB69565DB0F3DEFBABF5BEFF7327D276BAFB862C7EA69830A93DEBCAEEFEA71E74F7F5594CEE6378C2EEFE103808D535757F7A5946D26A6B2B235346F6889E527C6E3AD45DADC7EFBED278C193366EEF1C71F9FA5F09C5D79E595D95D77DD953DFEF8E3D95FFFFAD72CC4DFB81FD363FEE9A79FBE7AE0C0812B53A0BEAE7FFFFEFF28482B828CFAA7FE75AD93C695DF585F28FD795D25968965D3EDC18DCDC5EF4669682ECE6828942E6ABB5F2836F4F2102D4CB3CDB47E4F6FCDC37273A9317DF7FE5855CE6D0BBD4DC5310D4DE563F3DB85625DC3E8A91F6C682A9DD5D854FC667A5CFFFA31C5FFB766489EF6F769B9FBA3B40FEA232E28BF765061DADBD2F33F38A830E5438DE75CBB5B63A1DC5CDF5C9E5829E9B987B47FAFF11AE931E33B0CE585E2FF74BAAD692A9DD359D06F3F6DC488113B74B4ECC64E872D10A0F74941F8B68D0CCF9D95DBE2F9ACD53EECFEFBEF3FF0DC73CF9D77DC71C765BFFFFDEFB3458B16651B23968FC7A540FD526363E315A942BD5590510469F54FFDEB1A279E7BE3AE0DCDA57B1A9BA77EB4A312F362999683E0D2412D07F1E9C0BBB97C485E0AA547D3FD13635E1F08D1C2345BDD69E3CAEF48DFC3FDE27BD738B6F4E1148A2F19D2543AB07E4CE9FD79504E41B7252C5EF1EA74FB99F891ABBE50BCBBB1A97470BA7F794B902E7F3BA69F3AAADC760C15BD4AD2FC071A0AE543A3C463EA9B26BFBB2D10379707A6F9B7A7607E7D0AD057A4F7F078FE98B153F649CBDF11E1FA94E6EBDFD9FEFD36164AFB4760EEE87FC97BB254B62D4DC5A111B82BF707158A7BB55F3EFECFF47C53DA2664D9F6F1C3412AB3D27B98143F046CD274E862471D75D46BFBF5EB372E85DFD5ED037143434376E9A597AEB30131E6C7721D84E9D5F1BCF1FCD6721F92EAC78E93264DBA2A02F445175D942D5BB62CDB1CF1F8789E54915E3CFCF0C30F116414415AFD53FFBA2848174A3745CB521C30AF59F203DD9B629974507E587E205D283D91A6CD8EDBAD654EE5761CACF781102D4CB355A5407B78FA7E4D4DDFBBA5116823489FDA5CFE4094FA42E9B4F8AEB62C57FAF71460FF50795CB428E7F39BCB3F4BDFE541E93B7CDC8811E59D2270A7D0FC8378BE784CFD98296FCF4B73B95F9AF65C7ABE33061526BD260FD84DA59111E0073795BE108136B609E9EFF4B4DC5F53B97148A1BC774B881FB14384DEF6413A9EEBB8F3AF7E7D87A13AB62929E477342F6F816F2A9D935E238BF75F999E9EEFE434EDDA78BDF4D8EF353697EB37653A74A5147677AFABABBBAF3A00F7EFDF3F3BFFFCF3B33973E66C54DE89E5E371F1F87681FADE781D6BBB6F84E85D2EB9E49299279F7C72F6C4134F645D299E2F85F3E503070E3C5390510469F54FFDEB9A201DAD5ED1C2B56699F2F64A90CE0F4A5B5ABF7E930E922FA82E71601FAD537D28440BD36C556B74ED6E0DD2D1821BDDB52BE73FB7FEF075712AD7A530FB8BC6E6E209E9F6BD29B0FE2E4ABAFD54C3D8E2A752401E9077016F2EFD389E2B6F752E94EF88DBF54DE59F44808D501DADD769DE7DE9B99A5279A87E6CF96BE931E7A765FE25BDEE49E9FDFC30A6B584E7299FAFB41CAF11A4E3F48F14E05BB61FE55D4E699EBA67A5A4307F4A9A3FB67A5A2CD3FAE3C1C096105FBA29027DEBC1E5F62D3FE64DF97CEB0F07DF881F16367A3A74A114A03F90CADCEAD03B72E4C8ECE9A79FDEACBC138F8FE76917A69F8ED7B3D67B79882E140A4B7EF0831F644B962CC9B68478DE61C386BD78E491475E2CC82882B4FAA7FE6D7E903E7DE44D6F4A7FE7A583D6AB5A4ABA9D0E6AD708D2CDC57FCBBB7F168AA3AA4B5AE6AE98D7C742B430CD563364DCD4DDE33B19E725E7E1B7658C82BFA4F2A71468E7572F1BE1390FB479902E5E1981B535B4DE19413A0F95634AEFAFB46AA7503D223DDFD995FB515A9EA758172DB8E9710BD2ED99F9362205E934EDD3B18D88D6EEFF0BD2A5A608BFED8374FD98299FA9743D6F0DE21756956865BF6F8D69ED4E1149F79F1E5428BF2B6EE7EFB5507AAA6D5E5369487AAD9F6EEC74B589AED2DA123DB7BA15FAAAABAEEAD2CC13CFD7AE75FA692DD3BD3744EF78C925973C1A213A0EFAB6A478FEA143873E3760C080330419459056FFD4BFCD0BD231B26F3A389E5675005BAECCAB0ED2E960F7B674307A6675C95BB4BA6790AE0EB9710588EF6CB7F95782E8E8798469B698FA4279582AA568158E96E908D28D85E297A3CB750CECD5D854FA651EB69BA6FC6B7E1E70A1F442FCCD7FE46A2E1522D8E6E1364ED7680DD2D1DA9BB73C4749CF9D97BC2B7579743CAE651B503E2A6FA94E613A4EDB8816F108E61176A3A5B912A4E3BCEAFC148FD6D6E4F6E748C7F661705371DFF6FFD7BABA768708D0E9B173DB962F14BF1E3F1C546FA3E2393676BA1A4557887396ABBB731F7DF4D1D93DF7DCB345324F3C6F3C7F75376FE74CF742714EF429A79CB2C55AA23B6A993EF6D8639F4F15EA1B828C2248AB7FEADFE606E9BCE5A9B5CB766941FB201DA3763734976B6294EE7C04EF42A96970D3D4F7A5107D409CC7D9CD43F4AFE2F7DED6BF9B1AA6D7F53CC2345B4C475DBB53F01D97B7528F99F2B1EA65D76C912EDDD7127EF300FC542548E7E70C174A37C488D8F9724DC541AD8395DD5519253B0FED85D2CD11C65B027AB121427DDE82DD543E3985EBEFB40C8256FA7974F5FEBFC0DB2E4837158F88AEE41B1BA4F3F985D2EFDB7E506809ECB7E5EF3D6D732AB73776BADA4457681D58ACAD257A4B85E8EA305DDD321DAFEF53E845D2077C500C2CD6D5E7446FC839D3871F7EF892DADADAB709328A20ADFEA97F9B16A4F303DEE8CA5D55E21CC3E8CA9D2F939F5B59BA31CECB8C03D2A13FBBEE0DF54DE5F3EAC74EF9527EBE653A608F6E9CDD304487EFB486DF6C33C2747588AE9423D7F3BAD025E2D253D541BAB5CBF4E5794B700AB6318858CB72B7BC2E0FCC79F82D5E1001B92A60FF3EBEC71194F3EF782CD3543E36BA3CB7B67A1F1F97B78A7995301DDB8638B738CEA78E20DDD2ADBBF4482C1B97DE6AB944D6A4D75407D4F8512DCED1AEDC6FB94EF5DA038E45F88E1E2D9DFDCFD13A9E5EF7F4351E13EFAF509C1981BF7A5C868D9D0E9BA3F51257AB2AA1F6EAABAFDE2A99275EA7AA557A954B63F5227189AB18557B5B38EFBCF3E6A50AD524C82882B4FAA7FE6D9C61E74FDEB9BA4B77D5417774DF7C30827404EA7440FAC568698A03F61805B7A59B673AC84E7F63B4DE2185D2C7E3B238DD304477168237264C77F4F85F76F278619AAE0DD1CD533F9ABE670F47B06CFD6E5E9CC2ED352DADC8E9FBD85CFE595C96AEF5C7B03DA2AB778CA61DE72C575A8AA38B739C531DDFF7182C2CDD2EAEABC477BDF571D746EB73DEFA9D426D04D2CABCF49E8EAC0EC28DA3A7FC63BCCF28D1ADBAF3FF270FE3B7C7A5B7DA5FD77A4354AE6BBFB9D36153555F273A0604DB9ADA0D40769B4FA317B8FDF6DB4F88D6E8E79F7F7E9B04E978DD238E386269FFFEFDFF5190510469F54FFDEBB3D6156237354C6F4C8816A6017AB1C30E3BEC8BD55DBA377774EE4D19CDBBBA8B77BC1F9F4A0F3766CC98B913274ECCB6A58B2FBEF8F154A1CE1764144146FD53FF84E88D08C5EB0AD39B12A28569805E2A658D8995101BD77BDE16E275AB5AA527FA547AB0E79F7FFE2D279C7042F6CC33CF6CD3209D5EFF95FEFDFB2FEC6D03490832828CFAA76C68FDEBC303E96C4C68DDD030BD39215A9806E86552CED83505D7959510BBB55BA3AB5BA5AB82F4CA785F3E9D1EEA4F7FFAD399C3860DCBBA83638F3D7656AA50FBF6905FB4CAA9D4083282B4FAA76C6EFD5BB060C19EB367CF7EF0EEBBEF5EF9C31FFEF0C73535353BF5D63AD94561757D61BA2B42B4300DD08BF64169FEA19500DBD0D0B04D334FBC7E55983ED427D8433537373F70E59557768B203D7EFCF87B5365FAEF1EF285AD54FE757E710519415AFD533AAB7F69B3B7E3CC993347AF58B16255653B98967BF9F2CB2F9F7BF4D147EFDB1BEB641786D4CEC2F40E5D18A28569805EB20F4AD39B2BCBFDE637BFD9A699275EBFEA3D37FB047BA833CF3C73F15D77DDD52D82F4B469D3EEEFD7AFDF553DEC0BBBCE2FAE202348AB7F4A47F5EFC9279FDC7FE1C2859D9E53336BD6AC97468E1C79656D6DEDCEBDA94E767138ED284C3FD2C5215A9806E805FBA0BABABA5265FEF4E9D3B769E689D7AFBC97785F3EC11EEAF4D34F5FBEB5AF1DDD99471E7924BA76DFD943BFB01D7E710519415AFD53AAEB5FF2A6C71E7BEC9A55AB56AD779BB83A498F59D6D8D8F89DDE5227B74028ED284C77758816A6017AF83E28FD9D5D99BEADB34FBC7ED57B9CED13ECA14E38E184D5CF3EFB6CB708D27FFDEB5F97A5CA34B7877F61D7F8E20A3282B4FAA754CAADB7DE9A2D5DBA74F9C66E1B972C59F2D2F8F1E3EFAAADADDDB3A7D7C92D1446A33B77FB96E8475AA77735611AA067EE83FE56B9BFADB34FBC7E558BF4F33EC11EEA88238EC85E7EF9E56E11A4D3FB787E03BE083DAA6CE920B362C58AEC2F7FF94BB66CD9B2F52E1B5FDA8E968BC7BFF0C20B1D3EE6A9A79E5AE3FE7DF7DDD725EF3BAE1D9E02C5560F32BDAD7E6DEDFA376FDEBCECE1871FDEA06567CC98912D5FBE7C83969D33674E7EE5802DF5B92F5CB8300FB19DCD5FB46851F6D0430FE5B767CD9A953DF7DC73F97BDFD0EFD686AEBB51A346658B172FDEE86D633C261EDBD3EB636D6D6DF6DAD7BE3642EED02EDC8DADAB457A43AE33BD2986F6B56D89A2284A6F2ADB3AFBC4EB57BD9F5724D21EEAF8E38F7FB9BBB448A783D9C77A418BF456ED5A1B81340E18CBE572F6873FFC21FBE8473FBA46F9FCE73FDFB66CFAACF36971501EA161D0A041D10B207FFCD4A953B3E38E3B2EBBFEFAEBD708D16F78C31BB25FFCE217F9FDABAFBE3ADB7EFBEDB3BBEFBE7B8DF710E779BCF7BDEFEDB08C1B37AEC3F7BDFFFEFB675FFEF2973B0DF05AA4BB57FD9B3F7F7E76E38D3766871C72485E87E27694E1C387671FFAD087DACA25975C922F1F977678FDEB5F9FFDF8C73FCEEBDA97BEF4A5B54A2C13CB46F7A65D77DD35FBA77FFAA7BC6EEEB3CF3E6B3C6794E6E6E67CD99FFDEC676BCDAB2E95D01BAFF9939FFCA4AD1C74D041D90E3BEC909D7DF6D96B4C7FF4D147F3E52FBDF4D2EC6D6F7B5B7E7BE79D77CE2EBFFCF26CEEDCB9F97723EA7757D5BF891327C6D509AE2F954A8B56AF5EBD6A03368BAFA4757FD931C71CF340FA5C27F5D016E9F65DBBB774B7EE47B67098D6220DD003F741D1F2AB459A2E75EAA9A73EDF5DCE919E3163C6F41E7C8EF4561FEC295ACBFEF77FFF373F588C8011C1E01DEF78471E0AA2C4F5C1FFE11FFE215F3602F39BDEF4A6B683CBC18307E7E1A5A9A929BFFF5FFFF55FD94E3BED943DF8E083F9F2D75C734D3E347F84930818713B824E3C7FDC8E505DDD9A17A30F5E78E1856B9477BEF39DF9F376F4DE6FB9E5963C689D76DA6982740FA87F175F7C7147AD7DD991471E99FDCBBFFC4B5EFFE2FE55575D95EF1C62F91FFDE84779EBE3EDB7DFBE46788DCBEDC5B28F3CF248DEEA1B3FAA7CEE739FCBBEF0852F64071F7C70FED85FFDEA5779FD881F77E27625CC0E1D3A34AF8711D8ABCBF7BEF7BDFC39E387A5582EAE4410F5F9AB5FFD6AA725969F346952F6F8E38F67A79F7E7AB6CB2EBB64C562718B06E94AFD4B3BCDC3860F1FBE705D838DAD5AB5EA9E186C2C7DAE7362F9DE5227BB308C767689AB8E46EDEEAA302D4403F4D07D9073A4E9723FF8C10F9EEE2EA3764F9932A5D80347EDDE66971F8A501207FF71A01821F91BDFF846F6BEF7BD2F9FF7D39FFE346FD9FBEC673F9BDF3FF7DC73F316B9783FD13D7BF6ECD9D9C9279F9CA5CF3F7FFC49279D94F5EFDF3F0FDCB17C049377BDEB5DF9F4C30F3F3C5F66C08001F9FD08C831BFFABD7CE0031FE830687516A4A3FCFCE73FCF5BBCA35BAF20DDFDEB5F84CDB3CE3A2B3F9DE0DFFEEDDFF2807BCC31C7E4F523EA5BFCE0F2B7BFFD2DFF31263EFBD849DC7BEFBD6B3DCF638F3DD616A4A3C53AEA6E3C77F4A8D86DB7DDB2F7BFFFFDD9BBDFFDEE7C9978CEB85DF93F22486FD77117DE3582F475D75D977DF8C31FCE9E7CF2C9BC44B7EE981FD32BD33EFEF18F6737DF7C73367AF4E8EC35AF794DDEDB22EA7104E98B2EBA285F261E3362C488FCBB74FFFDF77769FD8BD1B8D377EABC0913263CF7CA2BAFBC58B5297C3E85F70BD3BC39E9B33DB7078EDABDA197BFEAEA4B5F550F2CB6BEEB4C0BD100BD334877BA0F326A375D2E1D245EDD5DAE237DF6D9674FEC41D791DEA083C5ADD9B5FBD7BFFE755B908EE01CA1235A03E3FE902143B21D77DC31FBE0073F98972BAEB8227F5C848708D851E27EE5FD46508E10F3AD6F7D2BFBCA57BE92CF8BBF71FFEFFEEEEFDA827474FF8EFA132DD0F1FAD5E5EFFFFEEFF3F01DF3E3BCD3F6EF3DBA09C7F3460BB720DDBDEBDFCC9933F35303F6D8638FFCF38CCF6DFCF8F179888EF2B18F7D2C3BF1C413F3652B41BAFDF9F51D05E968C98EBA12ADD4D1653CDE6FB4427FE6339FC9C375FCD8F2EA57BFBAAD0744D4E9F821274E45B8EDB6DBD628D1CBE1D39FFE74F6DBDFFEB6ADBBF6BA42773C77E53DB5EFDA1DF3E3B488F81B3FF644EF8E58075BA2FEF5EBD76FEFFAFAFA19C982679F7DF6C6F45D8D1DFD7D31BD37D6C92E08A7EB0BD1DB6D81302D4403F4F07D90EB48D3E5D201EC57D201EBEAEE30D658FFFEFDEF4F9569DFDEB47EB756908E16C2AF7FFDEB79587EFBDBDFDE56A22B7665D93BEEB823EFEEFADDEF7E376F298CC7FDCFFFFC4F7EAE6BA9545A2B484717DA081BDFFFFEF7F379F1B8B81FD32B41FACF7FFE73B6E79E7BE6ADD7F137424E2C1BAD88713F5AFAE26F7557F02831605584F70828B14C842B41BAFBD6BF3815A0A3301AE73AD7D5D5E53FCE44D0DED8201D837AC58F3E51AFA23538CE853EF6D863F3DE15D1653C5ABAA37B78A5FE5C70C105F98F3F9D85E308C111A82BE1385AB8A3C74D74E18EF9F12340DCDF6BAFBDD60AD26F7EF39BF37398E339E25CEA9B6EBA297F4CB45A6FE9FA575353B3535A8FA7A7EDDFA2F81BF7FB5035DD9890BAA121BA2BC3B4100DD03BC2F6A195F01A8D38DB527D7DFDEAAA207DA84FA7871A3162C40EE9C075658C98BB2DCD9933E7E65491E6C7FB116436AC9C77DE79794B601C1C46E88856BD68058EF34DFBF5EB979D72CA296DE7484797D6FDF6DB2F0FAF71DE7304D8ED5ABBCE46088EE5DA07E9E872BBF7DE7BE75D6063DE273EF189FC7E048DEAAEDDD1C5FC939FFC64DE9537424C2C1BDDB5E3D7B657BDEA5579D86EFFDEE3F5E3B9E2F63FFFF33FE72DD78274F7AD7FD19DFBFCF3CFCF436FA544B8AD74ED8E9E0FD1721CA70C6C4C908EE5A35E45891F7D2224475D88201DF53846AAAE04E968118E501BE30244AB73A5443DFBC8473E9287DFA86B951F6536B4453ACE87AED4F1030E3860AB9C23BDAEED711FDD156D4858DDD810DD15615A8806E825FAF7EFBF6BCA1A2B2B0136063DDD16E275AB42F4CA785F3E9D1EECB4D34EBB2E5A62B6A5FFFCCFFF9C902AD3F982CC86971811BBB1B171ADAEDD71AE69B408D7D4D4E45DBA2BAD84712E68B45847D7D9E88A1D8F8B73542FBBECB23C8C5407E968BDFEE52F7F999708CADBB59EEF5C99561D2E6244E778AD0843D13219CB4637DD08D1D5AD7E9512AD83118E2210555AB523E047F75C41BAFBD6BFA83BBBEFBE7BDE721CE7E647E8AC04E9981FE7248F1C3972A38274E53259F1435EFC1814CF173F001D78E0817997EA1845BE12A46360B37505E34A39FAE8A3DB82740CA817F52A06418B7913264CC8EF57B748FFF18F7FCCBEF8C52F666F7DEB5B3B1DB5BBAB4697EF6BF5AF0BC3F4A686E8CD09D34234402F93B2C6C44A888D06826D215EB72A484FF4A9F4FC5F68FE71E0C0812F4537E16D61C9922577A48AF44CBC0F4166F3CF918ED6C3CAE05F77DE79E71ACBBFEE75AFCB434574AD8EF9D192172D7F312859254847B88EA0542995D1BEE36FF5F4582E9E73C182056D2127C2D576ADE797BEE52D6FC9C34CBC9FEACBFF4457EEB8F455F5FB8A20132D921D0D4E2548779F207DEDB5D7E6B723EC5682748CBA1DE733C7E71D01746383F4BEFBEE9BF78C886ED8115EE3079F18C13BEA49B43847F7F108B351D76330BCF8212706248B3A1CF7A3FEC5F3C50F3371BF32E0D8E69C23DD3E481F76D8611DFE28A4FE6DB530FD9DCD08D1EB0AD3470AD1007D47DA9F7FB112626390DDADDD2A1DAF575757D7D6AD3BDE8F4FA517686C6CBC2246AADD16D26B5F9E2A539320B37125AE995B39D7B912A4E3DACD719E6904E698FECD6F7E330F049556E90843718E73B41EC6FC18CD78C99225D9B469D3F2FB71F99FB8AC565CFEAA5222B8C4BCB89E74F5F4E86A1BE756470089D78DFF355A10B76BEDDA5D5F5F9FB73447508FEBFA46288A56EAE8B65B093BD597D08AAEE7D12A18ADE18274F70CD2712E7E74BD8E205B09D2871E7A68F6AFFFFAAF7977FD08B2EB0AD20B172E6CBB9456A50B760C44177532CEAF8F4B51459D8C1F84E2C795A83BF15AD105BCF21C11C0DFF39EF7E4CBC4F3C5E3B76B1D91BBFAB5E279A2C746B426C7F5A22B3F2CC5FDE8653165CA94B61F82CE3CF3CCBC1EC7FCF83FA377455C8A2B1E3376ECD8FCB5E25271EADF360BD3D521785342F4C63C8F100DD08BA5CC715B25C8464FBAAD295EAFAA35FA369F462F515B5BFBB6A38E3AEAC5AD7D5DB5E9D3A74797EE67E2F505998D2B1138E3803006499A376F5E1EA4E35CE7384F3A06088BF34963A0AF08099591973FF5A94FE5E79D56C24E848D1801396EC7E0648B172FEEF07AD5313FFEB69F1797D21A3468503E68D419679C912F1781A8D20A1DC124024974FF8EAE2C11C25E7CF1C50EFF9F08F4119E22A40BD2DD33487FED6B5FCB0373FC10D3BE6B77A5AC2B48C7359F635EE5FCF84A89A01CBD28E2DCEBE8761D3FB6C4B4A8D771BA405C76AB7DAB763C570C7016CF173FD04408EFECBD57C2F63DF7DCB3D6BCCA0F45F1A35374218F3103E27F8C1F952A3D35A24EC78F41EADF360FD3476EB7F9D7835ED7F308D100BD5C5D5DDD3E297BACAA04DAD8F76F0DF13A55217A55BC0F9F462F920E880F4907A6CB23D06C0DCF3CF3CCD454919E4AE51B82CCA60D00153F7C2C5DBAB4AD55375AEBE27CD3CA32D14258DDB5BAFAB11174A2752E6E4760896B0077D6F21DE795C6DF75BD9F78FD071E78200FC45BEB725682CCD6AB7F115E2B75205A71A3CEC40F24F1B77D7D897AD051BD5BBE7C79DBB5CA3B3A4DA1D26ADDBE15BBB3F714BD2D6214EE752D1325EA76FCF0D4511D8EEF40FC1F95EF45FBF9F1FDEA68BAFAB74DC2746F7A3D00B6917EFDFA8DABEEE21D3FB46F49F1FCD55DBAE3F57D0ABDD0C08103CF1C366CD88B71D0B725A503D319A9E2DE992AD5F70419459056FFD43FB661B815A201FA90A38E3AEAB529D0DE5B09B63150E9960AD3F1BCE9F55655B546DF1BAFEF53E8A58E3CF2C88B870E1DFADC966A997EE699676E88109D2AD22F0519459051FFD43FB661C815A201FAA09443764FE5E9EA96E91890B72BC5F355B744B7BEDEEED67E2F3760C08033060E1CF87C579F33DD7A4EF4ECDEDE122DC80832EA9F224877FBB02B4403F461298F7CA03A4C570620DBDCD1BCE3F1ED0616CB4374BC9EB5DE777EA9F9C6E1871FBEE4BCF3CE9B17E7166E8EE79E7BEEF6D6D1B99FE9CDE7440B32828CFAA7A87F3D224C0BD100545AA6EFAD0EBDD13A1D83E4C6556836462C1F8F6BD70A9DB53EBF96E83EF84BCD5BE3D254471C71C4D20B2FBCF0F1458B16BDBC11F5E9E5B973E7DE7CE699674E680DD04DF17C828C22C8A87FEA1FDB30FC0AD100B48973965B07206B1F80B3868686ECD24B2FCD07378D2B84C4A0A921FEC6FD981EF3EBEBEBD77A6C3C5F3CAF73A2FBB8FEFDFBFF63AA0CE7A720FCCC7FFCC77F3C357EFCF87BA64D9B76FF238F3C327BF1E2C52FA4FAB4EC99679E79E2A1871E9A9E0E16279F7DF6D913D363EE4F8F59108F8BC7F7C5F526C80832EA9F224877AB302D4403D0A1D64B63DDD64120DE94729B4B5CD1DEF6871D76D87EA962FCA45FBF7E57A54A7247D5B905F1F78E981EF363B9ED36FF9A9F828C22C8A87FEA1F5D11868568003624507F29659A89A9ACDCC8F01CCB4F8CC75B8B20C80832EA9FA2FEF586302D4403B0518E3AEAA85D52303EB45FBF7E85F4B798CA93A9542E65F562EBFD62EBFC4363796B0D04194146FD53D4BFDE12A6856800365B0ACB3555ADCF35D6080832828CFAA7A87FBD354C0BD1007455902E5705E9B23502828C20A3FE29EA5F6F0CD34234005D15A26B3A3827BAC69A0141469051FF14F5AF378569211A80AE0CD2E50E82B4566910640419F54F51FF7A4D981E2A4403D08521BA661D2375D7584320C80832EA9FA2FEF5F8301D07364234005D18A4CBEB08D25AA541901164D43F45FDEB15073CD633005DB54FA9D980EB47D7585320C80832EA9FA2FE09D200B0DD7A5BA3B54A832023C8A87F8AFA27480380FD0C08328A20ED7357FF1CE00080FD0C08328A20A3FEA97F38C001C07E060419459051FFD43F1CE000603F030832828CFAA708D20E7000B09F0104194146FD53D43F073800D8CF00828C20A3FE29EA9F031C00B09F01414611A47DEEEA9F031C00B09F0141461164D43FF50F073800D8CF40AF552C16572F5FBE5C88E806257D0EF3529059A1FE29EA9F031C00B09F816E6CDAB469F3162E5C28487483F2D4534F5D9682CC1DEA9FA2FE39C00100FB19E8C64AA5D2C137DC70C3D2F9F3E72FD632B8CD5A02E7CF9A356B420A31B3533948FD53D43F073800603F03DD5C1C3C474B542A2BE31CC99E562EBEF8E22C36183DF1BDB79695ADEBFF20F56F72A6A87F0E7000C07E06D8F21B8BB20D06E0000700EC67800DDB50D4C4C6A2B5D4582380031C00EC6700D6BDA1285705E9B2350238C001C07E06A0F38D44756BB45669C0010E00F633F633C07A3612E50E82B45669C0010E00F633001D6C203A6A8DD62A0D38C001C07E06A0930D44791D415AAB34E0000700FB1980AA8DC3BA5AA3B54A030E7000B09F0168B771286F4090D62A0D38C001C07E06C00603B0BD0200FB19C00603B0BD0200FB19C00603C0F60A00FB19C00603C0F60A00FB19C00603C0F60A00FB19C00603C0F60A00FB19001B0CC0F60A00EC67001B0CC0F60A00EC67001B0C00DB2B00EC67001B0C00DB2B00EC67001B0C00DB2BFA862CCB5EFDC4134F5C71EBADB7BE542C16B3C993272B5BB9A4F5BE7ADAB469F34AA5D2C16A24F633800D0680ED15DD5C0AD157A610972D5CB8305BBE7C79B672E54A652B9758EFB1FE6FB8E186A529581FA456623F03D86000D85ED18D454B7484388176DB97F9F3E72F4E41FA0EB512FB19C00603C0F68A6E2CBA736B89EE3E2DD32948AF502BB19F016C30006CAFE8C6E21C5D21B6FB94F83CD44AEC67001B0C00DB2B7A41907EE1B9F9D913775E903D34E5ACBCC4ED9826FC0AD2D8CF00361800B65708D2EDCAB22573B307AF1B9EDD77CD696B949816F30460411AFB19C00603C0F60A41BAAA3CFDD0556B85E84A99F3D0D502B0208DFD0C608301607B85205D5D1E2E8FEC3448C73C015890C67E06B0C100B0BD4290AE2A0F4E1ED169908E7902B0208DFD0C608301607B85202D480BD2D8CF00361800B657B069413A46E9EE2C48C73C015890C67E06B0C100B0BD4290AE2A8FDE3CB6D3201DF30460411AFB19C00603A06F6FAFB26CFBA1E75DF777EB5BACF19C5B5E577BC5153B564F1B5498F4E698DED9638E3B7FFAABA27436BF6174798F8D79ABF17AC3CE9FBCB35AB46583F45FE7DE9F3D78FD8FD6EED69DA6C53C015890C67E06B0C100E8D3DBAB93C695DF585F28DD9A87E5E6526343A1F4C7AA726E5BE86D2A8E69682A1F9BDF2E14EB1A464FFD604353E9ACC6A6E237D3E3FAD78F29FEBF3543F2B4BF4FCBDD1FA57D501F7141F9B5830AD3DE969EFFC14185291F6A3CE7DADD1A0BE5E6FAE6F2C44A49CF3DA4FD7B4DEF73707DA1784A87A1BC50FC9F34FFCF1D96A6D2399D05FDF6D3468C18B14347CB6EECF49E1CA4A33C39FDE2B582744C137E0569EC67001B0C803EBDBD3A6D5CF91D0DCDA5FD22EC368E2D7D3885E24B8634950EAC1F537A7F1E9453D06D098B57BC3ADD7EA6A1B9382305D9BB1B9B4A07A7FB97B704E9F2B763FAA9A3CA6FAD3C6FE3B8F27BD3FC071A0AE543A3C463EA9B26BFBB2D10379707A6F9B7A7607E7D0AD057A4F7F078FE98B153F649CBDF11E1FA94E6EBDFD9FEFD36164ADF6F6C2E1EDDD1FF128F6F6C9EFAD12829F40F4DCF3FBE727F50A1B857FBE5E3FF4CCF37A56D42966D1F3F1CA4322BBD8749F143C0264DEF0D417AC58AECD15BCE5BBB5B779A16F30460411AFB19C00603A0CF6EAF52A03D3C85D8A9290C2E8D401B41FAD4E6F207A2D4174AA745D06D59AEF4EF296CFFA1F2B86851CEE737977F9642EBA014AC8F1B31A2BC5304EE149A7F10CF178FA91F33E5ED79692EF74BD39E4BCF77C6A0C2A4D7E401BBA9343202FCE0A6D21722D046F84D7FA7A7E5FE9ACA8D430AE5BD237C37168A5FAE9408EFE97DFE67F5B453C716DFB356A86E2A1D1621BFA3FF396F816F2A9D939E2B8BF75F999EDEDBC969DAB5D1C29C1EFBBDC6E672FDA64CEFE9417AD992B9D9CC9B9B3B3D473AE6C53242B0208DFD0C608301D067B7576B74ED6E0DD2D1821BDDB52BE73FB7B6F05E9CCA7529ECFEA2B1B97842BA7D6F0AACBF8B926E3FD530B6F8A9149007E45DC09B4B3F8EE7CA5B9D0BE53BE2767D53F9271160235447EB759A775F7AAEA6541EAA1F5BFE5A7ACCF969997F49AF7B527A3F3F8C698D85299FCF0377A5A4909D967FA27A5A3CA661747997539AA7EE5929D1FD3B2D3BB67A5A2CD3FAE3C1C0D6E7BA29027DBE12A275395AC5D3EBB5FE70F08DF86161A3A7F7E420BD624536FFD152F6C0B5DFEF3444574A2C13CB6A9D16A4B19F016C3000FAE4F66AC8B8A9BBA750392FCE4BCEC36F737146BAFF9754FE9402EDFCEA65233CE7813B0FD2C52B23B0B686D63B2348E7A1724CE9FD9556ED14AA47A4E73BBB723F4ACBF314EBA205373D6E41BA3DF3F49137BD2982749AF6E9146EAF8AD6EE08D26BBCCFC2D44FA6E51F4BF36F896EDCD5F35A83F88555255AD9EF5B635AA17450BBFFE5E94185F2BBE276FE5E0BA5A7DAE6359586A4C0FED38D9DDE5383F4FA5AA1B54E0BD2D8CF00361800B65795005A280F4BA514ADC2D1321D41BAA50B75F1FE183CACB1A9F4CB3CC4364DF9D7FC3CE042E985F89BC2F3A8144E0BE971FB47892EE09520DDD24A5C3A272FE9B9F39277A52E8F8EC7B584D8F251794B750AD3718E75B48847308FB09BCA451D05E9FC5CEA1458E39CEE08FDEBFABFD6D5B53B44804EAF33F7FF9EBBF8F5F8E1A02A6497E33936767A4F0DD21BD20ABDAED669815890C67E06B0C100E853DBAB8EBA76A7E03B2E6FA51E33E563D5CBAED9225DBAAF25FCE601F8A94A90CECF192E946E8811B1F3E59A8A835A072BBBAB324A761EDA0BA59B238CB704F4624384FABC05BBA97C720AD7DF89C0FC7FC1B8FCED08AB95CB6FB504FED2F7373548E7F30BA5DFB7FDA0D034F9DDE9F56ECBDF7B73F180CAED8D9DDE5383F4A686E84A11880569EC67001B0C803EB5BD8A4B4F5507E9149E3F938FC8DD5C9A13C13606116B59EE96D7E581390FBFC50B22205705ECDF47908EA01CE722E7CB34958F8D16E4D656EFE3E3F25631AF12A6E31CE538B738CEA78E20DDD2ADBBF4482C1B97DE8A01CDF2E76B79BD99D5A362E7C1BCA5BBF665C79D7FF5EBD7FA9F9A4B27A5A07D6667FF73B48EA7C79FBEC663E2FDC5EBA4C01FA3866FEAF49E18A415411AFB19C00603C0F66A434374F3D48FA610FD7004CBD6707B710AB7D7B4B42297778A51ADE3DAD2F9BCD1E53DA2AB773E9A7673796084D5D6C7FC29CEA91E76FEE49DF381BF0AA5E2BA4A74056F7DDCB5D1FA9CB77EA7501B81B4322FBDA7232308B74EFFD5D09F5DF7860E0371BBD1B25BC3F8ED71E9ADF6D7B5DE10D152DE15D305694590DEC2DBAEB8DC5DEB6088382E066C3000DB2BAA65D9F65682202D48F75EADA796FC795DA5F28355BA3DB8B1B9F8DD28AD83225ED476BF506CF0EDB69F016C3000DB2B10A405E95EEFC4736FDCB5A1B9744FF48EE9A8C4BC5826968DC108A3874C0C86D8D05C3E242F85D2A3E9FE89ED47E5B79FB19F016C3000DB2B10A405E9DE1BA4E39AEE31227F8CFEBF46C9AF5F7F532C930F10985FBBBDF4449A363B6EB7963995DB3128A16FB8FD0C608301D85E81202D48F789207DDAB8F23BE21AF46B96296FAF04E958B661F4D40FA6FBBFC9073BAC2A3148624F1AF0CF7E06B0C100B0BD42905604E9CD0ED2A78FBCE94D71C9BD8642F9AA96926EC71500AA837473F1DFEA0BC5BBE37AF4D525062A8C79BEDDF633800D06607B0582B420DD6782F4A0C2A437A7003DAD323DAE1B5F99571DA4E39AED31A27F75C947EA17A4ED67001B0CC0F60A046941BAEF05E9D282FFEBB25D5AD03E48C7A8DD0DCDE59A18A53B1FC1BB506A1ADC34F57D29441F50DF5C3EDCB7DB7E06B0C1006CAF409016A4FB4C908EDB7957EEAA1297BF8BAEDCF932638B9F4ACBDD38A850DC2B5AA5E3DAF2F54DE5F3EAC74EF9524353714C9A775FFD98299FF10DB79F016C3000DB2B10A405E95E6DD8F99377AEEED25D1197B34AE5C108D211A81B0BE52F36164AFB8F1851DE294DBFB6BE50BA350278FC1DD2543A7048A1F4F186B153F6F10DB79F016C3000DB2B10A40569B09F016C30006CAF10A415411AFB19C00603C0F60A415AD902417AC488113BA8B5D8CF00361880ED95ED155BA65E9553A911A47B47905EB060C19EB367CF7EF0EEBBEF5EF9C31FFEF0C73535353BA9E5D8CF00361880ED157471BD6A2DEB0CD48274F70ED25996ED3873E6CCD12B56AC5895B54ACBBD7CF9E597CF3DFAE8A3F755D3B19F016C3000DB2BE8FA20BDCE402D4877DF20FDE4934FEEBF70E1C267B24ECC9A35EBA59123475E595B5BBBB31A8FFD0C608301D85E41D707E90E03B520DDFD8274F2A6C71E7BEC9A55AB5665EBB33A498F59D6D8D8F81DB51EFB19C00603B0BD822D13A4D708D48274F72AB7DE7A6BB674E9D2E5D9465AB264C94BE3C78FBFABB6B6764FB51FFB19C00603107814650B96AD15A41F7EF8E135EEDF71C71DD98A152BD65AEEC9279FDCA2EF63E1C2857958ED6CFEA2458BB2871E7A28BF3D6BD6ACECB9E79ECB962F5F9EFDE52F7FC9962D5BB645DFDBBC79F3B251A346658B172FDED81C9D3F261EAB4E2B9D157B5B409006804DFF8166AB77EDBEFAEAABB357BDEA556D01F6C61B6F8C7D7476DD75D7ADB1DC030F3C906DBFFDF6F9FC0B2EB820FBD4A73EB54619397264BEDCC48913B3C18307B795E38F3F3EFBD0873EB45679FCF1C7F350FC939FFCA4AD1C74D041D90E3BEC909D7DF6D96B4C7FF4D147F3E7BEF4D24BB3B7BDED6DF9ED9D77DE39BBFCF2CBB3B973E7E6EF77FAF4E95B7C5DC5FF76ECB1C75E5F2A9516AD5EBD7AD50664E857E6CF9F7FD931C71CF340FA5C2769910640900680AE0BD2DB64B0B1050B16E4A1F87DEF7B5F1E86E3F6673EF399ECDDEF7E777E3BE657961D346850F6E94F7F3ABF7DFBEDB76763C68CC9CB11471C9107D95FFCE217F9BC5FFFFAD7D9DE7BEF9DEDB4D34ED961871D967DF9CB5FCEBEF0852FE4A17A975D76C9E7C7F2D10A7EE59557E6CB7DF5AB5FEDB4C4B293264DCA83F7E9A79F9E3F47B158DC2641BA32D8585D5DDD61C3870F5FB8AEC1C656AD5A754F0C36963ED739B1BC5A0F80200D005D13A4B7E9E5AF227C4608DD6BAFBDB20F7EF0836D25827575388D2ED4BBEEBA6BF6BBDFFD2EFBEC673F9B5D76D965F9F43BEFBC33DB6DB7DDB24F7EF2936B7405BFF8E28BB337BDE94DF9EDEF7CE73BD91E7BEC913FEED5AF7E75F6F5AF7FBD2D4847ABF7873FFCE1BCCB78946815DFAEB535BC32EDE31FFF7876F3CD3767A3478FCE5EF39AD7E4ADE21FF8C007F2207DD14517E5CBC463468C1891EDB3CF3ED9FDF7DFBF5546ED8ED1B8070C1870DE8409139E7BE595575EACCAD0CFA7F576619A37277DB6E71AB51B00411A00BA663FB8CE00BDB583F4534F3DB5C6F4B85F1DA4BFFBDDEFE6F73FF1894FE40136CEA13EE18413F2601BA176C71D77CC860D1B96FDED6F7FCBE6CC99937DFFFBDFCF5EFFFAD767A552293BF2C823B3CF7DEE73595D5D5D1EAE23F0568274A5BB76DCEFACFCFCE73F6F7B5FEDBB76C7FCCF7FFEF3F9DF37BCE10DF97B9A3973E656BB8E74E8D7AFDFDEF5F5F5339205CF3EFBEC8D43860C29A5CFF6BE98AEA603204803C056B6B582F489279E989D76DA696D25026975908EF79102623E2DCE858EAEDBD1CAFCDBDFFE369F3F61C2843C3847E83DEFBCF3D608C2871F7E78DEAA1CE73FBFEE75AFCB4E39E594B58274B46ADF75D75D7917EE98175DBEE37EB494B70FD26F7EF39BF373952348C7B9D437DD7453FE9868B5DE9AD791AE565353B3535D5DDDE9E9F86651FC8DFB6A2F00823400F4C220FDD8638F65DFF8C637DA4A9C037DE08107B6DDAF6EDDEDDFBF7FDEFA1CE74E373535E561BBBEBEBEAD1C7AE8A16DDDBBABBB7647B08E30BDDF7EFB65AF7DED6BF3DB51E2DCE68D69918EF3A12390C7B4030E38609B9E23DD99112346ECA0D602204803402F0ED23178D755575D9507DB72B99CB7F656060D8BAEDA471D75547EFB97BFFC655BB0FDC8473E928D1D3B36FBDAD7BE969F1B1DE72CC7ED6F7DEB5B6B9C231D2DD47FFAD39FB24B2EB9243BEBACB3B2430E39247BE31BDF98DF8EF2C8238FB405E938FFFAB6DB6ECBDF4BBC46B470C7FDEA16E93FFEF18FD917BFF8C5ECAD6F7D6BA7A376BFF0C20BDB34480380200D00BD3848476B7384E0EBAFBF3EFFFB873FFC21EF76BDFFFEFB67175E78617E3B46D48EC1BC66CC98914F8BD1BA23D856AEE5FC9BDFFC260FC7D5CF1BDDB22BE72DBFE52D6FC94E3DF5D43C0047008FC1C6E2769438CF7A73CF916E1FA46394F0EAE505690004690010A4BBACC48060BBEFBE7BDE1DBB325858BCDE0D37DC908FDCDDD8D898BDE31DEFC807078B6B4D47C08E6B3CC728DBD1921DD7778E01C4221C57AEF71CE7298F1F3F3EEFF61DE73BCF9B372F6FE18E12ADDB9516EF2853A64CC9DF478CD41DAF15ADC971BDE808C5311A78DC8FE7AC2C1797E23AF3CC33F3201DF3E33DC7E067071F7C70FE9868258FD1C6A3DBB9200D80200D0082F41619682CCE778EDBFDFAF5CB5BA5B76B6D058EB01A236EDF7BEFBD79A08D56DE934E3A29EF6E1DCBD7D6D6E6E753B72F7139AAEAD7F8CB5FFE9277CFEEA8C479D5EDDFD3AC59B3F2D7BFE79E7BD69A57E95EFECD6F7E330FF6EF7AD7BBF2C01ED7948E4B6BC5BC77BEF39D6DADE582340082340008D25BB42C5FBE3C7BF1C517F3B2B55EB37D89CB674597EF65CB96AD352F02FDFCF9F3F3DBD5D7ACAE94A54B9776385D900640900600415AD94645900640900600415A11A40110A40140905604690004690010A415411A0041DA5A0000415A900600411A000469411A0004690010A415411A00411A00046945900640900600415A11A40110A40140905604690004696B01000469411A0004690010A405690010A40140905604690004690010A415411A00411A00046945900640900600415A11A40110A4AD050010A405690010A401409016A40140900600415A11A40110A40140905604690004690010A415411A00411A0004694590064090B61600409016A40140900600415A900600411A000469459006409006806EAE582CAE5EBE7CB910DB0D4AFA1CE6A520BD42AD04409006806E6CDAB469F3162E5C28C87683F2D4534F5D9682F41D6A25008234007463A552E9E01B6EB861E9FCF9F317F7E496E979F3E6F5E496E8F9B366CD9A9042F4EC540E522B0110A401A09B8BF0162DA1A9AC8C73747B5AB9F5D65BB351A3466513274ECC7AE2FB6F5DEF7708D10008D200C0169765D91B972E5DBA7CF1E2C5D9C08103AFB3460040900600D6E1B1C71EBB266B552A9516D5D5D51D66AD0080200D0074E0C9279FDC7FD5AA55951C9DAD5EBD7AD5F0E1C317D6D6D6EE6CED0080200D005449B979C7850B173E93B513D3060C18709E3504008234005065E6CC99A3B34E4C9830E1B97EFDFAED6D2D0180200D0024F3E7CFDF63C58A15AB3A0BD2AFBCF2CA8B83070F9E515353B393B50500823400F479B367CF7E305B8F1933662CA8ABAB3BDDDA0200411A00FAB4DADADA1DEFBEFBEE95EB0BD2CF3EFBEC8DE95860512C6FAD0180200D007DDAF0E1C3FF6BE5CA952FAF23473FDFD8D858D2220D0082340090C4B9CF975F7EF9DCCE52F4F4E9D32F4CC701F739471A00046900A0D5D1471FBDEFAC59B35E6A1FA257AD5A75CF800103E618B51B000469E8F36AAFB862C7534795DFBADE05B36CFB4185496FAEDC3D695CF98DD61EF44E23478EBC7275523D60774C4BC700E75A3B002048439FD7784EF11F1A0AE5ABE2764353E9AC8642E98FD5A5B1A9FCD57C5E73B9A6B1A9F4BBCAE3EA0BC5BB1BC64ED967D8F993771E31A2AC9B27F422B5B5B53B4F9E3C79592545CF9F3FFFB2B4FF9F13D3AD1D0010A4A14F3B6D5CF91DF5CDA5AF343497A60E6E2A7F2405E762DC1F52287DBC524E3CF7C65D5B8274E9C214A60F89DB439A4A0736148A33D3F27F4A65599AB79FB509BD4B7D7DFD914B962C7969F1E2C5D931C71CF3405D5DDD61D60A0008D2E040B9503A32955B53185E5CDF5C9ED858284D195228EFDD30BABC479453C716DF13CB4537EE149CEFAF1F5BFE5A7D53695C5AFE917C99B153F689F06D4D42EF347EFCF8BB468D1A95A57DFF246B03000469A05575D7EE08D229305FD9D2FA9C4AA1B4289FDE5CAE4F81FBE16885AE2F14FF234D7FBEBEB9744D04F008D2A9CCB526A1F7A9ADADDD33F6FBF1D7DA0000411A689577E96E2E3D9E9F0F9D827404EBCABC380FBA256C5FBB5BBA7D4A9AFFD3B89F96BD33FFDB5C9A5A7D1FB0DF0700EC50A1574B41787843A17C4B74EF8EEEDB2D2DD2A55FA5BF4D51D2ED05B1DCA04271AFB4CCFCC642F1BF1B9B4B8D69FA7DD18A9DFECE6EFD3BCBDA04FB7D00C00E15FA843546ED8E6EDACDE59AFA31A5F74719DC34F57D317D705371DF86A6F2C9F563A67C2C2E81D5BE05FA94E6A97BA6E53F676D82FD3E0060870ABD5E7DD3E477579F23DD58287E76C8B8A9BB574AC3E8F22E8DE3CAEF4D01FB47F9C0644DC531D1E53BBA7B579E2385EC33D2BCC1D626D8EF030076A8D0AB0D294CFD6443A1746F84E496409C5F47FA7FAB4B7DA17C7C4373F18014B60744A86E5DEE7B69DEED956EE1E9F68493C74E798B350AF6FB00801D2A00D8EF030076A80080FD3E00D8A10200F6FB0060870A00D8EF03801D2A0060BF0F0076A80080FD3E0060870A00F6FB00801D2A0060BF0F005B7587AA288AA2284ADF298E7E0000000000000000000000000000000000000000000000000000000000000000000080DCFF0797CC739D73D6B32D0000000049454E44AE426082, 1); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('fa9b683d-1c51-11ec-94ee-5ef70686b817', 1, 'flowTranslate.bpmn', 'fa9b683c-1c51-11ec-94ee-5ef70686b817', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220786D6C6E733A62706D6E323D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A64633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E222069643D226469616772616D5F666C6F775472616E736C61746522207873693A736368656D614C6F636174696F6E3D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2042504D4E32302E787364223E0A20203C70726F636573732069643D22666C6F775472616E736C61746522206E616D653D22E8BDACE58A9EE6B581E7A88B2220697345786563757461626C653D2274727565223E0A202020203C657874656E73696F6E456C656D656E74733E0A2020202020203C666C6F7761626C653A657865637574696F6E4C697374656E6572206576656E743D22656E642220636C6173733D22636F6D2E666C6F772E64656D6F2E636F6D6D6F6E2E666C6F772E6C697374656E65722E557064617465466C6F775374617475734C697374656E6572223E3C2F666C6F7761626C653A657865637574696F6E4C697374656E65723E0A202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C73746172744576656E742069643D224576656E745F316F756B386B6A223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D2241637469766974795F303870396B6E6722206E616D653D22E5BD95E585A52220666C6F7761626C653A61737369676E65653D22247B7374617274557365724E616D657D2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934353431313335343236373634382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A66616C73652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383938333631303822206C6162656C3D22E68F90E4BAA42220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F30386C67766F302220736F757263655265663D224576656E745F316F756B386B6A22207461726765745265663D2241637469766974795F303870396B6E67223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D2241637469766974795F31326F6C72303122206E616D653D22E8BDACE58A9E2220666C6F7761626C653A63616E64696461746555736572733D22247B7374617274557365724E616D657D2C61646D696E2220666C6F7761626C653A666F726D4B65793D227B2671756F743B666F726D49642671756F743B3A2671756F743B313434303934353431313335343236373634382671756F743B2C2671756F743B726561644F6E6C792671756F743B3A747275652C2671756F743B67726F7570547970652671756F743B3A2671756F743B444550542671756F743B7D223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A6F7065726174696F6E4C6973743E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383938343835353422206C6162656C3D22E5908CE6848F2220747970653D226167726565222073686F774F726465723D2230223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A202020202020202020203C666C6F7761626C653A666F726D4F7065726174696F6E2069643D223136333233383938353339353922206C6162656C3D22E8BDACE58A9E2220747970653D227472616E73666572222073686F774F726465723D2231223E3C2F666C6F7761626C653A666F726D4F7065726174696F6E3E0A20202020202020203C2F666C6F7761626C653A6F7065726174696F6E4C6973743E0A20202020202020203C666C6F7761626C653A7661726961626C654C6973743E3C2F666C6F7761626C653A7661726961626C654C6973743E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D22466C6F775F306E343566356A2220736F757263655265663D2241637469766974795F303870396B6E6722207461726765745265663D2241637469766974795F31326F6C723031223E3C2F73657175656E6365466C6F773E0A202020203C656E644576656E742069643D224576656E745F306C7A786E7738223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D22466C6F775F317338693965722220736F757263655265663D2241637469766974795F31326F6C72303122207461726765745265663D224576656E745F306C7A786E7738223E3C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F666C6F775472616E736C617465223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22666C6F775472616E736C617465222069643D2242504D4E506C616E655F666C6F775472616E736C617465223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F316F756B386B6A222069643D2242504D4E53686170655F4576656E745F316F756B386B6A223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223133322E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F303870396B6E67222069643D2242504D4E53686170655F41637469766974795F303870396B6E67223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223232302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F31326F6C723031222069643D2242504D4E53686170655F41637469766974795F31326F6C723031223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E302220783D223338302E302220793D223239302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D224576656E745F306C7A786E7738222069643D2242504D4E53686170655F4576656E745F306C7A786E7738223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233362E30222077696474683D2233362E302220783D223534322E302220793D223331322E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F30386C67766F30222069643D2242504D4E456467655F466C6F775F30386C67766F30223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136382E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223232302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F306E343566356A222069643D2242504D4E456467655F466C6F775F306E343566356A223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223332302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223338302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D22466C6F775F31733869396572222069643D2242504D4E456467655F466C6F775F31733869396572223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223438302E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223534322E302220793D223333302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('faa3f3be-1c51-11ec-94ee-5ef70686b817', 1, 'flowTranslate.flowTranslate.png', 'fa9b683c-1c51-11ec-94ee-5ef70686b817', 0x89504E470D0A1A0A0000000D494844520000024C0000017C08060000003DF6E4F3000012C84944415478DAEDDD796C55E5BA07E0A3C6391ABC0E51E3108FC744FF306AD43847FFF0E8F51AD118A002054B0A020E512243EE85EB05D43844A3880A18F530087A1D1A531447385CA2321A064183CA3C540A5806A52047D65DEF4A4B36A528A5B4DD6D9F277953BB67775FF6EF5BDF5AEBDB7FF90B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040BD254972C4D2A54BDF9E3E7DFA6F93274F4E3EFBEC33D5C895BEEFBBA64D9BB676CA9429B7EB3FFDA0FF00F2501A56EFA41F96C9BA75EB92CACACA64C78E1DAA912BDEF778FFA74E9DBA390DB05BF59FD27F007926B6ECE3C35270347D9595956D48036B96FE53FA0F20CFC46E105BF6F9B3A59F06D676FDA7F41F409E8963188445FE54FC3DF49FD27F00CD34B07ED954962C9DFD8F64D1E743B38AFF8ECB848CC0D27FFA0F4060A5B5B5624DB2F093FF4EE67FD86F8F8ACBE23A4123B0F49FFE0368F581B56A51E95E61555DAB174D1434024BFFE93F0081F5DD3F9FDA6760C575824660E93FFD07D0EA036BE16783F71958719DA01158FA4FFF01082C8125B0F49FFE033060FAE30FD1382B695F8115D7091A81A5FFF41F40AB0FAC1FBE7C719F8115D7091A81A5FFF41F40AB0FAC8D6B16240B3FFD9FBD7787A497C575824660E93FFD07D0EA032B6AD99CB17B05565C26640496FED37F00022B6AFBF6E487AF46ECBD3B24BD2CAE1334024BFFE93F80561D58B192F2F75F0EDFE73124719DD5960596FED37F00AD33B0D22DF7B21FA624DF7CFC5FFB0CABEA8ADBC46D6DED0B2CFDA7FF005A4D60FDD956BDAD7D81A5FFF41F40AB1F30EDCF56FD1F6DED0B1E81A5FFF41F408B0FAC030DABEA123C024BFFE93F80161F584A60E93FFDC7BE151515B5B9EBAEBBDA151414BC90FE9C9CD6B2B4B6A59554FD8CDF27575DDF2E6EEF5D23EF6CDEBCF9DF4A4B4B87BEF8E28BF3870C19B261C0800195BD7BF7DE158DDCAB57AF9D7DFBF6DD3270E0C09543870E9DD8AF5FBF7F4FEF72880193A01058FA4F1930FD998E1D3BFE3DCD9292B476540D8EF6B7E2F625717FEF224D6EE6CC99BD9E7FFEF9353D7BF64CD24152F2CE3BEF245F7FFD75B264C99264E3C68D49889FF17B5C1ED7F7EFDF7F577171F18E74E0F449A74E9DFE6AC0A40496FED37FD43250BA2A1DF0CCA8E320695F35231ECFBB4AA35BB060C17FBCFCF2CB6BEFB9E79EE4BDF7DE4BD6AF5F9FD445DC3EEE970E9C7EEBD3A7CFDB69239F24B094C0D27FFA8FA2A2A2A30A0A0A5E4A0739BB6A0E7C1E7AE8A164FCF8F17FB8611ED7C7ED6A1934ED8AC78DC7F72ED3E0D2BE3C6CD2A449A531501A33664CB275EBD6A43EE2FEF13869036F2B2C2CBC43602981A5FFF45FEB950E6ACE4C37A0E7E70E743A75EA948C1A352A59BD7A759DF2256E1FF78BFBD71838CD8BE7F16ED39083A536E3C68DFBFEBEFBEE4B962E5D9A1C4CF178E920ACB2B8B87888C052024BFFE9BF56B90BEEFCB4D6E40E6E9E7AEAA964D5AA55F5CA97B87F3C4E8D41D3AA783EEF3A0D32587AE185172A060D1A94545454240D211E77C08001DBBA76ED3A56602981A5FFF45FAB9B595A933BAB545A5A7A5033261EAFC66CD32A334D1CF4DD70E3C68DFB21064BF18FBB21C5E3F7EDDB7753E7CE9D070A2C25B0F49FFE6BF9E298A2DCDD70DDBA754BE6CE9DDB2019138F1B8F9FBB7BCE314D1C3471CCD2FDF7DFDF60334BB5CD3475EFDE7D4BDAC86D05961258FA4FFFB56C550778EF9E596AA8C152EEA02977A6299E5FD2536F6963DD1A07781FEC6396F6E798A6C2C2C28AF6EDDB9F2CB094C0D27FFAAF65AA5A3AE0F7EAC1CBC489131B2563E2797266997EB7E400F5164B07C4596C4D61C488116BD3461E26B094C0D27FFAAF65CA5D67290ECC6E4C350E049F21F13960B12865CC2E6DD9B2A549064CF1BC5DBA74D9DC1217B71458024BFFA9D63E60EAD0A1C38DB9BBE2EA7B36DC819C3D97BB6B2E5E8FE4E780C40ADE25252549531A3B76EC92B49147092C25B0F49FFE6B71B34B25D58395582FA929C4F3E6CC3295487EEA6CCB962D27F6EAD52B292F2F6FD20153FAFCFF4AB700D60D1E3CF85081A50496FED37F2D43FAB97E42EE77C335F6EC52EE2C53EE77CFC5EB3202A04E3EF8E08321F1DD70F9A07BF7EECBD346BEBA996C31FD33AD1B0496C0D27FAAB50E98F6A70FD3EBDBE57EDD4953AAF1352AED8C00A893E1C3877F135F949B0F468E1C19CBD83FD94C3E28AAFFD1FDE10786C01258FA4FB5E001D39FF6617AF9F0EADBBDF1C61B4D9A31F1FC39AF79B81100753264C8900DF12586F960DAB4690B0A0A0A4A9BD907C51F7E60082C81A5FF542B1830EDB30F3B76EC38A5FAFA3973E63469C6C4F357BF96785D4600D449FFFEFD2B1B7BEDA57D59BC7871EC929BDD4C3F286AFDC01058024BFFA9563460DAAB0FD39F2BAB2F6FEAAC89E7CF798D2B8D00A8935EBD7AEDFAF9E79FF362C0B471E3C6AD6913AF69E61F147B7C60082C81A5FF542B1C30E5F6E1AFD5BF3775D6C4F3E7CC306D3102A04EBA74E992ECDCB9332F064CE9EBD8B21FFF009B55B5D4C08AB5B3366FDEDCEC5E774BEBAFE6DE7F9B366D4A56AF5EBDC7655BB76E4D7EFCF1C7A4B2B2B2D6FB6CDBB62D59B46851F2CB2FBFE8BF66564D9D35F1FC39AFE75F4600D449CF9E3D77E6CB0CD3FAF5EB7F6C01334CCD6E9748ECD7FFDBDFFE566BBDF4D24BB5DEE7FAEBAF4F6EBAE9A666175A76C9E5574D98302169D3A64DB27DFBF6DD977DFCF1C7C921871C92CD06D4769F182CA5FF6BD94F334CF9DF87319363868916E1E1871FDE922FC7307DFBEDB7739AF1314CCDF6A0DB74A09A9D3D327AF4E83DEAF4D34F4F1E7FFCF15AEFF3D5575F25C71C734CD2AF5F3F81A5FF0EA8EEBDF7DEE4C4134F4C8E38E288E4DC73CF8DD5FE93F3CE3B2F39E59453B201535C16356EDCB8ECF6F139F5CD37DF24A5A5A5D980E9C30F3FCC7E8F8A3576F45F7EF6A163986831060D1AB42A5FCE92FBFCF3CF2737C3B3E45AC469DDE79F7F7E1642356B5F03A6A8679F7D3639F6D863F7DAA522B0F4DFFEFE2D8E3FFEF8E4CE3BEF4C9E7EFAE964D2A449C96BAFBD965C74D145C975D75D97FD7754BA2195DDFEEAABAFAEB547A362F15DFD979F7DE82C395A8CC183074FCC9775981E7BECB19266B40E538B583870C58A1549FCFD6346E9F5D75FDFA34E3BEDB4A473E7CED9F5CB972FDFEBBE77DC71471656B1189C0193FEAB6BC52C65CC24B56DDB3669D7AE5DF2D1471F25175C704172F4D14727279C7042F6DF51BD7BF7CE6E3F7FFEFC64E5CA95596F46DFC56C4159595936B8BAFBEEBB9365CB96E9BF3CEC43EB30D1620C1830E0E6FEFDFBEFCA8763BE3B75EAB4A0B9ACF4BDBFF27DC0142175CE39E724679C7146F63376C345189D75D659D9EF471E7964F673E2C4897BDCEFBBEFBE4B0E3DF4D06CCB3E6E1307E91A30E9BFBAD4D0A143B3DDBA31BB19FDD6A3478F24FD2CCAFA2FBE5D7EE4C89159458FC6ED2FBFFCF2ACDF1E79E491E4E4934FDEFD38D5334F1182FA2F2F075579B3D2F7830F3EB8CB4ADFD46786E9D0EEDDBBEF68EAEF925BBD7AF597690397F92EB9C6AF279E7822B9E4924BB22DF6D8EA8FF089DD6CB13576F8E187EF0EACDC8AE0BAF2CA2BB3FFBEF4D24BB399280326FD57979A316346045872E1851766C72E3DF7DC73C933CF3C931C76D861B1BB6477C5CC52D5DF2DDB6D77DB6DB765B34AD58F73F1C5176783A9E8D57C9F65F25D72BE4B8E66AE5FBF7E9F94949434E980E9D1471F9D9036F12881D5F815BB356EB8E1862C786217480453845804501CA754F3F6115A471D7554F2FEFBEFEF9EA58AD9A608400326FD57D75DC2B13B2E66990A0B0B93F1E3C72703070ECCEA965B6EC97A70E1C285D9CCD365975D969DA010B34B4F3EF9E4EEC788D9D161C38665B3A3F97E12426B1C3055CD3295540F56468D1AD5241913CF9B33602A91FC1CE816C05F8B8B8B7F8BB5759A424545C5ACB481CBE37508ACC6AF9F7EFA29E9DAB56B36508A908A9FB1051F67304580E59EF21D03EBD805174B0AE43EC68D37DE989C7AEAA9C9BC79F30496FEDBAFEAD6ADDBEE83B6A3D7E2F738E3EDDA6BAF4D468C18910D8CE260F0EAB597620634FD9CDA631770ACD914335271E6DC5B6FBD954C9F3E5DFFE5A10E1D3ADC583D58493FE71B7D96299EAF63C78EBB77C7C5EB91FC1CB03E7DFABC3D66CC98261930A5CFFDBF69130F13588D5F53A64CC98229D65C8AD7FAE9A79FEEDE2517BB4B62E6E88A2BAEC8D6BC79F3CD37B32DFE38483706D7359726B8E69A6B92934E3A2999356B96C0D27F7F5A0B162C4866CE9C991DB01DB34C71D9F7DF7F9FDC7CF3CD590F1E77DC71BBCF908BFE4A432EBBFC95575E497EFDF5D76CE62966A2E2C0F1DA4E4AD07F7937CB34A37AC012C7A835A678BE9CD9A519129F7A69DFBEFDC9454545DB1A7B9D8C3973E6C4AEB8F2787E81D5F815C7873CF0C003D98ACB113E1148B16BA37A5669F6ECD9C9EDB7DF9EEDB68B29ED385629B6F66B7BAC8A8A8A6CA629D6C71158FA6F7F2BCE82AB1E3055D7BBEFBE9B9C7DF6D9D95A4DF1FB175F7C919D39F7EAABAF66BFC72AF371365D0C969AD35A60AD79C0D4B163C7ABD2CFFADFAB072E7122496388E7C9192CFD1EAF43E2536F85858577F4ECD9B33282AF31949797FF5FDAC02BD26A2BB0F26301CBD825127F7FDFE5A5FF1A7397706D6B79C5203EB717376EDCB857BF6ED8B041FF35230505052FE5EE9A9B3B776E83664C3C7EEEAEB8787E49CF41535C5C3C64C08001DBE21F7743DABE7DFBB7E93F98D96933FFA7C052024BFFE9BF96AFA8A8E8A874E032AF7A0013C7AD35D4A0291E377DBEDF736697E6C5F34B790EAAAE5DBB8EEDDBB7EFA6869A692A2F2F9F1A83A5B4815F15584A60E93FFDD77AA49FFB67A6B52A77A6290EDA3F98E2F1726796AA9EEF4CE94E83E8DCB9F3C0E2E2E283FE3D7355C72CAD6CE9334B024B60E93F65C054BBF4F3FFFCDC4153F581E0F53D7B2EEE5FE300EF6CB014CFE75DA7A1B704DA161616568C1831626D9CBE5B1F9B366D9A5975365C794B3E664960092CFDA7F4DF7ECF34CDCB1DDCC46C539C5C12C7B4D571E1E3EC7E35669592AAC737B344A36D099C14A7FC77E9D265F3E8D1A397AC5FBF7E675DBEEE64CD9A355F0E19326442D54069583C9EC052024BFFE93FE298A2AA03C16B0E74B2AF518975E0E2CBE1972C59921DF41FE267FC1E97C7F535BEEEA4BA76C5E33A668926118B4AC64ADCE980A7BC478F1E2B468E1C3977DAB4690B162F5EBC72C3860DBFA47DBCB5BCBC7CE9A2458BE6A41F0A9FC517E9567D37DC4F71BF96B828A5C01258FA4FE9BF83B2617E55EE3A4DF5AC19960E205F1CD2A143876BD2867C221DC197A6CD392B675F74FC9C1597C7F571BBB87D6B7EB30496C0D27FCA8069BF074E7FAFFA1A951D751C24C5ED4BE2FEDE4510584A60E93FFDD72A141515B5490740EDD28DEF17D29F93D35A96D6B6AAC1D1B6AADF27575DDF2E6EEF5D0381A50496FED37F00024B092CFDA7FF000C980485C0D27FCA80094060092CFDA7F41F80C01258FA4FE93F008125B0F49FD27F00024B193029FD0720B094C0D27FFA0F40602981A5FFF41F80C052024BFFE93F00032625B0F49FFE034060092CFDA7F41F80C01258FA4FE93F008125B0F49FD27F00024B60E93FA5FF0004961258FA4FFF01082C25B0F49FFE036839264F9EBCABB2B25258E441A57F87B569606DD77F4AFF01E49969D3A6AD5DB76E9DC0C8835AB162C55B6960CDD27F4AFF01E4992953A6DC3E75EAD4CD6565651B6CE937D9967DD9F2E5CB27A461B532AD5BF59FD27F0079283E2463CB32AD1D710C836AF4DA51F5FEDFAAFFF483FE030000000000000000000000000000000000000000EAE5FF017CAAB3DCB95DE9AB0000000049454E44AE426082, 1); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_GE_PROPERTY +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_GE_PROPERTY`; +CREATE TABLE `ACT_GE_PROPERTY` ( + `NAME_` varchar(64) COLLATE utf8_bin NOT NULL, + `VALUE_` varchar(300) COLLATE utf8_bin DEFAULT NULL, + `REV_` int(11) DEFAULT NULL, + PRIMARY KEY (`NAME_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_GE_PROPERTY +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_GE_PROPERTY` VALUES ('batch.schema.version', '6.6.0.0', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('cfg.execution-related-entities-count', 'true', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('cfg.task-related-entities-count', 'true', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('common.schema.version', '6.6.0.0', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('entitylink.schema.version', '6.6.0.0', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('eventsubscription.schema.version', '6.6.0.0', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('identitylink.schema.version', '6.6.0.0', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('job.schema.version', '6.6.0.0', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('next.dbid', '1', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('schema.history', 'create(6.6.0.0)', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('schema.version', '6.6.0.0', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('task.schema.version', '6.6.0.0', 1); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('variable.schema.version', '6.6.0.0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_HI_ACTINST +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_ACTINST`; +CREATE TABLE `ACT_HI_ACTINST` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT '1', + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `ACT_ID_` varchar(255) COLLATE utf8_bin NOT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CALL_PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ACT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ACT_TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `ASSIGNEE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `START_TIME_` datetime(3) NOT NULL, + `END_TIME_` datetime(3) DEFAULT NULL, + `TRANSACTION_ORDER_` int(11) DEFAULT NULL, + `DURATION_` bigint(20) DEFAULT NULL, + `DELETE_REASON_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_HI_ACT_INST_START` (`START_TIME_`), + KEY `ACT_IDX_HI_ACT_INST_END` (`END_TIME_`), + KEY `ACT_IDX_HI_ACT_INST_PROCINST` (`PROC_INST_ID_`,`ACT_ID_`), + KEY `ACT_IDX_HI_ACT_INST_EXEC` (`EXECUTION_ID_`,`ACT_ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_HI_ACTINST +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_HI_ACTINST` VALUES ('150b9686-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', 'Flow_0so810a', NULL, NULL, '同意', 'sequenceFlow', NULL, '2021-09-24 09:31:03.827', '2021-09-24 09:31:03.827', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('150b9687-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', 'Event_04byxr7', NULL, NULL, NULL, 'endEvent', NULL, '2021-09-24 09:31:03.827', '2021-09-24 09:31:03.829', 2, 2, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('17547fdf-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Event_1psmisd', NULL, NULL, NULL, 'startEvent', NULL, '2021-09-24 09:38:17.157', '2021-09-24 09:38:17.157', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('17547fe0-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_00cexea', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:38:17.157', '2021-09-24 09:38:17.157', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('17547fe1-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_0nyla1r', '1754a6f2-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '合同录入', 'userTask', 'userD', '2021-09-24 09:38:17.157', '2021-09-24 09:38:17.178', 3, 21, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('1757db47-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_04kcajc', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:38:17.179', '2021-09-24 09:38:17.179', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('1757db48-1cd8-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1ucrh52', '1757db49-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '业务部领导审批', 'userTask', 'leaderTJ', '2021-09-24 09:38:17.179', '2021-09-24 09:38:34.591', 2, 17412, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('1b41a38a-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Event_1psmisd', NULL, NULL, NULL, 'startEvent', NULL, '2021-09-24 09:45:33.241', '2021-09-24 09:45:33.241', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('1b41a38b-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_00cexea', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:45:33.241', '2021-09-24 09:45:33.241', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('1b41a38c-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_0nyla1r', '1b41a38d-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '合同录入', 'userTask', 'userD', '2021-09-24 09:45:33.241', '2021-09-24 09:45:33.259', 3, 18, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('1b4488c2-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_04kcajc', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:45:33.260', '2021-09-24 09:45:33.260', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('1b4488c3-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_1ucrh52', '1b4488c4-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '业务部领导审批', 'userTask', 'leaderTJ', '2021-09-24 09:45:33.260', '2021-09-24 09:45:53.142', 2, 19882, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('21b8de9e-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_026fvnq', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:38:34.592', '2021-09-24 09:38:34.592', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('21b905af-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Gateway_09cdxtf', NULL, NULL, NULL, 'parallelGateway', NULL, '2021-09-24 09:38:34.593', '2021-09-24 09:38:34.593', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('21b92cc1-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_0zz0u9g', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:38:34.594', '2021-09-24 09:38:34.594', 3, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('21b92cc2-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '21b92cc0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_1yxqbe0', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:38:34.594', '2021-09-24 09:38:34.594', 4, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('21b953d3-1cd8-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_138m4nn', '21b953d4-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '工程部审批', 'userTask', 'admin', '2021-09-24 09:38:34.595', '2021-09-24 09:38:58.969', 5, 24374, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('21b97ae7-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '21b92cc0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_0tm3mph', '21b97ae8-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '造价部审批', 'userTask', 'admin', '2021-09-24 09:38:34.596', '2021-09-24 09:38:51.865', 6, 17269, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('22f48359-1d0e-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', 'Event_17n2rw9', NULL, NULL, NULL, 'startEvent', NULL, '2021-09-24 16:05:09.484', '2021-09-24 16:05:09.489', 1, 5, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('22f5e2ea-1d0e-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', 'Flow_00ldvag', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 16:05:09.493', '2021-09-24 16:05:09.493', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('22f5e2eb-1d0e-11ec-8336-3ae4f1d3c3af', 2, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', 'Activity_03kjurt', '22f9b37c-1d0e-11ec-8336-3ae4f1d3c3af', NULL, '报销单录入', 'userTask', 'userD', '2021-09-24 16:05:09.493', '2021-09-24 16:05:09.579', 3, 86, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('23030251-1d0e-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', 'Flow_0x9dx2t', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 16:05:09.579', '2021-09-24 16:05:09.579', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('23032962-1d0e-11ec-8336-3ae4f1d3c3af', 3, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', 'Activity_0ywxfwu', '23032963-1d0e-11ec-8336-3ae4f1d3c3af', NULL, '部门领导审批', 'userTask', 'leaderTJ', '2021-09-24 16:05:09.580', '2021-09-24 16:50:20.667', 2, 2711087, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('271e4969-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_026fvnq', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:45:53.142', '2021-09-24 09:45:53.142', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('271e707a-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Gateway_09cdxtf', NULL, NULL, NULL, 'parallelGateway', NULL, '2021-09-24 09:45:53.143', '2021-09-24 09:45:53.143', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('271e978c-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_0zz0u9g', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:45:53.144', '2021-09-24 09:45:53.144', 3, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('271e978d-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '271e978b-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_1yxqbe0', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:45:53.144', '2021-09-24 09:45:53.144', 4, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('271e978e-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_138m4nn', '271e978f-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '工程部审批', 'userTask', 'admin', '2021-09-24 09:45:53.144', '2021-09-24 09:46:12.596', 5, 19452, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('271ebea2-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '271e978b-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_0tm3mph', '271ebea3-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '造价部审批', 'userTask', 'admin', '2021-09-24 09:45:53.145', '2021-09-24 09:46:06.323', 6, 13178, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('2c04853b-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '21b92cc0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_1uvj3ds', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:38:51.865', '2021-09-24 09:38:51.865', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('2c04ac4c-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '21b92cc0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Gateway_0oy6ofl', NULL, NULL, NULL, 'parallelGateway', NULL, '2021-09-24 09:38:51.866', '2021-09-24 09:38:51.866', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('2ef98c46-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '271e978b-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_1uvj3ds', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:46:06.323', '2021-09-24 09:46:06.323', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('2ef9b357-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '271e978b-1cd9-11ec-acd8-3ae4f1d3c3af', 'Gateway_0oy6ofl', NULL, NULL, NULL, 'parallelGateway', NULL, '2021-09-24 09:46:06.324', '2021-09-24 09:46:06.324', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('3040a850-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_124e8z3', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:38:58.970', '2021-09-24 09:38:58.970', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('3040a851-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Gateway_0oy6ofl', NULL, NULL, NULL, 'parallelGateway', NULL, '2021-09-24 09:38:58.970', '2021-09-24 09:38:58.971', 2, 1, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('3040cf62-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_1kyhnlz', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:38:58.971', '2021-09-24 09:38:58.971', 3, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('3040cf63-1cd8-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1yuuyie', '3040cf64-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '财务部审批', 'userTask', 'leaderTJ', '2021-09-24 09:38:58.971', '2021-09-24 09:39:52.105', 4, 53134, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('32b6e26a-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_124e8z3', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:46:12.597', '2021-09-24 09:46:12.597', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('32b6e26b-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Gateway_0oy6ofl', NULL, NULL, NULL, 'parallelGateway', NULL, '2021-09-24 09:46:12.597', '2021-09-24 09:46:12.598', 2, 1, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('32b7097c-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_1kyhnlz', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:46:12.598', '2021-09-24 09:46:12.598', 3, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('32b7097d-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_1yuuyie', '32b7097e-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '财务部审批', 'userTask', 'leaderTJ2', '2021-09-24 09:46:12.598', '2021-09-24 09:47:39.942', 4, 87344, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('420171fe-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Event_17n2rw9', NULL, NULL, NULL, 'startEvent', NULL, '2021-09-24 09:32:19.258', '2021-09-24 09:32:19.258', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('420171ff-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Flow_00ldvag', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:32:19.258', '2021-09-24 09:32:19.258', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('42017200-1cd7-11ec-acd8-3ae4f1d3c3af', 2, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_03kjurt', '42019911-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, '报销单录入', 'userTask', 'userD', '2021-09-24 09:32:19.258', '2021-09-24 09:32:19.282', 3, 24, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('42051b86-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Flow_0x9dx2t', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:32:19.282', '2021-09-24 09:32:19.282', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('42051b87-1cd7-11ec-acd8-3ae4f1d3c3af', 3, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_0ywxfwu', '42054298-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, '部门领导审批', 'userTask', 'leaderTJ', '2021-09-24 09:32:19.282', '2021-09-24 09:32:30.145', 2, 10863, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('487eab7e-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Flow_18p3hqb', NULL, NULL, '同意', 'sequenceFlow', NULL, '2021-09-24 09:32:30.145', '2021-09-24 09:32:30.145', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('487ed28f-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Gateway_179zgnp', NULL, NULL, NULL, 'exclusiveGateway', NULL, '2021-09-24 09:32:30.146', '2021-09-24 09:32:30.147', 2, 1, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('487ef9a0-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Flow_058cmsb', NULL, NULL, '报销金额大于1000', 'sequenceFlow', NULL, '2021-09-24 09:32:30.147', '2021-09-24 09:32:30.147', 3, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('487ef9a1-1cd7-11ec-acd8-3ae4f1d3c3af', 3, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_0qay48u', '487ef9a2-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, '总经理审批', 'userTask', 'leader', '2021-09-24 09:32:30.147', '2021-09-24 09:33:02.293', 4, 32146, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('4fec6a4a-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_0di6qa6', NULL, NULL, '同意', 'sequenceFlow', NULL, '2021-09-24 09:39:52.105', '2021-09-24 09:39:52.105', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('4fec915b-1cd8-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1eewt01', '4fec915c-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '法务部审批', 'userTask', 'leaderLaw', '2021-09-24 09:39:52.106', '2021-09-24 09:40:52.217', 2, 60111, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('5ba837d8-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Flow_0ycx8fb', NULL, NULL, '同意', 'sequenceFlow', NULL, '2021-09-24 09:33:02.294', '2021-09-24 09:33:02.294', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('5ba837d9-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', 'Event_0nvjxgh', NULL, NULL, NULL, 'endEvent', NULL, '2021-09-24 09:33:02.294', '2021-09-24 09:33:02.295', 2, 1, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('66c6d394-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_0di6qa6', NULL, NULL, '同意', 'sequenceFlow', NULL, '2021-09-24 09:47:39.943', '2021-09-24 09:47:39.943', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('66c6d395-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_1eewt01', '66c6d396-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '法务部审批', 'userTask', 'leaderLaw', '2021-09-24 09:47:39.943', '2021-09-24 09:48:03.392', 2, 23449, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('7138d683-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Event_17n2rw9', NULL, NULL, NULL, 'startEvent', NULL, '2021-09-24 17:54:43.245', '2021-09-24 17:54:43.246', 1, 1, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('7138fd94-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Flow_00ldvag', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 17:54:43.246', '2021-09-24 17:54:43.246', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('7138fd95-1d1d-11ec-8336-3ae4f1d3c3af', 2, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Activity_03kjurt', '7138fd96-1d1d-11ec-8336-3ae4f1d3c3af', NULL, '报销单录入', 'userTask', 'userD', '2021-09-24 17:54:43.246', '2021-09-24 17:54:43.277', 3, 31, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('713ddf9b-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Flow_0x9dx2t', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 17:54:43.278', '2021-09-24 17:54:43.278', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('713ddf9c-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Activity_0ywxfwu', '713e06ad-1d1d-11ec-8336-3ae4f1d3c3af', NULL, '部门领导审批', 'userTask', NULL, '2021-09-24 17:54:43.278', NULL, 2, NULL, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('719d8e5f-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', '719d8e5e-1cd7-11ec-acd8-3ae4f1d3c3af', 'Event_1psmisd', NULL, NULL, NULL, 'startEvent', NULL, '2021-09-24 09:33:39.134', '2021-09-24 09:33:39.134', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('719d8e60-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', '719d8e5e-1cd7-11ec-acd8-3ae4f1d3c3af', 'Flow_00cexea', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:33:39.134', '2021-09-24 09:33:39.134', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('719d8e61-1cd7-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', '719d8e5e-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_0nyla1r', '719d8e62-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, '合同录入', 'userTask', NULL, '2021-09-24 09:33:39.134', '2021-09-24 09:34:08.588', 3, 29454, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('72f394e9-1d14-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', 'Flow_18p3hqb', NULL, NULL, '同意', 'sequenceFlow', NULL, '2021-09-24 16:50:20.676', '2021-09-24 16:50:20.676', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('72f3bbfa-1d14-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', 'Gateway_179zgnp', NULL, NULL, NULL, 'exclusiveGateway', NULL, '2021-09-24 16:50:20.677', '2021-09-24 16:50:20.678', 2, 1, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('72f3e30b-1d14-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', 'Flow_1qigakr', NULL, NULL, '报销金额小于1000', 'sequenceFlow', NULL, '2021-09-24 16:50:20.678', '2021-09-24 16:50:20.678', 3, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('72f3e30c-1d14-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', 'Event_0nvjxgh', NULL, NULL, NULL, 'endEvent', NULL, '2021-09-24 16:50:20.678', '2021-09-24 16:50:20.679', 4, 1, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('73c0c759-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', 'Flow_0zmsn3x', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:40:52.217', '2021-09-24 09:40:52.217', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('73c163a5-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c1157e-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '73c163a6-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '法务部会签', 'userTask', 'userB', '2021-09-24 09:40:52.221', '2021-09-24 09:41:55.361', 2, 63140, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('73c18aba-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c13c8f-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '73c18abb-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '法务部会签', 'userTask', 'userC', '2021-09-24 09:40:52.222', '2021-09-24 09:42:14.512', 3, 82290, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('73c18abf-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c13c90-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '73c18ac0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '法务部会签', 'userTask', 'leaderLaw', '2021-09-24 09:40:52.222', '2021-09-24 09:41:36.323', 4, 44101, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('74c10343-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_0zmsn3x', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:48:03.393', '2021-09-24 09:48:03.393', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('74c12a5d-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10348-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '74c12a5e-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '法务部会签', 'userTask', 'leaderLaw', '2021-09-24 09:48:03.394', '2021-09-24 09:48:12.066', 2, 8672, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('74c12a61-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10349-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '74c15172-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '法务部会签', 'userTask', 'userC', '2021-09-24 09:48:03.394', '2021-09-24 09:49:14.528', 3, 71134, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('7a4309f6-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '7a4294c2-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '7a4309f7-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '法务部会签', 'userTask', 'admin', '2021-09-24 09:41:03.137', '2021-09-24 09:43:49.221', 1, 166084, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('832c0853-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', '719d8e5e-1cd7-11ec-acd8-3ae4f1d3c3af', '817c52e168a14ade88f104c0d6c43755', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:34:08.589', '2021-09-24 09:34:08.589', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('832c0854-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', '719d8e5e-1cd7-11ec-acd8-3ae4f1d3c3af', 'Event_12ajo3d', NULL, NULL, NULL, 'endEvent', NULL, '2021-09-24 09:34:08.589', '2021-09-24 09:34:08.590', 2, 1, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('8b4134b9-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '8b410da5-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '8b4134ba-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '法务部会签', 'userTask', 'userB', '2021-09-24 09:48:41.143', '2021-09-24 09:48:54.255', 1, 13112, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('9f2844af-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '9f2844ae-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_0jyv1zb', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:49:14.534', '2021-09-24 09:49:14.534', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('9f2844b0-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '9f2844ae-1cd9-11ec-acd8-3ae4f1d3c3af', 'Gateway_1m5fruz', NULL, NULL, NULL, 'exclusiveGateway', NULL, '2021-09-24 09:49:14.534', '2021-09-24 09:49:14.535', 2, 1, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('9f286bc1-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '9f2844ae-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_1f8yxov', NULL, NULL, '同意人数大于40%', 'sequenceFlow', NULL, '2021-09-24 09:49:14.535', '2021-09-24 09:49:14.535', 3, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('9f286bc2-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '9f2844ae-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_1h3pnxy', '9f286bc3-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '总经理审批', 'userTask', 'leader', '2021-09-24 09:49:14.535', '2021-09-24 09:49:45.793', 4, 31258, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('b1ca2a78-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '9f2844ae-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_1a3qclm', NULL, NULL, '同意', 'sequenceFlow', NULL, '2021-09-24 09:49:45.794', '2021-09-24 09:49:45.794', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('b1ca2a79-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '9f2844ae-1cd9-11ec-acd8-3ae4f1d3c3af', 'Event_12ajo3d', NULL, NULL, NULL, 'endEvent', NULL, '2021-09-24 09:49:45.794', '2021-09-24 09:49:45.794', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('c8b7005f-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005e-1cd9-11ec-acd8-3ae4f1d3c3af', 'Event_1ouk8kj', NULL, NULL, NULL, 'startEvent', NULL, '2021-09-24 09:50:24.256', '2021-09-24 09:50:24.256', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('c8b70060-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005e-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_08lgvo0', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:50:24.256', '2021-09-24 09:50:24.256', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('c8b70061-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005e-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_08p9kng', 'c8b70062-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '录入', 'userTask', 'admin', '2021-09-24 09:50:24.256', '2021-09-24 09:50:24.273', 3, 17, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('c8b99877-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005e-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_0n45f5j', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:50:24.273', '2021-09-24 09:50:24.273', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('c8b9bf88-1cd9-11ec-acd8-3ae4f1d3c3af', 4, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005e-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_12olr01', 'c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '转办', 'userTask', 'leaderHR', '2021-09-24 09:50:24.274', '2021-09-24 09:51:06.959', 2, 42685, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('dd42d1d2-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', 'dd42d1d1-1cd8-11ec-acd8-3ae4f1d3c3af', '04daf3f805bc4e2898c586df4fdb97a9', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:43:49.230', '2021-09-24 09:43:49.230', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('dd42d1d3-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', 'dd42d1d1-1cd8-11ec-acd8-3ae4f1d3c3af', 'Event_12ajo3d', NULL, NULL, NULL, 'endEvent', NULL, '2021-09-24 09:43:49.230', '2021-09-24 09:43:49.230', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('e22af662-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005e-1cd9-11ec-acd8-3ae4f1d3c3af', 'Flow_1s8i9er', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:51:06.959', '2021-09-24 09:51:06.959', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('e22b1d73-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005e-1cd9-11ec-acd8-3ae4f1d3c3af', 'Event_0lzxnw8', NULL, NULL, NULL, 'endEvent', NULL, '2021-09-24 09:51:06.960', '2021-09-24 09:51:06.960', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('e7ad5c3f-1cd6-11ec-acd8-3ae4f1d3c3af', 1, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', 'Event_1c9ukkq', NULL, NULL, NULL, 'startEvent', NULL, '2021-09-24 09:29:47.712', '2021-09-24 09:29:47.717', 1, 5, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('e7ae6db0-1cd6-11ec-acd8-3ae4f1d3c3af', 1, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', 'Flow_05fy9wh', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:29:47.719', '2021-09-24 09:29:47.719', 2, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('e7ae94c1-1cd6-11ec-acd8-3ae4f1d3c3af', 2, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', 'Activity_0sc2yuf', 'e7b1c912-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, '请假录入', 'userTask', 'userD', '2021-09-24 09:29:47.720', '2021-09-24 09:29:47.780', 3, 60, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('e7b7e397-1cd6-11ec-acd8-3ae4f1d3c3af', 1, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', 'Flow_0pme0vr', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 09:29:47.781', '2021-09-24 09:29:47.781', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('e7b80aa8-1cd6-11ec-acd8-3ae4f1d3c3af', 3, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', 'Activity_1jw5u20', 'e7b80aa9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, '部门领导审批', 'userTask', 'leaderTJ', '2021-09-24 09:29:47.782', '2021-09-24 09:30:12.027', 2, 24245, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('f62d0f9f-1cd6-11ec-acd8-3ae4f1d3c3af', 1, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', 'Flow_1hbob37', NULL, NULL, '同意', 'sequenceFlow', NULL, '2021-09-24 09:30:12.037', '2021-09-24 09:30:12.037', 1, 0, NULL, ''); +INSERT INTO `ACT_HI_ACTINST` VALUES ('f62d36b0-1cd6-11ec-acd8-3ae4f1d3c3af', 3, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', 'Activity_0olxatv', 'f62d36b1-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'HR审批', 'userTask', 'userA', '2021-09-24 09:30:12.038', '2021-09-24 09:31:03.826', 2, 51788, NULL, ''); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_HI_ATTACHMENT +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_ATTACHMENT`; +CREATE TABLE `ACT_HI_ATTACHMENT` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `DESCRIPTION_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `URL_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `CONTENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TIME_` datetime(3) DEFAULT NULL, + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_HI_COMMENT +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_COMMENT`; +CREATE TABLE `ACT_HI_COMMENT` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TIME_` datetime(3) NOT NULL, + `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ACTION_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `MESSAGE_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `FULL_MSG_` longblob, + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_HI_COMMENT +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_HI_COMMENT` VALUES ('15061845-1cd7-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:31:03.791', NULL, 'f62d36b1-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'userA_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('21b3123d-1cd8-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:38:34.554', NULL, '1757db49-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderTJ_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('27198e78-1cd9-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:45:53.111', NULL, '1b4488c4-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderTJ_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('303a3fae-1cd8-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:38:58.928', 'userD', '21b953d4-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'admin_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('32b29ca9-1cd9-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:46:12.569', NULL, '271e978f-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'admin_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('48797b5c-1cd7-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:32:30.111', NULL, '42054298-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderTJ_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('4fe76138-1cd8-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:39:52.072', 'userD', '3040cf64-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderTJ_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('5ba3a3f6-1cd7-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:33:02.264', 'userD', '487ef9a2-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leader_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('66c218a3-1cd9-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:47:39.912', NULL, '32b7097e-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderTJ2_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('72ea6d27-1d14-11ec-8336-3ae4f1d3c3af', 'event', '2021-09-24 16:50:20.616', NULL, '23032963-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderTJ_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('73bb4910-1cd8-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:40:52.181', NULL, '4fec915c-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderLaw_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('74bc484a-1cd9-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:48:03.362', NULL, '66c6d396-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderLaw_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('b1c60bc7-1cd9-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:49:45.767', NULL, '9f286bc3-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leader_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('d2ab382d-1cd9-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:50:40.956', 'userD', 'c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'admin_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('d2afa500-1cd9-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:50:40.985', 'userD', 'c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderHR_|_assignee', NULL); +INSERT INTO `ACT_HI_COMMENT` VALUES ('f6245d0d-1cd6-11ec-acd8-3ae4f1d3c3af', 'event', '2021-09-24 09:30:11.980', 'userD', 'e7b80aa9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'AddUserLink', 'leaderTJ_|_assignee', NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_HI_DETAIL +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_DETAIL`; +CREATE TABLE `ACT_HI_DETAIL` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ACT_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin NOT NULL, + `VAR_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REV_` int(11) DEFAULT NULL, + `TIME_` datetime(3) NOT NULL, + `BYTEARRAY_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `DOUBLE_` double DEFAULT NULL, + `LONG_` bigint(20) DEFAULT NULL, + `TEXT_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `TEXT2_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_HI_DETAIL_PROC_INST` (`PROC_INST_ID_`), + KEY `ACT_IDX_HI_DETAIL_ACT_INST` (`ACT_INST_ID_`), + KEY `ACT_IDX_HI_DETAIL_TIME` (`TIME_`), + KEY `ACT_IDX_HI_DETAIL_NAME` (`NAME_`), + KEY `ACT_IDX_HI_DETAIL_TASK_ID` (`TASK_ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_HI_ENTITYLINK +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_ENTITYLINK`; +CREATE TABLE `ACT_HI_ENTITYLINK` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `LINK_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` datetime(3) DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PARENT_ELEMENT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REF_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REF_SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REF_SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ROOT_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ROOT_SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HIERARCHY_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_HI_ENT_LNK_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`,`LINK_TYPE_`), + KEY `ACT_IDX_HI_ENT_LNK_ROOT_SCOPE` (`ROOT_SCOPE_ID_`,`ROOT_SCOPE_TYPE_`,`LINK_TYPE_`), + KEY `ACT_IDX_HI_ENT_LNK_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`,`LINK_TYPE_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_HI_IDENTITYLINK +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_IDENTITYLINK`; +CREATE TABLE `ACT_HI_IDENTITYLINK` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `GROUP_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` datetime(3) DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_HI_IDENT_LNK_USER` (`USER_ID_`), + KEY `ACT_IDX_HI_IDENT_LNK_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_HI_IDENT_LNK_SUB_SCOPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_HI_IDENT_LNK_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_HI_IDENT_LNK_TASK` (`TASK_ID_`), + KEY `ACT_IDX_HI_IDENT_LNK_PROCINST` (`PROC_INST_ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_HI_IDENTITYLINK +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('1505f133-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'userA', 'f62d36b1-1cd6-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:31:03.789', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('15061844-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userA', NULL, '2021-09-24 09:31:03.791', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('17547fda-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'starter', 'userD', NULL, '2021-09-24 09:38:17.157', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('1754a6f3-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'userD', '1754a6f2-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:38:17.158', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('1754a6f4-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:38:17.158', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('17576616-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:38:17.176', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('1758025a-1cd8-11ec-acd8-3ae4f1d3c3af', '1440964519391137792', 'candidate', NULL, '1757db49-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:38:17.180', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('1b41a385-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'starter', 'userD', NULL, '2021-09-24 09:45:33.241', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('1b41a38e-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'userD', '1b41a38d-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:45:33.241', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('1b41a38f-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:45:33.241', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('1b441391-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:45:33.258', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('1b4488c5-1cd9-11ec-acd8-3ae4f1d3c3af', '1440964519391137792', 'candidate', NULL, '1b4488c4-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:45:33.260', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('21b2eb2b-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderTJ', '1757db49-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:38:34.553', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('21b3123c-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leaderTJ', NULL, '2021-09-24 09:38:34.554', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('21b953d5-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'candidate', 'admin', '21b953d4-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:38:34.595', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('21b953d6-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'admin', NULL, '2021-09-24 09:38:34.596', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('21b97ae9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'admin', '21b97ae8-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:38:34.596', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('22f3c004-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'starter', 'userD', NULL, '2021-09-24 16:05:09.480', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('22fa76cd-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'assignee', 'userD', '22f9b37c-1d0e-11ec-8336-3ae4f1d3c3af', '2021-09-24 16:05:09.523', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('22fa9dde-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 16:05:09.524', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('23023f00-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 16:05:09.574', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('23035074-1d0e-11ec-8336-3ae4f1d3c3af', '1440964519391137792', 'candidate', NULL, '23032963-1d0e-11ec-8336-3ae4f1d3c3af', '2021-09-24 16:05:09.581', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('27196766-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderTJ', '1b4488c4-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:45:53.110', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('27198e77-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leaderTJ', NULL, '2021-09-24 09:45:53.111', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('271e9790-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'candidate', 'admin', '271e978f-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:45:53.144', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('271ebea1-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'admin', NULL, '2021-09-24 09:45:53.145', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('271ebea4-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'admin', '271ebea3-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:45:53.145', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('2c04371a-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:38:51.863', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('2ef91715-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:46:06.320', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('303a189d-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'admin', '21b953d4-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:38:58.927', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('30400c0f-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:38:58.966', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('3040cf65-1cd8-11ec-acd8-3ae4f1d3c3af', '1440964519395332096', 'candidate', NULL, '3040cf64-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:38:58.971', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('3040cf66-1cd8-11ec-acd8-3ae4f1d3c3af', '1440964519391137792', 'candidate', NULL, '3040cf64-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:38:58.971', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('32b27598-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'admin', '271e978f-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:46:12.568', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('32b7308f-1cd9-11ec-acd8-3ae4f1d3c3af', '1440964519395332096', 'candidate', NULL, '32b7097e-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:46:12.599', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('32b73090-1cd9-11ec-acd8-3ae4f1d3c3af', '1440964519391137792', 'candidate', NULL, '32b7097e-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:46:12.599', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('420171f9-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'starter', 'userD', NULL, '2021-09-24 09:32:19.258', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('42019912-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'userD', '42019911-1cd7-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:32:19.259', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('42019913-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:32:19.259', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('4204cd65-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:32:19.280', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('42054299-1cd7-11ec-acd8-3ae4f1d3c3af', '1440964519391137792', 'candidate', NULL, '42054298-1cd7-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:32:19.283', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('48792d3a-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderTJ', '42054298-1cd7-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:32:30.109', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('48797b5b-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leaderTJ', NULL, '2021-09-24 09:32:30.111', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('487f20b3-1cd7-11ec-acd8-3ae4f1d3c3af', '1440911410581213416', 'candidate', NULL, '487ef9a2-1cd7-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:32:30.148', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('4fe73a27-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderTJ', '3040cf64-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:39:52.071', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('4febf519-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:39:52.102', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('4fec915d-1cd8-11ec-acd8-3ae4f1d3c3af', '1440964387979399168', 'candidate', NULL, '4fec915c-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:39:52.106', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('5ba37ce4-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leader', '487ef9a2-1cd7-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:33:02.263', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('5ba3a3f5-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leader', NULL, '2021-09-24 09:33:02.264', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('5ba7c2a7-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:33:02.291', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('66c1f191-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderTJ2', '32b7097e-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:47:39.911', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('66c218a2-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leaderTJ2', NULL, '2021-09-24 09:47:39.912', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('66c6d397-1cd9-11ec-acd8-3ae4f1d3c3af', '1440964387979399168', 'candidate', NULL, '66c6d396-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:47:39.943', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('7138d67e-1d1d-11ec-8336-3ae4f1d3c3af', NULL, 'starter', 'userD', NULL, '2021-09-24 17:54:43.245', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('7138fd97-1d1d-11ec-8336-3ae4f1d3c3af', NULL, 'assignee', 'userD', '7138fd96-1d1d-11ec-8336-3ae4f1d3c3af', '2021-09-24 17:54:43.246', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('7138fd98-1d1d-11ec-8336-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 17:54:43.246', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('713d6a6a-1d1d-11ec-8336-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 17:54:43.275', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('713e06ae-1d1d-11ec-8336-3ae4f1d3c3af', '1440964519391137792', 'candidate', NULL, '713e06ad-1d1d-11ec-8336-3ae4f1d3c3af', '2021-09-24 17:54:43.279', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('719d8e5b-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'starter', 'userD', NULL, '2021-09-24 09:33:39.134', '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('72ea4615-1d14-11ec-8336-3ae4f1d3c3af', NULL, 'assignee', 'leaderTJ', '23032963-1d0e-11ec-8336-3ae4f1d3c3af', '2021-09-24 16:50:20.614', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('72ea6d26-1d14-11ec-8336-3ae4f1d3c3af', NULL, 'participant', 'leaderTJ', NULL, '2021-09-24 16:50:20.616', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('73bafaee-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderLaw', '4fec915c-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:40:52.179', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('73bb21ff-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leaderLaw', NULL, '2021-09-24 09:40:52.180', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('73c163a7-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'userB', '73c163a6-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:40:52.221', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('73c18ab8-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userB', NULL, '2021-09-24 09:40:52.222', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('73c18abc-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'userC', '73c18abb-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:40:52.222', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('73c18abd-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userC', NULL, '2021-09-24 09:40:52.222', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('73c18ac1-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderLaw', '73c18ac0-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:40:52.222', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('74bc2138-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderLaw', '66c6d396-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:48:03.361', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('74bc4849-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leaderLaw', NULL, '2021-09-24 09:48:03.362', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('74c12a5f-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderLaw', '74c12a5e-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:48:03.394', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('74c15173-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'userC', '74c15172-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:48:03.395', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('74c15174-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userC', NULL, '2021-09-24 09:48:03.395', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('7a4309f8-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'admin', '7a4309f7-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:41:03.137', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('8b4134bb-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'userB', '8b4134ba-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:48:41.143', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('8b415bcc-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userB', NULL, '2021-09-24 09:48:41.144', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('9f26e51d-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:49:14.525', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('9f2892d4-1cd9-11ec-acd8-3ae4f1d3c3af', '1440911410581213416', 'candidate', NULL, '9f286bc3-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:49:14.536', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('a4cd8ab9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:42:14.509', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('b1c5bda5-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leader', '9f286bc3-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:49:45.765', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('b1c60bc6-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leader', NULL, '2021-09-24 09:49:45.767', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('c8b7005b-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'starter', 'admin', NULL, '2021-09-24 09:50:24.256', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('c8b72773-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'admin', 'c8b70062-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:50:24.257', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('c8b72774-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'admin', NULL, '2021-09-24 09:50:24.257', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('c8b94a56-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'admin', NULL, '2021-09-24 09:50:24.271', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('c8b9bf8a-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'candidate', 'admin', 'c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:50:24.274', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('c8b9bf8b-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'candidate', 'admin', 'c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:50:24.274', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('d2ab111c-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'admin', 'c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:50:40.955', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('d2af56de-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderHR', 'c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:50:40.983', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('d2afa4ff-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leaderHR', NULL, '2021-09-24 09:50:40.985', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('e22a8131-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:51:06.956', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('e7ac98ea-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'starter', 'userD', NULL, '2021-09-24 09:29:47.708', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('e7b26553-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'userD', 'e7b1c912-1cd6-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:29:47.745', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('e7b26554-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:29:47.745', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('e7b72046-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:29:47.776', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('e7b80aaa-1cd6-11ec-acd8-3ae4f1d3c3af', '1440964519391137792', 'candidate', NULL, 'e7b80aa9-1cd6-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:29:47.782', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('f62435fb-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'leaderTJ', 'e7b80aa9-1cd6-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:30:11.979', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('f6245d0c-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'leaderTJ', NULL, '2021-09-24 09:30:11.980', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('f62aecbe-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'participant', 'userD', NULL, '2021-09-24 09:30:12.023', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('f62d36b2-1cd6-11ec-acd8-3ae4f1d3c3af', '1440964221855600640', 'candidate', NULL, 'f62d36b1-1cd6-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:30:12.038', NULL, NULL, NULL, NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_HI_PROCINST +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_PROCINST`; +CREATE TABLE `ACT_HI_PROCINST` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT '1', + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `BUSINESS_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `START_TIME_` datetime(3) NOT NULL, + `END_TIME_` datetime(3) DEFAULT NULL, + `DURATION_` bigint(20) DEFAULT NULL, + `START_USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `START_ACT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `END_ACT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUPER_PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `DELETE_REASON_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CALLBACK_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CALLBACK_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REFERENCE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REFERENCE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + UNIQUE KEY `PROC_INST_ID_` (`PROC_INST_ID_`), + KEY `ACT_IDX_HI_PRO_INST_END` (`END_TIME_`), + KEY `ACT_IDX_HI_PRO_I_BUSKEY` (`BUSINESS_KEY_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_HI_PROCINST +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_HI_PROCINST` VALUES ('17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', 2, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '1441215377508929536', 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:38:17.157', '2021-09-24 09:43:49.235', 332078, 'userD', 'Event_1psmisd', 'Event_12ajo3d', NULL, NULL, '', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_PROCINST` VALUES ('1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', 2, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1441217206602960896', 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '2021-09-24 09:45:33.241', '2021-09-24 09:49:45.799', 252558, 'userD', 'Event_1psmisd', 'Event_12ajo3d', NULL, NULL, '', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_PROCINST` VALUES ('22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', 2, '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '1441312736167333888', 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '2021-09-24 16:05:09.478', '2021-09-24 16:50:20.693', 2711215, 'userD', 'Event_17n2rw9', 'Event_0nvjxgh', NULL, NULL, '', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_PROCINST` VALUES ('420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', 2, '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '1441213876367527936', 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '2021-09-24 09:32:19.258', '2021-09-24 09:33:02.300', 43042, 'userD', 'Event_17n2rw9', 'Event_0nvjxgh', NULL, NULL, '', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_PROCINST` VALUES ('7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', 1, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '1441340309442138112', 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '2021-09-24 17:54:43.245', NULL, NULL, 'userD', 'Event_17n2rw9', NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_PROCINST` VALUES ('719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', 2, '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', '2021-09-24 09:33:39.134', '2021-09-24 09:34:08.597', 29463, 'userD', 'Event_1psmisd', 'Event_12ajo3d', NULL, NULL, '', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_PROCINST` VALUES ('c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', '1441218427220922368', 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', '2021-09-24 09:50:24.256', '2021-09-24 09:51:06.964', 42708, 'admin', 'Event_1ouk8kj', 'Event_0lzxnw8', NULL, NULL, '', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_HI_PROCINST` VALUES ('e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 2, 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', '1441213240326492160', 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', '2021-09-24 09:29:47.706', '2021-09-24 09:31:03.843', 76137, 'userD', 'Event_1c9ukkq', 'Event_04byxr7', NULL, NULL, '', NULL, NULL, NULL, NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_HI_TASKINST +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_TASKINST`; +CREATE TABLE `ACT_HI_TASKINST` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT '1', + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TASK_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TASK_DEF_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PROPAGATED_STAGE_INST_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PARENT_TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `DESCRIPTION_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ASSIGNEE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `START_TIME_` datetime(3) NOT NULL, + `CLAIM_TIME_` datetime(3) DEFAULT NULL, + `END_TIME_` datetime(3) DEFAULT NULL, + `DURATION_` bigint(20) DEFAULT NULL, + `DELETE_REASON_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `PRIORITY_` int(11) DEFAULT NULL, + `DUE_DATE_` datetime(3) DEFAULT NULL, + `FORM_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + `LAST_UPDATED_TIME_` datetime(3) DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_HI_TASK_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_HI_TASK_SUB_SCOPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_HI_TASK_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_HI_TASK_INST_PROCINST` (`PROC_INST_ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_HI_TASKINST +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_HI_TASKINST` VALUES ('1754a6f2-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_0nyla1r', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '合同录入', NULL, NULL, NULL, 'userD', '2021-09-24 09:38:17.157', NULL, '2021-09-24 09:38:17.177', 20, NULL, 50, NULL, '{\"formId\":\"1440954920348946432\",\"readOnly\":false,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:38:17.177'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('1757db49-1cd8-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_1ucrh52', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '业务部领导审批', NULL, NULL, NULL, 'leaderTJ', '2021-09-24 09:38:17.179', '2021-09-24 09:38:34.551', '2021-09-24 09:38:34.590', 17411, NULL, 50, NULL, '{\"formId\":\"1440954920348946432\",\"readOnly\":true,\"groupType\":\"DEPT_POST_LEADER\"}', NULL, '', '2021-09-24 09:38:34.590'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('1b41a38d-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_0nyla1r', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '合同录入', NULL, NULL, NULL, 'userD', '2021-09-24 09:45:33.241', NULL, '2021-09-24 09:45:33.258', 17, NULL, 50, NULL, '{\"formId\":\"1440954920348946432\",\"readOnly\":false,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:45:33.258'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('1b4488c4-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_1ucrh52', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '业务部领导审批', NULL, NULL, NULL, 'leaderTJ', '2021-09-24 09:45:33.260', '2021-09-24 09:45:53.107', '2021-09-24 09:45:53.140', 19880, NULL, 50, NULL, '{\"formId\":\"1440954920348946432\",\"readOnly\":true,\"groupType\":\"DEPT_POST_LEADER\"}', NULL, '', '2021-09-24 09:45:53.140'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('21b953d4-1cd8-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_138m4nn', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '工程部审批', NULL, NULL, NULL, 'admin', '2021-09-24 09:38:34.595', '2021-09-24 09:38:58.922', '2021-09-24 09:38:58.967', 24372, NULL, 50, NULL, '{\"formId\":\"1440955194991972352\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:38:58.967'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('21b97ae8-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_0tm3mph', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '21b92cc0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '造价部审批', NULL, NULL, NULL, 'admin', '2021-09-24 09:38:34.596', NULL, '2021-09-24 09:38:51.863', 17267, NULL, 50, NULL, '{\"formId\":\"1440955194991972352\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:38:51.863'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('22f9b37c-1d0e-11ec-8336-3ae4f1d3c3af', 2, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_03kjurt', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '报销单录入', NULL, NULL, NULL, 'userD', '2021-09-24 16:05:09.494', NULL, '2021-09-24 16:05:09.575', 81, NULL, 50, NULL, '{\"formId\":\"1440947675041107968\",\"readOnly\":false,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 16:05:09.575'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('23032963-1d0e-11ec-8336-3ae4f1d3c3af', 3, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_0ywxfwu', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f45c48-1d0e-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '部门领导审批', NULL, NULL, NULL, 'leaderTJ', '2021-09-24 16:05:09.580', '2021-09-24 16:50:20.612', '2021-09-24 16:50:20.665', 2711085, NULL, 50, NULL, '{\"formId\":\"1440947675041107968\",\"readOnly\":true,\"groupType\":\"DEPT_POST_LEADER\"}', NULL, '', '2021-09-24 16:50:20.665'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('271e978f-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_138m4nn', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '工程部审批', NULL, NULL, NULL, 'admin', '2021-09-24 09:45:53.144', '2021-09-24 09:46:12.565', '2021-09-24 09:46:12.595', 19451, NULL, 50, NULL, '{\"formId\":\"1440955194991972352\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:46:12.595'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('271ebea3-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_0tm3mph', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '271e978b-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '造价部审批', NULL, NULL, NULL, 'admin', '2021-09-24 09:45:53.145', NULL, '2021-09-24 09:46:06.321', 13176, NULL, 50, NULL, '{\"formId\":\"1440955194991972352\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:46:06.321'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('3040cf64-1cd8-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_1yuuyie', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '财务部审批', NULL, NULL, NULL, 'leaderTJ', '2021-09-24 09:38:58.971', '2021-09-24 09:39:52.069', '2021-09-24 09:39:52.103', 53132, NULL, 50, NULL, '{\"formId\":\"1440955127790833664\",\"readOnly\":true,\"groupType\":\"POST\"}', NULL, '', '2021-09-24 09:39:52.103'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('32b7097e-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_1yuuyie', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '财务部审批', NULL, NULL, NULL, 'leaderTJ2', '2021-09-24 09:46:12.598', '2021-09-24 09:47:39.909', '2021-09-24 09:47:39.940', 87342, NULL, 50, NULL, '{\"formId\":\"1440955127790833664\",\"readOnly\":true,\"groupType\":\"POST\"}', NULL, '', '2021-09-24 09:47:39.940'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('42019911-1cd7-11ec-acd8-3ae4f1d3c3af', 2, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_03kjurt', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '报销单录入', NULL, NULL, NULL, 'userD', '2021-09-24 09:32:19.258', NULL, '2021-09-24 09:32:19.280', 22, NULL, 50, NULL, '{\"formId\":\"1440947675041107968\",\"readOnly\":false,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:32:19.280'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('42054298-1cd7-11ec-acd8-3ae4f1d3c3af', 3, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_0ywxfwu', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '部门领导审批', NULL, NULL, NULL, 'leaderTJ', '2021-09-24 09:32:19.283', '2021-09-24 09:32:30.107', '2021-09-24 09:32:30.143', 10860, NULL, 50, NULL, '{\"formId\":\"1440947675041107968\",\"readOnly\":true,\"groupType\":\"DEPT_POST_LEADER\"}', NULL, '', '2021-09-24 09:32:30.143'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('487ef9a2-1cd7-11ec-acd8-3ae4f1d3c3af', 3, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_0qay48u', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171fd-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '总经理审批', NULL, NULL, NULL, 'leader', '2021-09-24 09:32:30.147', '2021-09-24 09:33:02.260', '2021-09-24 09:33:02.292', 32145, NULL, 50, NULL, '{\"formId\":\"1440947675041107968\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:33:02.292'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('4fec915c-1cd8-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_1eewt01', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fde-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '法务部审批', NULL, NULL, NULL, 'leaderLaw', '2021-09-24 09:39:52.106', '2021-09-24 09:40:52.177', '2021-09-24 09:40:52.215', 60109, NULL, 50, NULL, '{\"formId\":\"1440955001093492736\",\"readOnly\":true,\"groupType\":\"POST\"}', NULL, '', '2021-09-24 09:40:52.215'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('66c6d396-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_1eewt01', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a389-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '法务部审批', NULL, NULL, NULL, 'leaderLaw', '2021-09-24 09:47:39.943', '2021-09-24 09:48:03.359', '2021-09-24 09:48:03.390', 23447, NULL, 50, NULL, '{\"formId\":\"1440955001093492736\",\"readOnly\":true,\"groupType\":\"POST\"}', NULL, '', '2021-09-24 09:48:03.390'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('7138fd96-1d1d-11ec-8336-3ae4f1d3c3af', 2, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_03kjurt', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '报销单录入', NULL, NULL, NULL, 'userD', '2021-09-24 17:54:43.246', NULL, '2021-09-24 17:54:43.276', 30, NULL, 50, NULL, '{\"formId\":\"1440947675041107968\",\"readOnly\":false,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 17:54:43.276'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('713e06ad-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_0ywxfwu', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '部门领导审批', NULL, NULL, NULL, NULL, '2021-09-24 17:54:43.278', NULL, NULL, NULL, NULL, 50, NULL, '{\"formId\":\"1440947675041107968\",\"readOnly\":true,\"groupType\":\"DEPT_POST_LEADER\"}', NULL, '', '2021-09-24 17:54:43.279'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('719d8e62-1cd7-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_0nyla1r', '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', '719d8e5e-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '合同录入', NULL, NULL, NULL, NULL, '2021-09-24 09:33:39.134', NULL, '2021-09-24 09:34:08.586', 29452, NULL, 50, NULL, '{\"formId\":\"1440954920348946432\",\"readOnly\":false,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:34:08.586'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('73c163a6-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_098ncvw', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c1157e-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '法务部会签', NULL, NULL, NULL, 'userB', '2021-09-24 09:40:52.221', NULL, '2021-09-24 09:41:55.359', 63138, NULL, 50, NULL, '{\"formId\":\"1440955001093492736\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:41:55.359'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('73c18abb-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_098ncvw', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c13c8f-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '法务部会签', NULL, NULL, NULL, 'userC', '2021-09-24 09:40:52.222', NULL, '2021-09-24 09:42:14.510', 82288, NULL, 50, NULL, '{\"formId\":\"1440955001093492736\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:42:14.510'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('73c18ac0-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_098ncvw', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c13c90-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '法务部会签', NULL, NULL, NULL, 'leaderLaw', '2021-09-24 09:40:52.222', NULL, '2021-09-24 09:41:36.318', 44096, NULL, 50, NULL, '{\"formId\":\"1440955001093492736\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:41:36.318'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('74c12a5e-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_098ncvw', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10348-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '法务部会签', NULL, NULL, NULL, 'leaderLaw', '2021-09-24 09:48:03.394', NULL, '2021-09-24 09:48:12.063', 8669, NULL, 50, NULL, '{\"formId\":\"1440955001093492736\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:48:12.063'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('74c15172-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_098ncvw', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10349-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '法务部会签', NULL, NULL, NULL, 'userC', '2021-09-24 09:48:03.395', NULL, '2021-09-24 09:49:14.526', 71131, NULL, 50, NULL, '{\"formId\":\"1440955001093492736\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:49:14.526'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('7a4309f7-1cd8-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_098ncvw', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '7a4294c2-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '法务部会签', NULL, NULL, NULL, 'admin', '2021-09-24 09:41:03.137', NULL, '2021-09-24 09:43:49.214', 166077, NULL, 50, NULL, '{\"formId\":\"1440955001093492736\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:43:49.214'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('8b4134ba-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_098ncvw', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '8b410da5-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '法务部会签', NULL, NULL, NULL, 'userB', '2021-09-24 09:48:41.143', NULL, '2021-09-24 09:48:54.253', 13110, NULL, 50, NULL, '{\"formId\":\"1440955001093492736\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:48:54.253'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('9f286bc3-1cd9-11ec-acd8-3ae4f1d3c3af', 3, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'Activity_1h3pnxy', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '9f2844ae-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '总经理审批', NULL, NULL, NULL, 'leader', '2021-09-24 09:49:14.535', '2021-09-24 09:49:45.763', '2021-09-24 09:49:45.792', 31257, NULL, 50, NULL, '{\"formId\":\"1440954920348946432\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:49:45.792'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('c8b70062-1cd9-11ec-acd8-3ae4f1d3c3af', 2, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_08p9kng', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005e-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '录入', NULL, NULL, NULL, 'admin', '2021-09-24 09:50:24.256', NULL, '2021-09-24 09:50:24.272', 16, NULL, 50, NULL, '{\"formId\":\"1440945411354267648\",\"readOnly\":false,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:50:24.272'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', 4, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', NULL, 'Activity_12olr01', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005e-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '转办', NULL, NULL, NULL, 'leaderHR', '2021-09-24 09:50:24.274', '2021-09-24 09:50:40.953', '2021-09-24 09:51:06.958', 42684, NULL, 50, NULL, '{\"formId\":\"1440945411354267648\",\"readOnly\":true,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:51:06.958'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('e7b1c912-1cd6-11ec-acd8-3ae4f1d3c3af', 2, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', NULL, 'Activity_0sc2yuf', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '请假录入', NULL, NULL, NULL, 'userD', '2021-09-24 09:29:47.720', NULL, '2021-09-24 09:29:47.777', 57, NULL, 50, NULL, '{\"formId\":\"1440945411354267648\",\"readOnly\":false,\"groupType\":\"DEPT\"}', NULL, '', '2021-09-24 09:29:47.777'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('e7b80aa9-1cd6-11ec-acd8-3ae4f1d3c3af', 3, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', NULL, 'Activity_1jw5u20', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, '部门领导审批', NULL, NULL, NULL, 'leaderTJ', '2021-09-24 09:29:47.782', '2021-09-24 09:30:11.977', '2021-09-24 09:30:12.026', 24244, NULL, 50, NULL, '{\"formId\":\"1440945411354267648\",\"readOnly\":true,\"groupType\":\"DEPT_POST_LEADER\"}', NULL, '', '2021-09-24 09:30:12.026'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('f62d36b1-1cd6-11ec-acd8-3ae4f1d3c3af', 3, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', NULL, 'Activity_0olxatv', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ad5c3e-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, 'HR审批', NULL, NULL, NULL, 'userA', '2021-09-24 09:30:12.038', '2021-09-24 09:31:03.787', '2021-09-24 09:31:03.825', 51787, NULL, 50, NULL, '{\"formId\":\"1440945411354267648\",\"readOnly\":true,\"groupType\":\"POST\"}', NULL, '', '2021-09-24 09:31:03.825'); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_HI_TSK_LOG +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_TSK_LOG`; +CREATE TABLE `ACT_HI_TSK_LOG` ( + `ID_` bigint(20) NOT NULL AUTO_INCREMENT, + `TYPE_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `TIME_STAMP_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `DATA_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_HI_VARINST +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_HI_VARINST`; +CREATE TABLE `ACT_HI_VARINST` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT '1', + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin NOT NULL, + `VAR_TYPE_` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `BYTEARRAY_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `DOUBLE_` double DEFAULT NULL, + `LONG_` bigint(20) DEFAULT NULL, + `TEXT_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `TEXT2_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` datetime(3) DEFAULT NULL, + `LAST_UPDATED_TIME_` datetime(3) DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_HI_PROCVAR_NAME_TYPE` (`NAME_`,`VAR_TYPE_`), + KEY `ACT_IDX_HI_VAR_SCOPE_ID_TYPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_HI_VAR_SUB_ID_TYPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_HI_PROCVAR_PROC_INST` (`PROC_INST_ID_`), + KEY `ACT_IDX_HI_PROCVAR_TASK_ID` (`TASK_ID_`), + KEY `ACT_IDX_HI_PROCVAR_EXE` (`EXECUTION_ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_HI_VARINST +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_HI_VARINST` VALUES ('17547fdb-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'startUserName', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:38:17.157', '2021-09-24 09:38:17.157'); +INSERT INTO `ACT_HI_VARINST` VALUES ('17547fdc-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'deptPostLeader', 'long', NULL, NULL, NULL, NULL, NULL, 1440964519391137792, '1440964519391137792', NULL, '2021-09-24 09:38:17.157', '2021-09-24 09:38:17.157'); +INSERT INTO `ACT_HI_VARINST` VALUES ('17547fdd-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'initiator', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:38:17.157', '2021-09-24 09:38:17.157'); +INSERT INTO `ACT_HI_VARINST` VALUES ('17576615-1cd8-11ec-acd8-3ae4f1d3c3af', 8, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'operationType', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'multi_agree', NULL, '2021-09-24 09:38:17.176', '2021-09-24 09:42:14.508'); +INSERT INTO `ACT_HI_VARINST` VALUES ('1b41a386-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'startUserName', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:45:33.241', '2021-09-24 09:45:33.241'); +INSERT INTO `ACT_HI_VARINST` VALUES ('1b41a387-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'deptPostLeader', 'long', NULL, NULL, NULL, NULL, NULL, 1440964519391137792, '1440964519391137792', NULL, '2021-09-24 09:45:33.241', '2021-09-24 09:45:33.241'); +INSERT INTO `ACT_HI_VARINST` VALUES ('1b41a388-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'initiator', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:45:33.241', '2021-09-24 09:45:33.241'); +INSERT INTO `ACT_HI_VARINST` VALUES ('1b441390-1cd9-11ec-acd8-3ae4f1d3c3af', 9, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'operationType', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'agree', NULL, '2021-09-24 09:45:33.257', '2021-09-24 09:49:45.791'); +INSERT INTO `ACT_HI_VARINST` VALUES ('22f40e25-1d0e-11ec-8336-3ae4f1d3c3af', 0, '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'startUserName', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 16:05:09.482', '2021-09-24 16:05:09.482'); +INSERT INTO `ACT_HI_VARINST` VALUES ('22f45c46-1d0e-11ec-8336-3ae4f1d3c3af', 0, '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'deptPostLeader', 'long', NULL, NULL, NULL, NULL, NULL, 1440964519391137792, '1440964519391137792', NULL, '2021-09-24 16:05:09.483', '2021-09-24 16:05:09.483'); +INSERT INTO `ACT_HI_VARINST` VALUES ('22f45c47-1d0e-11ec-8336-3ae4f1d3c3af', 0, '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'initiator', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 16:05:09.483', '2021-09-24 16:05:09.483'); +INSERT INTO `ACT_HI_VARINST` VALUES ('230217ef-1d0e-11ec-8336-3ae4f1d3c3af', 1, '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'operationType', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'agree', NULL, '2021-09-24 16:05:09.574', '2021-09-24 16:50:20.663'); +INSERT INTO `ACT_HI_VARINST` VALUES ('420171fa-1cd7-11ec-acd8-3ae4f1d3c3af', 0, '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'startUserName', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:32:19.258', '2021-09-24 09:32:19.258'); +INSERT INTO `ACT_HI_VARINST` VALUES ('420171fb-1cd7-11ec-acd8-3ae4f1d3c3af', 0, '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'deptPostLeader', 'long', NULL, NULL, NULL, NULL, NULL, 1440964519391137792, '1440964519391137792', NULL, '2021-09-24 09:32:19.258', '2021-09-24 09:32:19.258'); +INSERT INTO `ACT_HI_VARINST` VALUES ('420171fc-1cd7-11ec-acd8-3ae4f1d3c3af', 0, '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'initiator', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:32:19.258', '2021-09-24 09:32:19.258'); +INSERT INTO `ACT_HI_VARINST` VALUES ('4204cd64-1cd7-11ec-acd8-3ae4f1d3c3af', 2, '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'operationType', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'agree', NULL, '2021-09-24 09:32:19.280', '2021-09-24 09:33:02.290'); +INSERT INTO `ACT_HI_VARINST` VALUES ('487e364d-1cd7-11ec-acd8-3ae4f1d3c3af', 0, '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'totalAmount', 'integer', NULL, NULL, NULL, NULL, NULL, 1200, '1200', NULL, '2021-09-24 09:32:30.142', '2021-09-24 09:32:30.142'); +INSERT INTO `ACT_HI_VARINST` VALUES ('7138d67f-1d1d-11ec-8336-3ae4f1d3c3af', 0, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, 'startUserName', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 17:54:43.245', '2021-09-24 17:54:43.245'); +INSERT INTO `ACT_HI_VARINST` VALUES ('7138d680-1d1d-11ec-8336-3ae4f1d3c3af', 0, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, 'deptPostLeader', 'long', NULL, NULL, NULL, NULL, NULL, 1440964519391137792, '1440964519391137792', NULL, '2021-09-24 17:54:43.245', '2021-09-24 17:54:43.245'); +INSERT INTO `ACT_HI_VARINST` VALUES ('7138d681-1d1d-11ec-8336-3ae4f1d3c3af', 0, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, 'initiator', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 17:54:43.245', '2021-09-24 17:54:43.245'); +INSERT INTO `ACT_HI_VARINST` VALUES ('713d6a69-1d1d-11ec-8336-3ae4f1d3c3af', 0, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, 'operationType', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'agree', NULL, '2021-09-24 17:54:43.275', '2021-09-24 17:54:43.275'); +INSERT INTO `ACT_HI_VARINST` VALUES ('719d8e5c-1cd7-11ec-acd8-3ae4f1d3c3af', 0, '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'startUserName', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:33:39.134', '2021-09-24 09:33:39.134'); +INSERT INTO `ACT_HI_VARINST` VALUES ('719d8e5d-1cd7-11ec-acd8-3ae4f1d3c3af', 0, '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', NULL, 'initiator', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:33:39.134', '2021-09-24 09:33:39.134'); +INSERT INTO `ACT_HI_VARINST` VALUES ('72f19918-1d14-11ec-8336-3ae4f1d3c3af', 0, '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', NULL, 'totalAmount', 'integer', NULL, NULL, NULL, NULL, NULL, 800, '800', NULL, '2021-09-24 16:50:20.663', '2021-09-24 16:50:20.663'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73bfb5e1-1cd8-11ec-acd8-3ae4f1d3c3af', 3, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'multiRefuseCount', 'integer', NULL, NULL, NULL, NULL, NULL, 1, '1', NULL, '2021-09-24 09:40:52.210', '2021-09-24 09:42:14.508'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c02b13-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assigneeList', 'serializable', NULL, NULL, NULL, '73c05224-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, '2021-09-24 09:40:52.213', '2021-09-24 09:40:52.213'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c05225-1cd8-11ec-acd8-3ae4f1d3c3af', 3, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'multiAbstainCount', 'integer', NULL, NULL, NULL, NULL, NULL, 0, '0', NULL, '2021-09-24 09:40:52.214', '2021-09-24 09:42:14.508'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c05226-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'multiSignStartTask', 'string', NULL, NULL, NULL, NULL, NULL, NULL, '4fec915c-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '2021-09-24 09:40:52.214', '2021-09-24 09:40:52.214'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c05227-1cd8-11ec-acd8-3ae4f1d3c3af', 3, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'multiAgreeCount', 'integer', NULL, NULL, NULL, NULL, NULL, 2, '2', NULL, '2021-09-24 09:40:52.214', '2021-09-24 09:42:14.508'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c05228-1cd8-11ec-acd8-3ae4f1d3c3af', 3, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'multiNumOfInstances', 'integer', NULL, NULL, NULL, NULL, NULL, 4, '4', NULL, '2021-09-24 09:40:52.214', '2021-09-24 09:42:14.509'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c1157b-1cd8-11ec-acd8-3ae4f1d3c3af', 1, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c0ee6a-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'nrOfInstances', 'integer', NULL, NULL, NULL, NULL, NULL, 4, '4', NULL, '2021-09-24 09:40:52.219', '2021-09-24 09:41:03.135'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c1157c-1cd8-11ec-acd8-3ae4f1d3c3af', 4, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c0ee6a-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'nrOfCompletedInstances', 'integer', NULL, NULL, NULL, NULL, NULL, 4, '4', NULL, '2021-09-24 09:40:52.219', '2021-09-24 09:43:49.220'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c1157d-1cd8-11ec-acd8-3ae4f1d3c3af', 4, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c0ee6a-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'nrOfActiveInstances', 'integer', NULL, NULL, NULL, NULL, NULL, -1, '-1', NULL, '2021-09-24 09:40:52.219', '2021-09-24 09:43:49.220'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c13c91-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c1157e-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userB', NULL, '2021-09-24 09:40:52.220', '2021-09-24 09:40:52.220'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c13c92-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c13c8f-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userC', NULL, '2021-09-24 09:40:52.221', '2021-09-24 09:40:52.221'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c163a3-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c13c90-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'leaderLaw', NULL, '2021-09-24 09:40:52.221', '2021-09-24 09:40:52.221'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c163a4-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c1157e-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'loopCounter', 'integer', NULL, NULL, NULL, NULL, NULL, 0, '0', NULL, '2021-09-24 09:40:52.221', '2021-09-24 09:40:52.221'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c18ab9-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c13c8f-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'loopCounter', 'integer', NULL, NULL, NULL, NULL, NULL, 1, '1', NULL, '2021-09-24 09:40:52.222', '2021-09-24 09:40:52.222'); +INSERT INTO `ACT_HI_VARINST` VALUES ('73c18abe-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c13c90-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'loopCounter', 'integer', NULL, NULL, NULL, NULL, NULL, 2, '2', NULL, '2021-09-24 09:40:52.222', '2021-09-24 09:40:52.222'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c066fb-1cd9-11ec-acd8-3ae4f1d3c3af', 3, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'multiRefuseCount', 'integer', NULL, NULL, NULL, NULL, NULL, 0, '0', NULL, '2021-09-24 09:48:03.389', '2021-09-24 09:49:14.524'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c066fd-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assigneeList', 'serializable', NULL, NULL, NULL, '74c066fe-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, NULL, NULL, NULL, '2021-09-24 09:48:03.389', '2021-09-24 09:48:03.389'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c066ff-1cd9-11ec-acd8-3ae4f1d3c3af', 3, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'multiAbstainCount', 'integer', NULL, NULL, NULL, NULL, NULL, 0, '0', NULL, '2021-09-24 09:48:03.389', '2021-09-24 09:49:14.524'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c08e10-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'multiSignStartTask', 'string', NULL, NULL, NULL, NULL, NULL, NULL, '66c6d396-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '2021-09-24 09:48:03.390', '2021-09-24 09:48:03.390'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c08e11-1cd9-11ec-acd8-3ae4f1d3c3af', 3, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'multiAgreeCount', 'integer', NULL, NULL, NULL, NULL, NULL, 3, '3', NULL, '2021-09-24 09:48:03.390', '2021-09-24 09:49:14.524'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c08e12-1cd9-11ec-acd8-3ae4f1d3c3af', 3, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'multiNumOfInstances', 'integer', NULL, NULL, NULL, NULL, NULL, 3, '3', NULL, '2021-09-24 09:48:03.390', '2021-09-24 09:49:14.525'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c10345-1cd9-11ec-acd8-3ae4f1d3c3af', 1, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10344-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'nrOfInstances', 'integer', NULL, NULL, NULL, NULL, NULL, 3, '3', NULL, '2021-09-24 09:48:03.393', '2021-09-24 09:48:41.142'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c10346-1cd9-11ec-acd8-3ae4f1d3c3af', 3, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10344-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'nrOfCompletedInstances', 'integer', NULL, NULL, NULL, NULL, NULL, 3, '3', NULL, '2021-09-24 09:48:03.393', '2021-09-24 09:49:14.527'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c10347-1cd9-11ec-acd8-3ae4f1d3c3af', 3, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10344-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'nrOfActiveInstances', 'integer', NULL, NULL, NULL, NULL, NULL, -1, '-1', NULL, '2021-09-24 09:48:03.393', '2021-09-24 09:49:14.527'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c1034a-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10348-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'leaderLaw', NULL, '2021-09-24 09:48:03.393', '2021-09-24 09:48:03.393'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c12a5b-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10349-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userC', NULL, '2021-09-24 09:48:03.394', '2021-09-24 09:48:03.394'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c12a5c-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10348-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'loopCounter', 'integer', NULL, NULL, NULL, NULL, NULL, 0, '0', NULL, '2021-09-24 09:48:03.394', '2021-09-24 09:48:03.394'); +INSERT INTO `ACT_HI_VARINST` VALUES ('74c12a60-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c10349-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'loopCounter', 'integer', NULL, NULL, NULL, NULL, NULL, 1, '1', NULL, '2021-09-24 09:48:03.394', '2021-09-24 09:48:03.394'); +INSERT INTO `ACT_HI_VARINST` VALUES ('7a4309f3-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '7a4294c2-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'multiSignStartTask', 'string', NULL, NULL, NULL, NULL, NULL, NULL, '4fec915c-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, '2021-09-24 09:41:03.137', '2021-09-24 09:41:03.137'); +INSERT INTO `ACT_HI_VARINST` VALUES ('7a4309f4-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '7a4294c2-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'admin', NULL, '2021-09-24 09:41:03.137', '2021-09-24 09:41:03.137'); +INSERT INTO `ACT_HI_VARINST` VALUES ('7a4309f5-1cd8-11ec-acd8-3ae4f1d3c3af', 0, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '7a4294c2-1cd8-11ec-acd8-3ae4f1d3c3af', NULL, 'loopCounter', 'integer', NULL, NULL, NULL, NULL, NULL, 3, '3', NULL, '2021-09-24 09:41:03.137', '2021-09-24 09:41:03.137'); +INSERT INTO `ACT_HI_VARINST` VALUES ('8b4134b6-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '8b410da5-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'multiSignStartTask', 'string', NULL, NULL, NULL, NULL, NULL, NULL, '66c6d396-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, '2021-09-24 09:48:41.143', '2021-09-24 09:48:41.143'); +INSERT INTO `ACT_HI_VARINST` VALUES ('8b4134b7-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '8b410da5-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'assignee', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userB', NULL, '2021-09-24 09:48:41.143', '2021-09-24 09:48:41.143'); +INSERT INTO `ACT_HI_VARINST` VALUES ('8b4134b8-1cd9-11ec-acd8-3ae4f1d3c3af', 0, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '8b410da5-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'loopCounter', 'integer', NULL, NULL, NULL, NULL, NULL, 2, '2', NULL, '2021-09-24 09:48:41.143', '2021-09-24 09:48:41.143'); +INSERT INTO `ACT_HI_VARINST` VALUES ('c8b7005c-1cd9-11ec-acd8-3ae4f1d3c3af', 0, 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'startUserName', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'admin', NULL, '2021-09-24 09:50:24.256', '2021-09-24 09:50:24.256'); +INSERT INTO `ACT_HI_VARINST` VALUES ('c8b7005d-1cd9-11ec-acd8-3ae4f1d3c3af', 0, 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'initiator', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'admin', NULL, '2021-09-24 09:50:24.256', '2021-09-24 09:50:24.256'); +INSERT INTO `ACT_HI_VARINST` VALUES ('c8b94a55-1cd9-11ec-acd8-3ae4f1d3c3af', 1, 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', NULL, 'operationType', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'agree', NULL, '2021-09-24 09:50:24.271', '2021-09-24 09:51:06.956'); +INSERT INTO `ACT_HI_VARINST` VALUES ('e7ace70b-1cd6-11ec-acd8-3ae4f1d3c3af', 0, 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'startUserName', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:29:47.711', '2021-09-24 09:29:47.711'); +INSERT INTO `ACT_HI_VARINST` VALUES ('e7ad352c-1cd6-11ec-acd8-3ae4f1d3c3af', 0, 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'deptPostLeader', 'long', NULL, NULL, NULL, NULL, NULL, 1440964519391137792, '1440964519391137792', NULL, '2021-09-24 09:29:47.711', '2021-09-24 09:29:47.711'); +INSERT INTO `ACT_HI_VARINST` VALUES ('e7ad352d-1cd6-11ec-acd8-3ae4f1d3c3af', 0, 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'initiator', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL, '2021-09-24 09:29:47.711', '2021-09-24 09:29:47.711'); +INSERT INTO `ACT_HI_VARINST` VALUES ('e7b72045-1cd6-11ec-acd8-3ae4f1d3c3af', 2, 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', NULL, 'operationType', 'string', NULL, NULL, NULL, NULL, NULL, NULL, 'agree', NULL, '2021-09-24 09:29:47.776', '2021-09-24 09:31:03.823'); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_ID_BYTEARRAY +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_ID_BYTEARRAY`; +CREATE TABLE `ACT_ID_BYTEARRAY` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `BYTES_` longblob, + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_ID_GROUP +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_ID_GROUP`; +CREATE TABLE `ACT_ID_GROUP` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_ID_INFO +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_ID_INFO`; +CREATE TABLE `ACT_ID_INFO` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `USER_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `VALUE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PASSWORD_` longblob, + `PARENT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_ID_MEMBERSHIP +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_ID_MEMBERSHIP`; +CREATE TABLE `ACT_ID_MEMBERSHIP` ( + `USER_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `GROUP_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`USER_ID_`,`GROUP_ID_`), + KEY `ACT_FK_MEMB_GROUP` (`GROUP_ID_`), + CONSTRAINT `ACT_FK_MEMB_GROUP` FOREIGN KEY (`GROUP_ID_`) REFERENCES `ACT_ID_GROUP` (`ID_`), + CONSTRAINT `ACT_FK_MEMB_USER` FOREIGN KEY (`USER_ID_`) REFERENCES `ACT_ID_USER` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_ID_PRIV +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_ID_PRIV`; +CREATE TABLE `ACT_ID_PRIV` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `NAME_` varchar(255) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`ID_`), + UNIQUE KEY `ACT_UNIQ_PRIV_NAME` (`NAME_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_ID_PRIV_MAPPING +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_ID_PRIV_MAPPING`; +CREATE TABLE `ACT_ID_PRIV_MAPPING` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `PRIV_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `GROUP_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_FK_PRIV_MAPPING` (`PRIV_ID_`), + KEY `ACT_IDX_PRIV_USER` (`USER_ID_`), + KEY `ACT_IDX_PRIV_GROUP` (`GROUP_ID_`), + CONSTRAINT `ACT_FK_PRIV_MAPPING` FOREIGN KEY (`PRIV_ID_`) REFERENCES `ACT_ID_PRIV` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_ID_PROPERTY +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_ID_PROPERTY`; +CREATE TABLE `ACT_ID_PROPERTY` ( + `NAME_` varchar(64) COLLATE utf8_bin NOT NULL, + `VALUE_` varchar(300) COLLATE utf8_bin DEFAULT NULL, + `REV_` int(11) DEFAULT NULL, + PRIMARY KEY (`NAME_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_ID_PROPERTY +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_ID_PROPERTY` VALUES ('schema.version', '6.6.0.0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_ID_TOKEN +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_ID_TOKEN`; +CREATE TABLE `ACT_ID_TOKEN` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `TOKEN_VALUE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TOKEN_DATE_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `IP_ADDRESS_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `USER_AGENT_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TOKEN_DATA_` varchar(2000) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_ID_USER +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_ID_USER`; +CREATE TABLE `ACT_ID_USER` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `FIRST_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `LAST_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `DISPLAY_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `EMAIL_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PWD_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PICTURE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_PROCDEF_INFO +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_PROCDEF_INFO`; +CREATE TABLE `ACT_PROCDEF_INFO` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `INFO_JSON_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + UNIQUE KEY `ACT_UNIQ_INFO_PROCDEF` (`PROC_DEF_ID_`), + KEY `ACT_IDX_INFO_PROCDEF` (`PROC_DEF_ID_`), + KEY `ACT_FK_INFO_JSON_BA` (`INFO_JSON_ID_`), + CONSTRAINT `ACT_FK_INFO_JSON_BA` FOREIGN KEY (`INFO_JSON_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RE_DEPLOYMENT +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RE_DEPLOYMENT`; +CREATE TABLE `ACT_RE_DEPLOYMENT` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + `DEPLOY_TIME_` timestamp(3) NULL DEFAULT NULL, + `DERIVED_FROM_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `DERIVED_FROM_ROOT_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PARENT_DEPLOYMENT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ENGINE_VERSION_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_RE_DEPLOYMENT +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('1a075ec8-1c4e-11ec-94ee-5ef70686b817', '请假申请', 'HR', 'flowLeave', '', '2021-09-23 17:10:31.135', NULL, NULL, '1a075ec8-1c4e-11ec-94ee-5ef70686b817', NULL); +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('1ba32d20-1c51-11ec-94ee-5ef70686b817', '合同审批', 'XM', 'flowContract', '', '2021-09-23 17:32:02.325', NULL, NULL, '1ba32d20-1c51-11ec-94ee-5ef70686b817', NULL); +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('1d1dbf34-1c51-11ec-94ee-5ef70686b817', '报销申请', 'CW', 'flowSubmit', '', '2021-09-23 17:32:04.806', NULL, NULL, '1d1dbf34-1c51-11ec-94ee-5ef70686b817', NULL); +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('9d23d445-1cd7-11ec-acd8-3ae4f1d3c3af', '合同审批', 'XM', 'flowContract', '', '2021-09-24 09:34:52.156', NULL, NULL, '9d23d445-1cd7-11ec-acd8-3ae4f1d3c3af', NULL); +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('b97761b8-1c51-11ec-94ee-5ef70686b817', '多实例加签', 'HR', 'flowConSign', '', '2021-09-23 17:36:27.118', NULL, NULL, 'b97761b8-1c51-11ec-94ee-5ef70686b817', NULL); +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('d273a35d-1cd8-11ec-acd8-3ae4f1d3c3af', '合同审批', 'XM', 'flowContract', '', '2021-09-24 09:43:31.095', NULL, NULL, 'd273a35d-1cd8-11ec-acd8-3ae4f1d3c3af', NULL); +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('efd6c86c-1c4e-11ec-94ee-5ef70686b817', '报销申请', 'CW', 'flowSubmit', '', '2021-09-23 17:16:29.849', NULL, NULL, 'efd6c86c-1c4e-11ec-94ee-5ef70686b817', NULL); +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('fa9b683c-1c51-11ec-94ee-5ef70686b817', '转办流程', 'HR', 'flowTranslate', '', '2021-09-23 17:38:16.406', NULL, NULL, 'fa9b683c-1c51-11ec-94ee-5ef70686b817', NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_RE_MODEL +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RE_MODEL`; +CREATE TABLE `ACT_RE_MODEL` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `LAST_UPDATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `VERSION_` int(11) DEFAULT NULL, + `META_INFO_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EDITOR_SOURCE_VALUE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EDITOR_SOURCE_EXTRA_VALUE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `ACT_FK_MODEL_SOURCE` (`EDITOR_SOURCE_VALUE_ID_`), + KEY `ACT_FK_MODEL_SOURCE_EXTRA` (`EDITOR_SOURCE_EXTRA_VALUE_ID_`), + KEY `ACT_FK_MODEL_DEPLOYMENT` (`DEPLOYMENT_ID_`), + CONSTRAINT `ACT_FK_MODEL_DEPLOYMENT` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `ACT_RE_DEPLOYMENT` (`ID_`), + CONSTRAINT `ACT_FK_MODEL_SOURCE` FOREIGN KEY (`EDITOR_SOURCE_VALUE_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_MODEL_SOURCE_EXTRA` FOREIGN KEY (`EDITOR_SOURCE_EXTRA_VALUE_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RE_PROCDEF +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RE_PROCDEF`; +CREATE TABLE `ACT_RE_PROCDEF` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `KEY_` varchar(255) COLLATE utf8_bin NOT NULL, + `VERSION_` int(11) NOT NULL, + `DEPLOYMENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `RESOURCE_NAME_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `DGRM_RESOURCE_NAME_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `DESCRIPTION_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `HAS_START_FORM_KEY_` tinyint(4) DEFAULT NULL, + `HAS_GRAPHICAL_NOTATION_` tinyint(4) DEFAULT NULL, + `SUSPENSION_STATE_` int(11) DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + `ENGINE_VERSION_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `DERIVED_FROM_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `DERIVED_FROM_ROOT_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `DERIVED_VERSION_` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID_`), + UNIQUE KEY `ACT_UNIQ_PROCDEF` (`KEY_`,`VERSION_`,`DERIVED_VERSION_`,`TENANT_ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_RE_PROCDEF +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RE_PROCDEF` VALUES ('flowConSign:1:b981c1fb-1c51-11ec-94ee-5ef70686b817', 1, 'http://flowable.org/bpmn', '多实例加签', 'flowConSign', 1, 'b97761b8-1c51-11ec-94ee-5ef70686b817', 'flowConSign.bpmn', 'flowConSign.flowConSign.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `ACT_RE_PROCDEF` VALUES ('flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', 1, 'http://flowable.org/bpmn', '合同审批', 'flowContract', 1, '1ba32d20-1c51-11ec-94ee-5ef70686b817', 'flowContract.bpmn', 'flowContract.flowContract.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `ACT_RE_PROCDEF` VALUES ('flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', 1, 'http://flowable.org/bpmn', '合同审批', 'flowContract', 2, '9d23d445-1cd7-11ec-acd8-3ae4f1d3c3af', 'flowContract.bpmn', 'flowContract.flowContract.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `ACT_RE_PROCDEF` VALUES ('flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 1, 'http://flowable.org/bpmn', '合同审批', 'flowContract', 3, 'd273a35d-1cd8-11ec-acd8-3ae4f1d3c3af', 'flowContract.bpmn', 'flowContract.flowContract.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `ACT_RE_PROCDEF` VALUES ('flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 1, 'http://flowable.org/bpmn', '请假申请', 'flowLeave', 1, '1a075ec8-1c4e-11ec-94ee-5ef70686b817', 'flowLeave.bpmn', 'flowLeave.flowLeave.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `ACT_RE_PROCDEF` VALUES ('flowSubmit:1:efe9db3f-1c4e-11ec-94ee-5ef70686b817', 1, 'http://flowable.org/bpmn', '报销申请', 'flowSubmit', 1, 'efd6c86c-1c4e-11ec-94ee-5ef70686b817', 'flowSubmit.bpmn', 'flowSubmit.flowSubmit.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `ACT_RE_PROCDEF` VALUES ('flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', 1, 'http://flowable.org/bpmn', '报销申请', 'flowSubmit', 2, '1d1dbf34-1c51-11ec-94ee-5ef70686b817', 'flowSubmit.bpmn', 'flowSubmit.flowSubmit.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `ACT_RE_PROCDEF` VALUES ('flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 1, 'http://flowable.org/bpmn', '转办流程', 'flowTranslate', 1, 'fa9b683c-1c51-11ec-94ee-5ef70686b817', 'flowTranslate.bpmn', 'flowTranslate.flowTranslate.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_RU_ACTINST +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_ACTINST`; +CREATE TABLE `ACT_RU_ACTINST` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT '1', + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `ACT_ID_` varchar(255) COLLATE utf8_bin NOT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CALL_PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ACT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ACT_TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `ASSIGNEE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `START_TIME_` datetime(3) NOT NULL, + `END_TIME_` datetime(3) DEFAULT NULL, + `DURATION_` bigint(20) DEFAULT NULL, + `TRANSACTION_ORDER_` int(11) DEFAULT NULL, + `DELETE_REASON_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_RU_ACTI_START` (`START_TIME_`), + KEY `ACT_IDX_RU_ACTI_END` (`END_TIME_`), + KEY `ACT_IDX_RU_ACTI_PROC` (`PROC_INST_ID_`), + KEY `ACT_IDX_RU_ACTI_PROC_ACT` (`PROC_INST_ID_`,`ACT_ID_`), + KEY `ACT_IDX_RU_ACTI_EXEC` (`EXECUTION_ID_`), + KEY `ACT_IDX_RU_ACTI_EXEC_ACT` (`EXECUTION_ID_`,`ACT_ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_RU_ACTINST +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RU_ACTINST` VALUES ('7138d683-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Event_17n2rw9', NULL, NULL, NULL, 'startEvent', NULL, '2021-09-24 17:54:43.245', '2021-09-24 17:54:43.246', 1, 1, NULL, ''); +INSERT INTO `ACT_RU_ACTINST` VALUES ('7138fd94-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Flow_00ldvag', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 17:54:43.246', '2021-09-24 17:54:43.246', 0, 2, NULL, ''); +INSERT INTO `ACT_RU_ACTINST` VALUES ('7138fd95-1d1d-11ec-8336-3ae4f1d3c3af', 2, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Activity_03kjurt', '7138fd96-1d1d-11ec-8336-3ae4f1d3c3af', NULL, '报销单录入', 'userTask', 'userD', '2021-09-24 17:54:43.246', '2021-09-24 17:54:43.277', 31, 3, NULL, ''); +INSERT INTO `ACT_RU_ACTINST` VALUES ('713ddf9b-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Flow_0x9dx2t', NULL, NULL, NULL, 'sequenceFlow', NULL, '2021-09-24 17:54:43.278', '2021-09-24 17:54:43.278', 0, 1, NULL, ''); +INSERT INTO `ACT_RU_ACTINST` VALUES ('713ddf9c-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 'Activity_0ywxfwu', '713e06ad-1d1d-11ec-8336-3ae4f1d3c3af', NULL, '部门领导审批', 'userTask', NULL, '2021-09-24 17:54:43.278', NULL, NULL, 2, NULL, ''); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_RU_DEADLETTER_JOB +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_DEADLETTER_JOB`; +CREATE TABLE `ACT_RU_DEADLETTER_JOB` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `EXCLUSIVE_` tinyint(1) DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CORRELATION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_DEADLETTER_JOB_EXCEPTION_STACK_ID` (`EXCEPTION_STACK_ID_`), + KEY `ACT_IDX_DEADLETTER_JOB_CUSTOM_VALUES_ID` (`CUSTOM_VALUES_ID_`), + KEY `ACT_IDX_DEADLETTER_JOB_CORRELATION_ID` (`CORRELATION_ID_`), + KEY `ACT_IDX_DJOB_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_DJOB_SUB_SCOPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_DJOB_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`), + KEY `ACT_FK_DEADLETTER_JOB_EXECUTION` (`EXECUTION_ID_`), + KEY `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE` (`PROCESS_INSTANCE_ID_`), + KEY `ACT_FK_DEADLETTER_JOB_PROC_DEF` (`PROC_DEF_ID_`), + CONSTRAINT `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RU_ENTITYLINK +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_ENTITYLINK`; +CREATE TABLE `ACT_RU_ENTITYLINK` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `CREATE_TIME_` datetime(3) DEFAULT NULL, + `LINK_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PARENT_ELEMENT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REF_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REF_SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REF_SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ROOT_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ROOT_SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HIERARCHY_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_ENT_LNK_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`,`LINK_TYPE_`), + KEY `ACT_IDX_ENT_LNK_ROOT_SCOPE` (`ROOT_SCOPE_ID_`,`ROOT_SCOPE_TYPE_`,`LINK_TYPE_`), + KEY `ACT_IDX_ENT_LNK_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`,`LINK_TYPE_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RU_EVENT_SUBSCR +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_EVENT_SUBSCR`; +CREATE TABLE `ACT_RU_EVENT_SUBSCR` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `EVENT_TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `EVENT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ACTIVITY_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CONFIGURATION_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CREATED_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_EVENT_SUBSCR_CONFIG_` (`CONFIGURATION_`), + KEY `ACT_FK_EVENT_EXEC` (`EXECUTION_ID_`), + CONSTRAINT `ACT_FK_EVENT_EXEC` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RU_EXECUTION +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_EXECUTION`; +CREATE TABLE `ACT_RU_EXECUTION` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `BUSINESS_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PARENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SUPER_EXEC_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ROOT_PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ACT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `IS_ACTIVE_` tinyint(4) DEFAULT NULL, + `IS_CONCURRENT_` tinyint(4) DEFAULT NULL, + `IS_SCOPE_` tinyint(4) DEFAULT NULL, + `IS_EVENT_SCOPE_` tinyint(4) DEFAULT NULL, + `IS_MI_ROOT_` tinyint(4) DEFAULT NULL, + `SUSPENSION_STATE_` int(11) DEFAULT NULL, + `CACHED_ENT_STATE_` int(11) DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `START_ACT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `START_TIME_` datetime(3) DEFAULT NULL, + `START_USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `IS_COUNT_ENABLED_` tinyint(4) DEFAULT NULL, + `EVT_SUBSCR_COUNT_` int(11) DEFAULT NULL, + `TASK_COUNT_` int(11) DEFAULT NULL, + `JOB_COUNT_` int(11) DEFAULT NULL, + `TIMER_JOB_COUNT_` int(11) DEFAULT NULL, + `SUSP_JOB_COUNT_` int(11) DEFAULT NULL, + `DEADLETTER_JOB_COUNT_` int(11) DEFAULT NULL, + `EXTERNAL_WORKER_JOB_COUNT_` int(11) DEFAULT NULL, + `VAR_COUNT_` int(11) DEFAULT NULL, + `ID_LINK_COUNT_` int(11) DEFAULT NULL, + `CALLBACK_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CALLBACK_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REFERENCE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `REFERENCE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PROPAGATED_STAGE_INST_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_EXEC_BUSKEY` (`BUSINESS_KEY_`), + KEY `ACT_IDC_EXEC_ROOT` (`ROOT_PROC_INST_ID_`), + KEY `ACT_FK_EXE_PROCINST` (`PROC_INST_ID_`), + KEY `ACT_FK_EXE_PARENT` (`PARENT_ID_`), + KEY `ACT_FK_EXE_SUPER` (`SUPER_EXEC_`), + KEY `ACT_FK_EXE_PROCDEF` (`PROC_DEF_ID_`), + CONSTRAINT `ACT_FK_EXE_PARENT` FOREIGN KEY (`PARENT_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) ON DELETE CASCADE, + CONSTRAINT `ACT_FK_EXE_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`), + CONSTRAINT `ACT_FK_EXE_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `ACT_FK_EXE_SUPER` FOREIGN KEY (`SUPER_EXEC_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_RU_EXECUTION +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RU_EXECUTION` VALUES ('7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', 1, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '1441340309442138112', NULL, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, 1, 0, 1, 0, 0, 1, NULL, '', NULL, 'Event_17n2rw9', '2021-09-24 17:54:43.245', 'userD', NULL, NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_RU_EXECUTION` VALUES ('7138d682-1d1d-11ec-8336-3ae4f1d3c3af', 2, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', 'Activity_0ywxfwu', 1, 0, 0, 0, 0, 1, NULL, '', NULL, NULL, '2021-09-24 17:54:43.245', NULL, NULL, NULL, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_RU_EXTERNAL_JOB +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_EXTERNAL_JOB`; +CREATE TABLE `ACT_RU_EXTERNAL_JOB` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `EXCLUSIVE_` tinyint(1) DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CORRELATION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `RETRIES_` int(11) DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_EXTERNAL_JOB_EXCEPTION_STACK_ID` (`EXCEPTION_STACK_ID_`), + KEY `ACT_IDX_EXTERNAL_JOB_CUSTOM_VALUES_ID` (`CUSTOM_VALUES_ID_`), + KEY `ACT_IDX_EXTERNAL_JOB_CORRELATION_ID` (`CORRELATION_ID_`), + KEY `ACT_IDX_EJOB_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_EJOB_SUB_SCOPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_EJOB_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`), + CONSTRAINT `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_EXTERNAL_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RU_HISTORY_JOB +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_HISTORY_JOB`; +CREATE TABLE `ACT_RU_HISTORY_JOB` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `RETRIES_` int(11) DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ADV_HANDLER_CFG_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RU_IDENTITYLINK +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_IDENTITYLINK`; +CREATE TABLE `ACT_RU_IDENTITYLINK` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `GROUP_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `USER_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_IDENT_LNK_USER` (`USER_ID_`), + KEY `ACT_IDX_IDENT_LNK_GROUP` (`GROUP_ID_`), + KEY `ACT_IDX_IDENT_LNK_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_IDENT_LNK_SUB_SCOPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_IDENT_LNK_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_ATHRZ_PROCEDEF` (`PROC_DEF_ID_`), + KEY `ACT_FK_TSKASS_TASK` (`TASK_ID_`), + KEY `ACT_FK_IDL_PROCINST` (`PROC_INST_ID_`), + CONSTRAINT `ACT_FK_ATHRZ_PROCEDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`), + CONSTRAINT `ACT_FK_IDL_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_TSKASS_TASK` FOREIGN KEY (`TASK_ID_`) REFERENCES `ACT_RU_TASK` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_RU_IDENTITYLINK +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RU_IDENTITYLINK` VALUES ('7138d67e-1d1d-11ec-8336-3ae4f1d3c3af', 1, NULL, 'starter', 'userD', NULL, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_RU_IDENTITYLINK` VALUES ('7138fd98-1d1d-11ec-8336-3ae4f1d3c3af', 1, NULL, 'participant', 'userD', NULL, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_RU_IDENTITYLINK` VALUES ('713d6a6a-1d1d-11ec-8336-3ae4f1d3c3af', 1, NULL, 'participant', 'userD', NULL, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `ACT_RU_IDENTITYLINK` VALUES ('713e06ae-1d1d-11ec-8336-3ae4f1d3c3af', 1, '1440964519391137792', 'candidate', NULL, '713e06ad-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_RU_JOB +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_JOB`; +CREATE TABLE `ACT_RU_JOB` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `EXCLUSIVE_` tinyint(1) DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CORRELATION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `RETRIES_` int(11) DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_JOB_EXCEPTION_STACK_ID` (`EXCEPTION_STACK_ID_`), + KEY `ACT_IDX_JOB_CUSTOM_VALUES_ID` (`CUSTOM_VALUES_ID_`), + KEY `ACT_IDX_JOB_CORRELATION_ID` (`CORRELATION_ID_`), + KEY `ACT_IDX_JOB_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_JOB_SUB_SCOPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_JOB_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`), + KEY `ACT_FK_JOB_EXECUTION` (`EXECUTION_ID_`), + KEY `ACT_FK_JOB_PROCESS_INSTANCE` (`PROCESS_INSTANCE_ID_`), + KEY `ACT_FK_JOB_PROC_DEF` (`PROC_DEF_ID_`), + CONSTRAINT `ACT_FK_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RU_SUSPENDED_JOB +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_SUSPENDED_JOB`; +CREATE TABLE `ACT_RU_SUSPENDED_JOB` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `EXCLUSIVE_` tinyint(1) DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CORRELATION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `RETRIES_` int(11) DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_SUSPENDED_JOB_EXCEPTION_STACK_ID` (`EXCEPTION_STACK_ID_`), + KEY `ACT_IDX_SUSPENDED_JOB_CUSTOM_VALUES_ID` (`CUSTOM_VALUES_ID_`), + KEY `ACT_IDX_SUSPENDED_JOB_CORRELATION_ID` (`CORRELATION_ID_`), + KEY `ACT_IDX_SJOB_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_SJOB_SUB_SCOPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_SJOB_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`), + KEY `ACT_FK_SUSPENDED_JOB_EXECUTION` (`EXECUTION_ID_`), + KEY `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE` (`PROCESS_INSTANCE_ID_`), + KEY `ACT_FK_SUSPENDED_JOB_PROC_DEF` (`PROC_DEF_ID_`), + CONSTRAINT `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RU_TASK +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_TASK`; +CREATE TABLE `ACT_RU_TASK` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TASK_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PROPAGATED_STAGE_INST_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `PARENT_TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `DESCRIPTION_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `TASK_DEF_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ASSIGNEE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `DELEGATION_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PRIORITY_` int(11) DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `DUE_DATE_` datetime(3) DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUSPENSION_STATE_` int(11) DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + `FORM_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CLAIM_TIME_` datetime(3) DEFAULT NULL, + `IS_COUNT_ENABLED_` tinyint(4) DEFAULT NULL, + `VAR_COUNT_` int(11) DEFAULT NULL, + `ID_LINK_COUNT_` int(11) DEFAULT NULL, + `SUB_TASK_COUNT_` int(11) DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_TASK_CREATE` (`CREATE_TIME_`), + KEY `ACT_IDX_TASK_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_TASK_SUB_SCOPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_TASK_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`), + KEY `ACT_FK_TASK_EXE` (`EXECUTION_ID_`), + KEY `ACT_FK_TASK_PROCINST` (`PROC_INST_ID_`), + KEY `ACT_FK_TASK_PROCDEF` (`PROC_DEF_ID_`), + CONSTRAINT `ACT_FK_TASK_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_TASK_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`), + CONSTRAINT `ACT_FK_TASK_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_RU_TASK +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RU_TASK` VALUES ('713e06ad-1d1d-11ec-8336-3ae4f1d3c3af', 1, '7138d682-1d1d-11ec-8336-3ae4f1d3c3af', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', NULL, NULL, NULL, NULL, NULL, NULL, '部门领导审批', NULL, NULL, 'Activity_0ywxfwu', NULL, NULL, NULL, 50, '2021-09-24 17:54:43.278', NULL, NULL, 1, '', '{\"formId\":\"1440947675041107968\",\"readOnly\":true,\"groupType\":\"DEPT_POST_LEADER\"}', NULL, 1, 0, 1, 0); +COMMIT; + +-- ---------------------------- +-- Table structure for ACT_RU_TIMER_JOB +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_TIMER_JOB`; +CREATE TABLE `ACT_RU_TIMER_JOB` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `EXCLUSIVE_` tinyint(1) DEFAULT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CORRELATION_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `RETRIES_` int(11) DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_TIMER_JOB_EXCEPTION_STACK_ID` (`EXCEPTION_STACK_ID_`), + KEY `ACT_IDX_TIMER_JOB_CUSTOM_VALUES_ID` (`CUSTOM_VALUES_ID_`), + KEY `ACT_IDX_TIMER_JOB_CORRELATION_ID` (`CORRELATION_ID_`), + KEY `ACT_IDX_TJOB_SCOPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_TJOB_SUB_SCOPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_TJOB_SCOPE_DEF` (`SCOPE_DEFINITION_ID_`,`SCOPE_TYPE_`), + KEY `ACT_FK_TIMER_JOB_EXECUTION` (`EXECUTION_ID_`), + KEY `ACT_FK_TIMER_JOB_PROCESS_INSTANCE` (`PROCESS_INSTANCE_ID_`), + KEY `ACT_FK_TIMER_JOB_PROC_DEF` (`PROC_DEF_ID_`), + CONSTRAINT `ACT_FK_TIMER_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_TIMER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_TIMER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_TIMER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_TIMER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `ACT_RE_PROCDEF` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for ACT_RU_VARIABLE +-- ---------------------------- +DROP TABLE IF EXISTS `ACT_RU_VARIABLE`; +CREATE TABLE `ACT_RU_VARIABLE` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `TYPE_` varchar(255) COLLATE utf8_bin NOT NULL, + `NAME_` varchar(255) COLLATE utf8_bin NOT NULL, + `EXECUTION_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `PROC_INST_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TASK_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `BYTEARRAY_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `DOUBLE_` double DEFAULT NULL, + `LONG_` bigint(20) DEFAULT NULL, + `TEXT_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `TEXT2_` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + KEY `ACT_IDX_RU_VAR_SCOPE_ID_TYPE` (`SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_IDX_RU_VAR_SUB_ID_TYPE` (`SUB_SCOPE_ID_`,`SCOPE_TYPE_`), + KEY `ACT_FK_VAR_BYTEARRAY` (`BYTEARRAY_ID_`), + KEY `ACT_IDX_VARIABLE_TASK_ID` (`TASK_ID_`), + KEY `ACT_FK_VAR_EXE` (`EXECUTION_ID_`), + KEY `ACT_FK_VAR_PROCINST` (`PROC_INST_ID_`), + CONSTRAINT `ACT_FK_VAR_BYTEARRAY` FOREIGN KEY (`BYTEARRAY_ID_`) REFERENCES `ACT_GE_BYTEARRAY` (`ID_`), + CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`), + CONSTRAINT `ACT_FK_VAR_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of ACT_RU_VARIABLE +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RU_VARIABLE` VALUES ('7138d67f-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'string', 'startUserName', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL); +INSERT INTO `ACT_RU_VARIABLE` VALUES ('7138d680-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'long', 'deptPostLeader', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, NULL, 1440964519391137792, '1440964519391137792', NULL); +INSERT INTO `ACT_RU_VARIABLE` VALUES ('7138d681-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'string', 'initiator', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'userD', NULL); +INSERT INTO `ACT_RU_VARIABLE` VALUES ('713d6a69-1d1d-11ec-8336-3ae4f1d3c3af', 1, 'string', 'operationType', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'agree', NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for FLW_CHANNEL_DEFINITION +-- ---------------------------- +DROP TABLE IF EXISTS `FLW_CHANNEL_DEFINITION`; +CREATE TABLE `FLW_CHANNEL_DEFINITION` ( + `ID_` varchar(255) COLLATE utf8mb4_bin NOT NULL, + `NAME_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `VERSION_` int(11) DEFAULT NULL, + `KEY_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `CREATE_TIME_` datetime(3) DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `RESOURCE_NAME_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `DESCRIPTION_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + UNIQUE KEY `ACT_IDX_CHANNEL_DEF_UNIQ` (`KEY_`,`VERSION_`,`TENANT_ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Table structure for FLW_EVENT_DEFINITION +-- ---------------------------- +DROP TABLE IF EXISTS `FLW_EVENT_DEFINITION`; +CREATE TABLE `FLW_EVENT_DEFINITION` ( + `ID_` varchar(255) COLLATE utf8mb4_bin NOT NULL, + `NAME_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `VERSION_` int(11) DEFAULT NULL, + `KEY_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `RESOURCE_NAME_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `DESCRIPTION_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + PRIMARY KEY (`ID_`), + UNIQUE KEY `ACT_IDX_EVENT_DEF_UNIQ` (`KEY_`,`VERSION_`,`TENANT_ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Table structure for FLW_EVENT_DEPLOYMENT +-- ---------------------------- +DROP TABLE IF EXISTS `FLW_EVENT_DEPLOYMENT`; +CREATE TABLE `FLW_EVENT_DEPLOYMENT` ( + `ID_` varchar(255) COLLATE utf8mb4_bin NOT NULL, + `NAME_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `CATEGORY_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `DEPLOY_TIME_` datetime(3) DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `PARENT_DEPLOYMENT_ID_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Table structure for FLW_EVENT_RESOURCE +-- ---------------------------- +DROP TABLE IF EXISTS `FLW_EVENT_RESOURCE`; +CREATE TABLE `FLW_EVENT_RESOURCE` ( + `ID_` varchar(255) COLLATE utf8mb4_bin NOT NULL, + `NAME_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `RESOURCE_BYTES_` longblob, + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Table structure for FLW_EV_DATABASECHANGELOG +-- ---------------------------- +DROP TABLE IF EXISTS `FLW_EV_DATABASECHANGELOG`; +CREATE TABLE `FLW_EV_DATABASECHANGELOG` ( + `ID` varchar(255) COLLATE utf8mb4_bin NOT NULL, + `AUTHOR` varchar(255) COLLATE utf8mb4_bin NOT NULL, + `FILENAME` varchar(255) COLLATE utf8mb4_bin NOT NULL, + `DATEEXECUTED` datetime NOT NULL, + `ORDEREXECUTED` int(11) NOT NULL, + `EXECTYPE` varchar(10) COLLATE utf8mb4_bin NOT NULL, + `MD5SUM` varchar(35) COLLATE utf8mb4_bin DEFAULT NULL, + `DESCRIPTION` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `COMMENTS` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `TAG` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `LIQUIBASE` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL, + `CONTEXTS` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `LABELS` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `DEPLOYMENT_ID` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of FLW_EV_DATABASECHANGELOG +-- ---------------------------- +BEGIN; +INSERT INTO `FLW_EV_DATABASECHANGELOG` VALUES ('1', 'flowable', 'org/flowable/eventregistry/db/liquibase/flowable-eventregistry-db-changelog.xml', '2021-08-22 15:01:56', 1, 'EXECUTED', '8:1b0c48c9cf7945be799d868a2626d687', 'createTable tableName=FLW_EVENT_DEPLOYMENT; createTable tableName=FLW_EVENT_RESOURCE; createTable tableName=FLW_EVENT_DEFINITION; createIndex indexName=ACT_IDX_EVENT_DEF_UNIQ, tableName=FLW_EVENT_DEFINITION; createTable tableName=FLW_CHANNEL_DEFIN...', '', NULL, '3.8.9', NULL, NULL, '9615716437'); +COMMIT; + +-- ---------------------------- +-- Table structure for FLW_EV_DATABASECHANGELOGLOCK +-- ---------------------------- +DROP TABLE IF EXISTS `FLW_EV_DATABASECHANGELOGLOCK`; +CREATE TABLE `FLW_EV_DATABASECHANGELOGLOCK` ( + `ID` int(11) NOT NULL, + `LOCKED` bit(1) NOT NULL, + `LOCKGRANTED` datetime DEFAULT NULL, + `LOCKEDBY` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of FLW_EV_DATABASECHANGELOGLOCK +-- ---------------------------- +BEGIN; +INSERT INTO `FLW_EV_DATABASECHANGELOGLOCK` VALUES (1, b'0', NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for FLW_RU_BATCH +-- ---------------------------- +DROP TABLE IF EXISTS `FLW_RU_BATCH`; +CREATE TABLE `FLW_RU_BATCH` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `TYPE_` varchar(64) COLLATE utf8_bin NOT NULL, + `SEARCH_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SEARCH_KEY2_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` datetime(3) NOT NULL, + `COMPLETE_TIME_` datetime(3) DEFAULT NULL, + `STATUS_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `BATCH_DOC_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for FLW_RU_BATCH_PART +-- ---------------------------- +DROP TABLE IF EXISTS `FLW_RU_BATCH_PART`; +CREATE TABLE `FLW_RU_BATCH_PART` ( + `ID_` varchar(64) COLLATE utf8_bin NOT NULL, + `REV_` int(11) DEFAULT NULL, + `BATCH_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TYPE_` varchar(64) COLLATE utf8_bin NOT NULL, + `SCOPE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SCOPE_TYPE_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `SEARCH_KEY_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `SEARCH_KEY2_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `CREATE_TIME_` datetime(3) NOT NULL, + `COMPLETE_TIME_` datetime(3) DEFAULT NULL, + `STATUS_` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `RESULT_DOC_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `TENANT_ID_` varchar(255) COLLATE utf8_bin DEFAULT '', + PRIMARY KEY (`ID_`), + KEY `FLW_IDX_BATCH_PART` (`BATCH_ID_`), + CONSTRAINT `FLW_FK_BATCH_PART_PARENT` FOREIGN KEY (`BATCH_ID_`) REFERENCES `FLW_RU_BATCH` (`ID_`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for zz_area_code +-- ---------------------------- +DROP TABLE IF EXISTS `zz_area_code`; +CREATE TABLE `zz_area_code` ( + `area_id` bigint(20) unsigned NOT NULL COMMENT '行政区划主键Id', + `area_name` varchar(128) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '行政区划名称', + `area_level` int(11) NOT NULL COMMENT '行政区划级别 (1: 省级别 2: 市级别 3: 区级别)', + `parent_id` bigint(20) DEFAULT NULL COMMENT '父级行政区划Id', + PRIMARY KEY (`area_id`) USING BTREE, + KEY `idx_level` (`area_level`) USING BTREE, + KEY `idx_area_name` (`area_name`) USING BTREE, + KEY `idx_parent_id` (`parent_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='行政区划表'; + +-- ---------------------------- +-- Records of zz_area_code +-- ---------------------------- +BEGIN; +INSERT INTO `zz_area_code` VALUES (110000000000, '北京市', 1, NULL); +INSERT INTO `zz_area_code` VALUES (110100000000, '市辖区', 2, 110000000000); +INSERT INTO `zz_area_code` VALUES (110101000000, '东城区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110102000000, '西城区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110105000000, '朝阳区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110106000000, '丰台区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110107000000, '石景山区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110108000000, '海淀区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110109000000, '门头沟区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110111000000, '房山区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110112000000, '通州区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110113000000, '顺义区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110114000000, '昌平区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110115000000, '大兴区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110116000000, '怀柔区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110117000000, '平谷区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110118000000, '密云区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (110119000000, '延庆区', 3, 110100000000); +INSERT INTO `zz_area_code` VALUES (120000000000, '天津市', 1, NULL); +INSERT INTO `zz_area_code` VALUES (120100000000, '市辖区', 2, 120000000000); +INSERT INTO `zz_area_code` VALUES (120101000000, '和平区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120102000000, '河东区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120103000000, '河西区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120104000000, '南开区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120105000000, '河北区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120106000000, '红桥区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120110000000, '东丽区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120111000000, '西青区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120112000000, '津南区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120113000000, '北辰区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120114000000, '武清区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120115000000, '宝坻区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120116000000, '滨海新区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120117000000, '宁河区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120118000000, '静海区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (120119000000, '蓟州区', 3, 120100000000); +INSERT INTO `zz_area_code` VALUES (130000000000, '河北省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (130100000000, '石家庄市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (130101000000, '市辖区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130102000000, '长安区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130104000000, '桥西区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130105000000, '新华区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130107000000, '井陉矿区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130108000000, '裕华区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130109000000, '藁城区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130110000000, '鹿泉区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130111000000, '栾城区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130121000000, '井陉县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130123000000, '正定县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130125000000, '行唐县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130126000000, '灵寿县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130127000000, '高邑县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130128000000, '深泽县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130129000000, '赞皇县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130130000000, '无极县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130131000000, '平山县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130132000000, '元氏县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130133000000, '赵县', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130171000000, '石家庄高新技术产业开发区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130172000000, '石家庄循环化工园区', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130181000000, '辛集市', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130183000000, '晋州市', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130184000000, '新乐市', 3, 130100000000); +INSERT INTO `zz_area_code` VALUES (130200000000, '唐山市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (130201000000, '市辖区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130202000000, '路南区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130203000000, '路北区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130204000000, '古冶区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130205000000, '开平区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130207000000, '丰南区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130208000000, '丰润区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130209000000, '曹妃甸区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130224000000, '滦南县', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130225000000, '乐亭县', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130227000000, '迁西县', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130229000000, '玉田县', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130271000000, '唐山市芦台经济技术开发区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130272000000, '唐山市汉沽管理区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130273000000, '唐山高新技术产业开发区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130274000000, '河北唐山海港经济开发区', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130281000000, '遵化市', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130283000000, '迁安市', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130284000000, '滦州市', 3, 130200000000); +INSERT INTO `zz_area_code` VALUES (130300000000, '秦皇岛市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (130301000000, '市辖区', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130302000000, '海港区', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130303000000, '山海关区', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130304000000, '北戴河区', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130306000000, '抚宁区', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130321000000, '青龙满族自治县', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130322000000, '昌黎县', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130324000000, '卢龙县', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130371000000, '秦皇岛市经济技术开发区', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130372000000, '北戴河新区', 3, 130300000000); +INSERT INTO `zz_area_code` VALUES (130400000000, '邯郸市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (130401000000, '市辖区', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130402000000, '邯山区', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130403000000, '丛台区', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130404000000, '复兴区', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130406000000, '峰峰矿区', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130407000000, '肥乡区', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130408000000, '永年区', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130423000000, '临漳县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130424000000, '成安县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130425000000, '大名县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130426000000, '涉县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130427000000, '磁县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130430000000, '邱县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130431000000, '鸡泽县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130432000000, '广平县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130433000000, '馆陶县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130434000000, '魏县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130435000000, '曲周县', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130471000000, '邯郸经济技术开发区', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130473000000, '邯郸冀南新区', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130481000000, '武安市', 3, 130400000000); +INSERT INTO `zz_area_code` VALUES (130500000000, '邢台市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (130501000000, '市辖区', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130502000000, '桥东区', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130503000000, '桥西区', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130521000000, '邢台县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130522000000, '临城县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130523000000, '内丘县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130524000000, '柏乡县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130525000000, '隆尧县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130526000000, '任县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130527000000, '南和县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130528000000, '宁晋县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130529000000, '巨鹿县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130530000000, '新河县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130531000000, '广宗县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130532000000, '平乡县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130533000000, '威县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130534000000, '清河县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130535000000, '临西县', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130571000000, '河北邢台经济开发区', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130581000000, '南宫市', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130582000000, '沙河市', 3, 130500000000); +INSERT INTO `zz_area_code` VALUES (130600000000, '保定市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (130601000000, '市辖区', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130602000000, '竞秀区', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130606000000, '莲池区', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130607000000, '满城区', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130608000000, '清苑区', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130609000000, '徐水区', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130623000000, '涞水县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130624000000, '阜平县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130626000000, '定兴县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130627000000, '唐县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130628000000, '高阳县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130629000000, '容城县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130630000000, '涞源县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130631000000, '望都县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130632000000, '安新县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130633000000, '易县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130634000000, '曲阳县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130635000000, '蠡县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130636000000, '顺平县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130637000000, '博野县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130638000000, '雄县', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130671000000, '保定高新技术产业开发区', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130672000000, '保定白沟新城', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130681000000, '涿州市', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130682000000, '定州市', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130683000000, '安国市', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130684000000, '高碑店市', 3, 130600000000); +INSERT INTO `zz_area_code` VALUES (130700000000, '张家口市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (130701000000, '市辖区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130702000000, '桥东区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130703000000, '桥西区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130705000000, '宣化区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130706000000, '下花园区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130708000000, '万全区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130709000000, '崇礼区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130722000000, '张北县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130723000000, '康保县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130724000000, '沽源县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130725000000, '尚义县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130726000000, '蔚县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130727000000, '阳原县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130728000000, '怀安县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130730000000, '怀来县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130731000000, '涿鹿县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130732000000, '赤城县', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130771000000, '张家口市高新技术产业开发区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130772000000, '张家口市察北管理区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130773000000, '张家口市塞北管理区', 3, 130700000000); +INSERT INTO `zz_area_code` VALUES (130800000000, '承德市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (130801000000, '市辖区', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130802000000, '双桥区', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130803000000, '双滦区', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130804000000, '鹰手营子矿区', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130821000000, '承德县', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130822000000, '兴隆县', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130824000000, '滦平县', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130825000000, '隆化县', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130826000000, '丰宁满族自治县', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130827000000, '宽城满族自治县', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130828000000, '围场满族蒙古族自治县', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130871000000, '承德高新技术产业开发区', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130881000000, '平泉市', 3, 130800000000); +INSERT INTO `zz_area_code` VALUES (130900000000, '沧州市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (130901000000, '市辖区', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130902000000, '新华区', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130903000000, '运河区', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130921000000, '沧县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130922000000, '青县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130923000000, '东光县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130924000000, '海兴县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130925000000, '盐山县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130926000000, '肃宁县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130927000000, '南皮县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130928000000, '吴桥县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130929000000, '献县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130930000000, '孟村回族自治县', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130971000000, '河北沧州经济开发区', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130972000000, '沧州高新技术产业开发区', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130973000000, '沧州渤海新区', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130981000000, '泊头市', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130982000000, '任丘市', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130983000000, '黄骅市', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (130984000000, '河间市', 3, 130900000000); +INSERT INTO `zz_area_code` VALUES (131000000000, '廊坊市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (131001000000, '市辖区', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131002000000, '安次区', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131003000000, '广阳区', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131022000000, '固安县', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131023000000, '永清县', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131024000000, '香河县', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131025000000, '大城县', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131026000000, '文安县', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131028000000, '大厂回族自治县', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131071000000, '廊坊经济技术开发区', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131081000000, '霸州市', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131082000000, '三河市', 3, 131000000000); +INSERT INTO `zz_area_code` VALUES (131100000000, '衡水市', 2, 130000000000); +INSERT INTO `zz_area_code` VALUES (131101000000, '市辖区', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131102000000, '桃城区', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131103000000, '冀州区', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131121000000, '枣强县', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131122000000, '武邑县', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131123000000, '武强县', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131124000000, '饶阳县', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131125000000, '安平县', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131126000000, '故城县', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131127000000, '景县', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131128000000, '阜城县', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131171000000, '河北衡水高新技术产业开发区', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131172000000, '衡水滨湖新区', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (131182000000, '深州市', 3, 131100000000); +INSERT INTO `zz_area_code` VALUES (140000000000, '山西省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (140100000000, '太原市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (140101000000, '市辖区', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140105000000, '小店区', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140106000000, '迎泽区', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140107000000, '杏花岭区', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140108000000, '尖草坪区', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140109000000, '万柏林区', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140110000000, '晋源区', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140121000000, '清徐县', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140122000000, '阳曲县', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140123000000, '娄烦县', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140171000000, '山西转型综合改革示范区', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140181000000, '古交市', 3, 140100000000); +INSERT INTO `zz_area_code` VALUES (140200000000, '大同市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (140201000000, '市辖区', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140212000000, '新荣区', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140213000000, '平城区', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140214000000, '云冈区', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140215000000, '云州区', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140221000000, '阳高县', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140222000000, '天镇县', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140223000000, '广灵县', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140224000000, '灵丘县', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140225000000, '浑源县', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140226000000, '左云县', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140271000000, '山西大同经济开发区', 3, 140200000000); +INSERT INTO `zz_area_code` VALUES (140300000000, '阳泉市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (140301000000, '市辖区', 3, 140300000000); +INSERT INTO `zz_area_code` VALUES (140302000000, '城区', 3, 140300000000); +INSERT INTO `zz_area_code` VALUES (140303000000, '矿区', 3, 140300000000); +INSERT INTO `zz_area_code` VALUES (140311000000, '郊区', 3, 140300000000); +INSERT INTO `zz_area_code` VALUES (140321000000, '平定县', 3, 140300000000); +INSERT INTO `zz_area_code` VALUES (140322000000, '盂县', 3, 140300000000); +INSERT INTO `zz_area_code` VALUES (140400000000, '长治市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (140401000000, '市辖区', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140403000000, '潞州区', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140404000000, '上党区', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140405000000, '屯留区', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140406000000, '潞城区', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140423000000, '襄垣县', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140425000000, '平顺县', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140426000000, '黎城县', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140427000000, '壶关县', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140428000000, '长子县', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140429000000, '武乡县', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140430000000, '沁县', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140431000000, '沁源县', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140471000000, '山西长治高新技术产业园区', 3, 140400000000); +INSERT INTO `zz_area_code` VALUES (140500000000, '晋城市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (140501000000, '市辖区', 3, 140500000000); +INSERT INTO `zz_area_code` VALUES (140502000000, '城区', 3, 140500000000); +INSERT INTO `zz_area_code` VALUES (140521000000, '沁水县', 3, 140500000000); +INSERT INTO `zz_area_code` VALUES (140522000000, '阳城县', 3, 140500000000); +INSERT INTO `zz_area_code` VALUES (140524000000, '陵川县', 3, 140500000000); +INSERT INTO `zz_area_code` VALUES (140525000000, '泽州县', 3, 140500000000); +INSERT INTO `zz_area_code` VALUES (140581000000, '高平市', 3, 140500000000); +INSERT INTO `zz_area_code` VALUES (140600000000, '朔州市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (140601000000, '市辖区', 3, 140600000000); +INSERT INTO `zz_area_code` VALUES (140602000000, '朔城区', 3, 140600000000); +INSERT INTO `zz_area_code` VALUES (140603000000, '平鲁区', 3, 140600000000); +INSERT INTO `zz_area_code` VALUES (140621000000, '山阴县', 3, 140600000000); +INSERT INTO `zz_area_code` VALUES (140622000000, '应县', 3, 140600000000); +INSERT INTO `zz_area_code` VALUES (140623000000, '右玉县', 3, 140600000000); +INSERT INTO `zz_area_code` VALUES (140671000000, '山西朔州经济开发区', 3, 140600000000); +INSERT INTO `zz_area_code` VALUES (140681000000, '怀仁市', 3, 140600000000); +INSERT INTO `zz_area_code` VALUES (140700000000, '晋中市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (140701000000, '市辖区', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140702000000, '榆次区', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140721000000, '榆社县', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140722000000, '左权县', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140723000000, '和顺县', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140724000000, '昔阳县', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140725000000, '寿阳县', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140726000000, '太谷县', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140727000000, '祁县', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140728000000, '平遥县', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140729000000, '灵石县', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140781000000, '介休市', 3, 140700000000); +INSERT INTO `zz_area_code` VALUES (140800000000, '运城市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (140801000000, '市辖区', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140802000000, '盐湖区', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140821000000, '临猗县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140822000000, '万荣县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140823000000, '闻喜县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140824000000, '稷山县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140825000000, '新绛县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140826000000, '绛县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140827000000, '垣曲县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140828000000, '夏县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140829000000, '平陆县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140830000000, '芮城县', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140881000000, '永济市', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140882000000, '河津市', 3, 140800000000); +INSERT INTO `zz_area_code` VALUES (140900000000, '忻州市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (140901000000, '市辖区', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140902000000, '忻府区', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140921000000, '定襄县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140922000000, '五台县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140923000000, '代县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140924000000, '繁峙县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140925000000, '宁武县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140926000000, '静乐县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140927000000, '神池县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140928000000, '五寨县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140929000000, '岢岚县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140930000000, '河曲县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140931000000, '保德县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140932000000, '偏关县', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140971000000, '五台山风景名胜区', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (140981000000, '原平市', 3, 140900000000); +INSERT INTO `zz_area_code` VALUES (141000000000, '临汾市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (141001000000, '市辖区', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141002000000, '尧都区', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141021000000, '曲沃县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141022000000, '翼城县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141023000000, '襄汾县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141024000000, '洪洞县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141025000000, '古县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141026000000, '安泽县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141027000000, '浮山县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141028000000, '吉县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141029000000, '乡宁县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141030000000, '大宁县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141031000000, '隰县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141032000000, '永和县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141033000000, '蒲县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141034000000, '汾西县', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141081000000, '侯马市', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141082000000, '霍州市', 3, 141000000000); +INSERT INTO `zz_area_code` VALUES (141100000000, '吕梁市', 2, 140000000000); +INSERT INTO `zz_area_code` VALUES (141101000000, '市辖区', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141102000000, '离石区', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141121000000, '文水县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141122000000, '交城县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141123000000, '兴县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141124000000, '临县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141125000000, '柳林县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141126000000, '石楼县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141127000000, '岚县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141128000000, '方山县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141129000000, '中阳县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141130000000, '交口县', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141181000000, '孝义市', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (141182000000, '汾阳市', 3, 141100000000); +INSERT INTO `zz_area_code` VALUES (150000000000, '内蒙古自治区', 1, NULL); +INSERT INTO `zz_area_code` VALUES (150100000000, '呼和浩特市', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (150101000000, '市辖区', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150102000000, '新城区', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150103000000, '回民区', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150104000000, '玉泉区', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150105000000, '赛罕区', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150121000000, '土默特左旗', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150122000000, '托克托县', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150123000000, '和林格尔县', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150124000000, '清水河县', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150125000000, '武川县', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150171000000, '呼和浩特金海工业园区', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150172000000, '呼和浩特经济技术开发区', 3, 150100000000); +INSERT INTO `zz_area_code` VALUES (150200000000, '包头市', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (150201000000, '市辖区', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150202000000, '东河区', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150203000000, '昆都仑区', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150204000000, '青山区', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150205000000, '石拐区', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150206000000, '白云鄂博矿区', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150207000000, '九原区', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150221000000, '土默特右旗', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150222000000, '固阳县', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150223000000, '达尔罕茂明安联合旗', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150271000000, '包头稀土高新技术产业开发区', 3, 150200000000); +INSERT INTO `zz_area_code` VALUES (150300000000, '乌海市', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (150301000000, '市辖区', 3, 150300000000); +INSERT INTO `zz_area_code` VALUES (150302000000, '海勃湾区', 3, 150300000000); +INSERT INTO `zz_area_code` VALUES (150303000000, '海南区', 3, 150300000000); +INSERT INTO `zz_area_code` VALUES (150304000000, '乌达区', 3, 150300000000); +INSERT INTO `zz_area_code` VALUES (150400000000, '赤峰市', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (150401000000, '市辖区', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150402000000, '红山区', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150403000000, '元宝山区', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150404000000, '松山区', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150421000000, '阿鲁科尔沁旗', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150422000000, '巴林左旗', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150423000000, '巴林右旗', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150424000000, '林西县', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150425000000, '克什克腾旗', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150426000000, '翁牛特旗', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150428000000, '喀喇沁旗', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150429000000, '宁城县', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150430000000, '敖汉旗', 3, 150400000000); +INSERT INTO `zz_area_code` VALUES (150500000000, '通辽市', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (150501000000, '市辖区', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150502000000, '科尔沁区', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150521000000, '科尔沁左翼中旗', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150522000000, '科尔沁左翼后旗', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150523000000, '开鲁县', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150524000000, '库伦旗', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150525000000, '奈曼旗', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150526000000, '扎鲁特旗', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150571000000, '通辽经济技术开发区', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150581000000, '霍林郭勒市', 3, 150500000000); +INSERT INTO `zz_area_code` VALUES (150600000000, '鄂尔多斯市', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (150601000000, '市辖区', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150602000000, '东胜区', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150603000000, '康巴什区', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150621000000, '达拉特旗', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150622000000, '准格尔旗', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150623000000, '鄂托克前旗', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150624000000, '鄂托克旗', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150625000000, '杭锦旗', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150626000000, '乌审旗', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150627000000, '伊金霍洛旗', 3, 150600000000); +INSERT INTO `zz_area_code` VALUES (150700000000, '呼伦贝尔市', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (150701000000, '市辖区', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150702000000, '海拉尔区', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150703000000, '扎赉诺尔区', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150721000000, '阿荣旗', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150722000000, '莫力达瓦达斡尔族自治旗', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150723000000, '鄂伦春自治旗', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150724000000, '鄂温克族自治旗', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150725000000, '陈巴尔虎旗', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150726000000, '新巴尔虎左旗', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150727000000, '新巴尔虎右旗', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150781000000, '满洲里市', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150782000000, '牙克石市', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150783000000, '扎兰屯市', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150784000000, '额尔古纳市', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150785000000, '根河市', 3, 150700000000); +INSERT INTO `zz_area_code` VALUES (150800000000, '巴彦淖尔市', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (150801000000, '市辖区', 3, 150800000000); +INSERT INTO `zz_area_code` VALUES (150802000000, '临河区', 3, 150800000000); +INSERT INTO `zz_area_code` VALUES (150821000000, '五原县', 3, 150800000000); +INSERT INTO `zz_area_code` VALUES (150822000000, '磴口县', 3, 150800000000); +INSERT INTO `zz_area_code` VALUES (150823000000, '乌拉特前旗', 3, 150800000000); +INSERT INTO `zz_area_code` VALUES (150824000000, '乌拉特中旗', 3, 150800000000); +INSERT INTO `zz_area_code` VALUES (150825000000, '乌拉特后旗', 3, 150800000000); +INSERT INTO `zz_area_code` VALUES (150826000000, '杭锦后旗', 3, 150800000000); +INSERT INTO `zz_area_code` VALUES (150900000000, '乌兰察布市', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (150901000000, '市辖区', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150902000000, '集宁区', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150921000000, '卓资县', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150922000000, '化德县', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150923000000, '商都县', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150924000000, '兴和县', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150925000000, '凉城县', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150926000000, '察哈尔右翼前旗', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150927000000, '察哈尔右翼中旗', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150928000000, '察哈尔右翼后旗', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150929000000, '四子王旗', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (150981000000, '丰镇市', 3, 150900000000); +INSERT INTO `zz_area_code` VALUES (152200000000, '兴安盟', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (152201000000, '乌兰浩特市', 3, 152200000000); +INSERT INTO `zz_area_code` VALUES (152202000000, '阿尔山市', 3, 152200000000); +INSERT INTO `zz_area_code` VALUES (152221000000, '科尔沁右翼前旗', 3, 152200000000); +INSERT INTO `zz_area_code` VALUES (152222000000, '科尔沁右翼中旗', 3, 152200000000); +INSERT INTO `zz_area_code` VALUES (152223000000, '扎赉特旗', 3, 152200000000); +INSERT INTO `zz_area_code` VALUES (152224000000, '突泉县', 3, 152200000000); +INSERT INTO `zz_area_code` VALUES (152500000000, '锡林郭勒盟', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (152501000000, '二连浩特市', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152502000000, '锡林浩特市', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152522000000, '阿巴嘎旗', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152523000000, '苏尼特左旗', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152524000000, '苏尼特右旗', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152525000000, '东乌珠穆沁旗', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152526000000, '西乌珠穆沁旗', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152527000000, '太仆寺旗', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152528000000, '镶黄旗', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152529000000, '正镶白旗', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152530000000, '正蓝旗', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152531000000, '多伦县', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152571000000, '乌拉盖管委会', 3, 152500000000); +INSERT INTO `zz_area_code` VALUES (152900000000, '阿拉善盟', 2, 150000000000); +INSERT INTO `zz_area_code` VALUES (152921000000, '阿拉善左旗', 3, 152900000000); +INSERT INTO `zz_area_code` VALUES (152922000000, '阿拉善右旗', 3, 152900000000); +INSERT INTO `zz_area_code` VALUES (152923000000, '额济纳旗', 3, 152900000000); +INSERT INTO `zz_area_code` VALUES (152971000000, '内蒙古阿拉善经济开发区', 3, 152900000000); +INSERT INTO `zz_area_code` VALUES (210000000000, '辽宁省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (210100000000, '沈阳市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (210101000000, '市辖区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210102000000, '和平区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210103000000, '沈河区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210104000000, '大东区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210105000000, '皇姑区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210106000000, '铁西区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210111000000, '苏家屯区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210112000000, '浑南区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210113000000, '沈北新区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210114000000, '于洪区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210115000000, '辽中区', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210123000000, '康平县', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210124000000, '法库县', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210181000000, '新民市', 3, 210100000000); +INSERT INTO `zz_area_code` VALUES (210200000000, '大连市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (210201000000, '市辖区', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210202000000, '中山区', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210203000000, '西岗区', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210204000000, '沙河口区', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210211000000, '甘井子区', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210212000000, '旅顺口区', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210213000000, '金州区', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210214000000, '普兰店区', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210224000000, '长海县', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210281000000, '瓦房店市', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210283000000, '庄河市', 3, 210200000000); +INSERT INTO `zz_area_code` VALUES (210300000000, '鞍山市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (210301000000, '市辖区', 3, 210300000000); +INSERT INTO `zz_area_code` VALUES (210302000000, '铁东区', 3, 210300000000); +INSERT INTO `zz_area_code` VALUES (210303000000, '铁西区', 3, 210300000000); +INSERT INTO `zz_area_code` VALUES (210304000000, '立山区', 3, 210300000000); +INSERT INTO `zz_area_code` VALUES (210311000000, '千山区', 3, 210300000000); +INSERT INTO `zz_area_code` VALUES (210321000000, '台安县', 3, 210300000000); +INSERT INTO `zz_area_code` VALUES (210323000000, '岫岩满族自治县', 3, 210300000000); +INSERT INTO `zz_area_code` VALUES (210381000000, '海城市', 3, 210300000000); +INSERT INTO `zz_area_code` VALUES (210400000000, '抚顺市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (210401000000, '市辖区', 3, 210400000000); +INSERT INTO `zz_area_code` VALUES (210402000000, '新抚区', 3, 210400000000); +INSERT INTO `zz_area_code` VALUES (210403000000, '东洲区', 3, 210400000000); +INSERT INTO `zz_area_code` VALUES (210404000000, '望花区', 3, 210400000000); +INSERT INTO `zz_area_code` VALUES (210411000000, '顺城区', 3, 210400000000); +INSERT INTO `zz_area_code` VALUES (210421000000, '抚顺县', 3, 210400000000); +INSERT INTO `zz_area_code` VALUES (210422000000, '新宾满族自治县', 3, 210400000000); +INSERT INTO `zz_area_code` VALUES (210423000000, '清原满族自治县', 3, 210400000000); +INSERT INTO `zz_area_code` VALUES (210500000000, '本溪市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (210501000000, '市辖区', 3, 210500000000); +INSERT INTO `zz_area_code` VALUES (210502000000, '平山区', 3, 210500000000); +INSERT INTO `zz_area_code` VALUES (210503000000, '溪湖区', 3, 210500000000); +INSERT INTO `zz_area_code` VALUES (210504000000, '明山区', 3, 210500000000); +INSERT INTO `zz_area_code` VALUES (210505000000, '南芬区', 3, 210500000000); +INSERT INTO `zz_area_code` VALUES (210521000000, '本溪满族自治县', 3, 210500000000); +INSERT INTO `zz_area_code` VALUES (210522000000, '桓仁满族自治县', 3, 210500000000); +INSERT INTO `zz_area_code` VALUES (210600000000, '丹东市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (210601000000, '市辖区', 3, 210600000000); +INSERT INTO `zz_area_code` VALUES (210602000000, '元宝区', 3, 210600000000); +INSERT INTO `zz_area_code` VALUES (210603000000, '振兴区', 3, 210600000000); +INSERT INTO `zz_area_code` VALUES (210604000000, '振安区', 3, 210600000000); +INSERT INTO `zz_area_code` VALUES (210624000000, '宽甸满族自治县', 3, 210600000000); +INSERT INTO `zz_area_code` VALUES (210681000000, '东港市', 3, 210600000000); +INSERT INTO `zz_area_code` VALUES (210682000000, '凤城市', 3, 210600000000); +INSERT INTO `zz_area_code` VALUES (210700000000, '锦州市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (210701000000, '市辖区', 3, 210700000000); +INSERT INTO `zz_area_code` VALUES (210702000000, '古塔区', 3, 210700000000); +INSERT INTO `zz_area_code` VALUES (210703000000, '凌河区', 3, 210700000000); +INSERT INTO `zz_area_code` VALUES (210711000000, '太和区', 3, 210700000000); +INSERT INTO `zz_area_code` VALUES (210726000000, '黑山县', 3, 210700000000); +INSERT INTO `zz_area_code` VALUES (210727000000, '义县', 3, 210700000000); +INSERT INTO `zz_area_code` VALUES (210781000000, '凌海市', 3, 210700000000); +INSERT INTO `zz_area_code` VALUES (210782000000, '北镇市', 3, 210700000000); +INSERT INTO `zz_area_code` VALUES (210800000000, '营口市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (210801000000, '市辖区', 3, 210800000000); +INSERT INTO `zz_area_code` VALUES (210802000000, '站前区', 3, 210800000000); +INSERT INTO `zz_area_code` VALUES (210803000000, '西市区', 3, 210800000000); +INSERT INTO `zz_area_code` VALUES (210804000000, '鲅鱼圈区', 3, 210800000000); +INSERT INTO `zz_area_code` VALUES (210811000000, '老边区', 3, 210800000000); +INSERT INTO `zz_area_code` VALUES (210881000000, '盖州市', 3, 210800000000); +INSERT INTO `zz_area_code` VALUES (210882000000, '大石桥市', 3, 210800000000); +INSERT INTO `zz_area_code` VALUES (210900000000, '阜新市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (210901000000, '市辖区', 3, 210900000000); +INSERT INTO `zz_area_code` VALUES (210902000000, '海州区', 3, 210900000000); +INSERT INTO `zz_area_code` VALUES (210903000000, '新邱区', 3, 210900000000); +INSERT INTO `zz_area_code` VALUES (210904000000, '太平区', 3, 210900000000); +INSERT INTO `zz_area_code` VALUES (210905000000, '清河门区', 3, 210900000000); +INSERT INTO `zz_area_code` VALUES (210911000000, '细河区', 3, 210900000000); +INSERT INTO `zz_area_code` VALUES (210921000000, '阜新蒙古族自治县', 3, 210900000000); +INSERT INTO `zz_area_code` VALUES (210922000000, '彰武县', 3, 210900000000); +INSERT INTO `zz_area_code` VALUES (211000000000, '辽阳市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (211001000000, '市辖区', 3, 211000000000); +INSERT INTO `zz_area_code` VALUES (211002000000, '白塔区', 3, 211000000000); +INSERT INTO `zz_area_code` VALUES (211003000000, '文圣区', 3, 211000000000); +INSERT INTO `zz_area_code` VALUES (211004000000, '宏伟区', 3, 211000000000); +INSERT INTO `zz_area_code` VALUES (211005000000, '弓长岭区', 3, 211000000000); +INSERT INTO `zz_area_code` VALUES (211011000000, '太子河区', 3, 211000000000); +INSERT INTO `zz_area_code` VALUES (211021000000, '辽阳县', 3, 211000000000); +INSERT INTO `zz_area_code` VALUES (211081000000, '灯塔市', 3, 211000000000); +INSERT INTO `zz_area_code` VALUES (211100000000, '盘锦市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (211101000000, '市辖区', 3, 211100000000); +INSERT INTO `zz_area_code` VALUES (211102000000, '双台子区', 3, 211100000000); +INSERT INTO `zz_area_code` VALUES (211103000000, '兴隆台区', 3, 211100000000); +INSERT INTO `zz_area_code` VALUES (211104000000, '大洼区', 3, 211100000000); +INSERT INTO `zz_area_code` VALUES (211122000000, '盘山县', 3, 211100000000); +INSERT INTO `zz_area_code` VALUES (211200000000, '铁岭市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (211201000000, '市辖区', 3, 211200000000); +INSERT INTO `zz_area_code` VALUES (211202000000, '银州区', 3, 211200000000); +INSERT INTO `zz_area_code` VALUES (211204000000, '清河区', 3, 211200000000); +INSERT INTO `zz_area_code` VALUES (211221000000, '铁岭县', 3, 211200000000); +INSERT INTO `zz_area_code` VALUES (211223000000, '西丰县', 3, 211200000000); +INSERT INTO `zz_area_code` VALUES (211224000000, '昌图县', 3, 211200000000); +INSERT INTO `zz_area_code` VALUES (211281000000, '调兵山市', 3, 211200000000); +INSERT INTO `zz_area_code` VALUES (211282000000, '开原市', 3, 211200000000); +INSERT INTO `zz_area_code` VALUES (211300000000, '朝阳市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (211301000000, '市辖区', 3, 211300000000); +INSERT INTO `zz_area_code` VALUES (211302000000, '双塔区', 3, 211300000000); +INSERT INTO `zz_area_code` VALUES (211303000000, '龙城区', 3, 211300000000); +INSERT INTO `zz_area_code` VALUES (211321000000, '朝阳县', 3, 211300000000); +INSERT INTO `zz_area_code` VALUES (211322000000, '建平县', 3, 211300000000); +INSERT INTO `zz_area_code` VALUES (211324000000, '喀喇沁左翼蒙古族自治县', 3, 211300000000); +INSERT INTO `zz_area_code` VALUES (211381000000, '北票市', 3, 211300000000); +INSERT INTO `zz_area_code` VALUES (211382000000, '凌源市', 3, 211300000000); +INSERT INTO `zz_area_code` VALUES (211400000000, '葫芦岛市', 2, 210000000000); +INSERT INTO `zz_area_code` VALUES (211401000000, '市辖区', 3, 211400000000); +INSERT INTO `zz_area_code` VALUES (211402000000, '连山区', 3, 211400000000); +INSERT INTO `zz_area_code` VALUES (211403000000, '龙港区', 3, 211400000000); +INSERT INTO `zz_area_code` VALUES (211404000000, '南票区', 3, 211400000000); +INSERT INTO `zz_area_code` VALUES (211421000000, '绥中县', 3, 211400000000); +INSERT INTO `zz_area_code` VALUES (211422000000, '建昌县', 3, 211400000000); +INSERT INTO `zz_area_code` VALUES (211481000000, '兴城市', 3, 211400000000); +INSERT INTO `zz_area_code` VALUES (220000000000, '吉林省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (220100000000, '长春市', 2, 220000000000); +INSERT INTO `zz_area_code` VALUES (220101000000, '市辖区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220102000000, '南关区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220103000000, '宽城区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220104000000, '朝阳区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220105000000, '二道区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220106000000, '绿园区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220112000000, '双阳区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220113000000, '九台区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220122000000, '农安县', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220171000000, '长春经济技术开发区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220172000000, '长春净月高新技术产业开发区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220173000000, '长春高新技术产业开发区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220174000000, '长春汽车经济技术开发区', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220182000000, '榆树市', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220183000000, '德惠市', 3, 220100000000); +INSERT INTO `zz_area_code` VALUES (220200000000, '吉林市', 2, 220000000000); +INSERT INTO `zz_area_code` VALUES (220201000000, '市辖区', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220202000000, '昌邑区', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220203000000, '龙潭区', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220204000000, '船营区', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220211000000, '丰满区', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220221000000, '永吉县', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220271000000, '吉林经济开发区', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220272000000, '吉林高新技术产业开发区', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220273000000, '吉林中国新加坡食品区', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220281000000, '蛟河市', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220282000000, '桦甸市', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220283000000, '舒兰市', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220284000000, '磐石市', 3, 220200000000); +INSERT INTO `zz_area_code` VALUES (220300000000, '四平市', 2, 220000000000); +INSERT INTO `zz_area_code` VALUES (220301000000, '市辖区', 3, 220300000000); +INSERT INTO `zz_area_code` VALUES (220302000000, '铁西区', 3, 220300000000); +INSERT INTO `zz_area_code` VALUES (220303000000, '铁东区', 3, 220300000000); +INSERT INTO `zz_area_code` VALUES (220322000000, '梨树县', 3, 220300000000); +INSERT INTO `zz_area_code` VALUES (220323000000, '伊通满族自治县', 3, 220300000000); +INSERT INTO `zz_area_code` VALUES (220381000000, '公主岭市', 3, 220300000000); +INSERT INTO `zz_area_code` VALUES (220382000000, '双辽市', 3, 220300000000); +INSERT INTO `zz_area_code` VALUES (220400000000, '辽源市', 2, 220000000000); +INSERT INTO `zz_area_code` VALUES (220401000000, '市辖区', 3, 220400000000); +INSERT INTO `zz_area_code` VALUES (220402000000, '龙山区', 3, 220400000000); +INSERT INTO `zz_area_code` VALUES (220403000000, '西安区', 3, 220400000000); +INSERT INTO `zz_area_code` VALUES (220421000000, '东丰县', 3, 220400000000); +INSERT INTO `zz_area_code` VALUES (220422000000, '东辽县', 3, 220400000000); +INSERT INTO `zz_area_code` VALUES (220500000000, '通化市', 2, 220000000000); +INSERT INTO `zz_area_code` VALUES (220501000000, '市辖区', 3, 220500000000); +INSERT INTO `zz_area_code` VALUES (220502000000, '东昌区', 3, 220500000000); +INSERT INTO `zz_area_code` VALUES (220503000000, '二道江区', 3, 220500000000); +INSERT INTO `zz_area_code` VALUES (220521000000, '通化县', 3, 220500000000); +INSERT INTO `zz_area_code` VALUES (220523000000, '辉南县', 3, 220500000000); +INSERT INTO `zz_area_code` VALUES (220524000000, '柳河县', 3, 220500000000); +INSERT INTO `zz_area_code` VALUES (220581000000, '梅河口市', 3, 220500000000); +INSERT INTO `zz_area_code` VALUES (220582000000, '集安市', 3, 220500000000); +INSERT INTO `zz_area_code` VALUES (220600000000, '白山市', 2, 220000000000); +INSERT INTO `zz_area_code` VALUES (220601000000, '市辖区', 3, 220600000000); +INSERT INTO `zz_area_code` VALUES (220602000000, '浑江区', 3, 220600000000); +INSERT INTO `zz_area_code` VALUES (220605000000, '江源区', 3, 220600000000); +INSERT INTO `zz_area_code` VALUES (220621000000, '抚松县', 3, 220600000000); +INSERT INTO `zz_area_code` VALUES (220622000000, '靖宇县', 3, 220600000000); +INSERT INTO `zz_area_code` VALUES (220623000000, '长白朝鲜族自治县', 3, 220600000000); +INSERT INTO `zz_area_code` VALUES (220681000000, '临江市', 3, 220600000000); +INSERT INTO `zz_area_code` VALUES (220700000000, '松原市', 2, 220000000000); +INSERT INTO `zz_area_code` VALUES (220701000000, '市辖区', 3, 220700000000); +INSERT INTO `zz_area_code` VALUES (220702000000, '宁江区', 3, 220700000000); +INSERT INTO `zz_area_code` VALUES (220721000000, '前郭尔罗斯蒙古族自治县', 3, 220700000000); +INSERT INTO `zz_area_code` VALUES (220722000000, '长岭县', 3, 220700000000); +INSERT INTO `zz_area_code` VALUES (220723000000, '乾安县', 3, 220700000000); +INSERT INTO `zz_area_code` VALUES (220771000000, '吉林松原经济开发区', 3, 220700000000); +INSERT INTO `zz_area_code` VALUES (220781000000, '扶余市', 3, 220700000000); +INSERT INTO `zz_area_code` VALUES (220800000000, '白城市', 2, 220000000000); +INSERT INTO `zz_area_code` VALUES (220801000000, '市辖区', 3, 220800000000); +INSERT INTO `zz_area_code` VALUES (220802000000, '洮北区', 3, 220800000000); +INSERT INTO `zz_area_code` VALUES (220821000000, '镇赉县', 3, 220800000000); +INSERT INTO `zz_area_code` VALUES (220822000000, '通榆县', 3, 220800000000); +INSERT INTO `zz_area_code` VALUES (220871000000, '吉林白城经济开发区', 3, 220800000000); +INSERT INTO `zz_area_code` VALUES (220881000000, '洮南市', 3, 220800000000); +INSERT INTO `zz_area_code` VALUES (220882000000, '大安市', 3, 220800000000); +INSERT INTO `zz_area_code` VALUES (222400000000, '延边朝鲜族自治州', 2, 220000000000); +INSERT INTO `zz_area_code` VALUES (222401000000, '延吉市', 3, 222400000000); +INSERT INTO `zz_area_code` VALUES (222402000000, '图们市', 3, 222400000000); +INSERT INTO `zz_area_code` VALUES (222403000000, '敦化市', 3, 222400000000); +INSERT INTO `zz_area_code` VALUES (222404000000, '珲春市', 3, 222400000000); +INSERT INTO `zz_area_code` VALUES (222405000000, '龙井市', 3, 222400000000); +INSERT INTO `zz_area_code` VALUES (222406000000, '和龙市', 3, 222400000000); +INSERT INTO `zz_area_code` VALUES (222424000000, '汪清县', 3, 222400000000); +INSERT INTO `zz_area_code` VALUES (222426000000, '安图县', 3, 222400000000); +INSERT INTO `zz_area_code` VALUES (230000000000, '黑龙江省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (230100000000, '哈尔滨市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (230101000000, '市辖区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230102000000, '道里区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230103000000, '南岗区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230104000000, '道外区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230108000000, '平房区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230109000000, '松北区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230110000000, '香坊区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230111000000, '呼兰区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230112000000, '阿城区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230113000000, '双城区', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230123000000, '依兰县', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230124000000, '方正县', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230125000000, '宾县', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230126000000, '巴彦县', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230127000000, '木兰县', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230128000000, '通河县', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230129000000, '延寿县', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230183000000, '尚志市', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230184000000, '五常市', 3, 230100000000); +INSERT INTO `zz_area_code` VALUES (230200000000, '齐齐哈尔市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (230201000000, '市辖区', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230202000000, '龙沙区', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230203000000, '建华区', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230204000000, '铁锋区', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230205000000, '昂昂溪区', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230206000000, '富拉尔基区', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230207000000, '碾子山区', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230208000000, '梅里斯达斡尔族区', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230221000000, '龙江县', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230223000000, '依安县', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230224000000, '泰来县', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230225000000, '甘南县', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230227000000, '富裕县', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230229000000, '克山县', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230230000000, '克东县', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230231000000, '拜泉县', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230281000000, '讷河市', 3, 230200000000); +INSERT INTO `zz_area_code` VALUES (230300000000, '鸡西市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (230301000000, '市辖区', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230302000000, '鸡冠区', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230303000000, '恒山区', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230304000000, '滴道区', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230305000000, '梨树区', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230306000000, '城子河区', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230307000000, '麻山区', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230321000000, '鸡东县', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230381000000, '虎林市', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230382000000, '密山市', 3, 230300000000); +INSERT INTO `zz_area_code` VALUES (230400000000, '鹤岗市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (230401000000, '市辖区', 3, 230400000000); +INSERT INTO `zz_area_code` VALUES (230402000000, '向阳区', 3, 230400000000); +INSERT INTO `zz_area_code` VALUES (230403000000, '工农区', 3, 230400000000); +INSERT INTO `zz_area_code` VALUES (230404000000, '南山区', 3, 230400000000); +INSERT INTO `zz_area_code` VALUES (230405000000, '兴安区', 3, 230400000000); +INSERT INTO `zz_area_code` VALUES (230406000000, '东山区', 3, 230400000000); +INSERT INTO `zz_area_code` VALUES (230407000000, '兴山区', 3, 230400000000); +INSERT INTO `zz_area_code` VALUES (230421000000, '萝北县', 3, 230400000000); +INSERT INTO `zz_area_code` VALUES (230422000000, '绥滨县', 3, 230400000000); +INSERT INTO `zz_area_code` VALUES (230500000000, '双鸭山市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (230501000000, '市辖区', 3, 230500000000); +INSERT INTO `zz_area_code` VALUES (230502000000, '尖山区', 3, 230500000000); +INSERT INTO `zz_area_code` VALUES (230503000000, '岭东区', 3, 230500000000); +INSERT INTO `zz_area_code` VALUES (230505000000, '四方台区', 3, 230500000000); +INSERT INTO `zz_area_code` VALUES (230506000000, '宝山区', 3, 230500000000); +INSERT INTO `zz_area_code` VALUES (230521000000, '集贤县', 3, 230500000000); +INSERT INTO `zz_area_code` VALUES (230522000000, '友谊县', 3, 230500000000); +INSERT INTO `zz_area_code` VALUES (230523000000, '宝清县', 3, 230500000000); +INSERT INTO `zz_area_code` VALUES (230524000000, '饶河县', 3, 230500000000); +INSERT INTO `zz_area_code` VALUES (230600000000, '大庆市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (230601000000, '市辖区', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230602000000, '萨尔图区', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230603000000, '龙凤区', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230604000000, '让胡路区', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230605000000, '红岗区', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230606000000, '大同区', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230621000000, '肇州县', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230622000000, '肇源县', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230623000000, '林甸县', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230624000000, '杜尔伯特蒙古族自治县', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230671000000, '大庆高新技术产业开发区', 3, 230600000000); +INSERT INTO `zz_area_code` VALUES (230700000000, '伊春市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (230701000000, '市辖区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230702000000, '伊春区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230703000000, '南岔区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230704000000, '友好区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230705000000, '西林区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230706000000, '翠峦区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230707000000, '新青区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230708000000, '美溪区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230709000000, '金山屯区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230710000000, '五营区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230711000000, '乌马河区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230712000000, '汤旺河区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230713000000, '带岭区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230714000000, '乌伊岭区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230715000000, '红星区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230716000000, '上甘岭区', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230722000000, '嘉荫县', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230781000000, '铁力市', 3, 230700000000); +INSERT INTO `zz_area_code` VALUES (230800000000, '佳木斯市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (230801000000, '市辖区', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230803000000, '向阳区', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230804000000, '前进区', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230805000000, '东风区', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230811000000, '郊区', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230822000000, '桦南县', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230826000000, '桦川县', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230828000000, '汤原县', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230881000000, '同江市', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230882000000, '富锦市', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230883000000, '抚远市', 3, 230800000000); +INSERT INTO `zz_area_code` VALUES (230900000000, '七台河市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (230901000000, '市辖区', 3, 230900000000); +INSERT INTO `zz_area_code` VALUES (230902000000, '新兴区', 3, 230900000000); +INSERT INTO `zz_area_code` VALUES (230903000000, '桃山区', 3, 230900000000); +INSERT INTO `zz_area_code` VALUES (230904000000, '茄子河区', 3, 230900000000); +INSERT INTO `zz_area_code` VALUES (230921000000, '勃利县', 3, 230900000000); +INSERT INTO `zz_area_code` VALUES (231000000000, '牡丹江市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (231001000000, '市辖区', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231002000000, '东安区', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231003000000, '阳明区', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231004000000, '爱民区', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231005000000, '西安区', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231025000000, '林口县', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231071000000, '牡丹江经济技术开发区', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231081000000, '绥芬河市', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231083000000, '海林市', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231084000000, '宁安市', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231085000000, '穆棱市', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231086000000, '东宁市', 3, 231000000000); +INSERT INTO `zz_area_code` VALUES (231100000000, '黑河市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (231101000000, '市辖区', 3, 231100000000); +INSERT INTO `zz_area_code` VALUES (231102000000, '爱辉区', 3, 231100000000); +INSERT INTO `zz_area_code` VALUES (231121000000, '嫩江县', 3, 231100000000); +INSERT INTO `zz_area_code` VALUES (231123000000, '逊克县', 3, 231100000000); +INSERT INTO `zz_area_code` VALUES (231124000000, '孙吴县', 3, 231100000000); +INSERT INTO `zz_area_code` VALUES (231181000000, '北安市', 3, 231100000000); +INSERT INTO `zz_area_code` VALUES (231182000000, '五大连池市', 3, 231100000000); +INSERT INTO `zz_area_code` VALUES (231200000000, '绥化市', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (231201000000, '市辖区', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231202000000, '北林区', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231221000000, '望奎县', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231222000000, '兰西县', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231223000000, '青冈县', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231224000000, '庆安县', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231225000000, '明水县', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231226000000, '绥棱县', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231281000000, '安达市', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231282000000, '肇东市', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (231283000000, '海伦市', 3, 231200000000); +INSERT INTO `zz_area_code` VALUES (232700000000, '大兴安岭地区', 2, 230000000000); +INSERT INTO `zz_area_code` VALUES (232701000000, '漠河市', 3, 232700000000); +INSERT INTO `zz_area_code` VALUES (232721000000, '呼玛县', 3, 232700000000); +INSERT INTO `zz_area_code` VALUES (232722000000, '塔河县', 3, 232700000000); +INSERT INTO `zz_area_code` VALUES (232761000000, '加格达奇区', 3, 232700000000); +INSERT INTO `zz_area_code` VALUES (232762000000, '松岭区', 3, 232700000000); +INSERT INTO `zz_area_code` VALUES (232763000000, '新林区', 3, 232700000000); +INSERT INTO `zz_area_code` VALUES (232764000000, '呼中区', 3, 232700000000); +INSERT INTO `zz_area_code` VALUES (310000000000, '上海市', 1, NULL); +INSERT INTO `zz_area_code` VALUES (310100000000, '市辖区', 2, 310000000000); +INSERT INTO `zz_area_code` VALUES (310101000000, '黄浦区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310104000000, '徐汇区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310105000000, '长宁区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310106000000, '静安区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310107000000, '普陀区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310109000000, '虹口区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310110000000, '杨浦区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310112000000, '闵行区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310113000000, '宝山区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310114000000, '嘉定区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310115000000, '浦东新区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310116000000, '金山区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310117000000, '松江区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310118000000, '青浦区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310120000000, '奉贤区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (310151000000, '崇明区', 3, 310100000000); +INSERT INTO `zz_area_code` VALUES (320000000000, '江苏省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (320100000000, '南京市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (320101000000, '市辖区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320102000000, '玄武区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320104000000, '秦淮区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320105000000, '建邺区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320106000000, '鼓楼区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320111000000, '浦口区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320113000000, '栖霞区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320114000000, '雨花台区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320115000000, '江宁区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320116000000, '六合区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320117000000, '溧水区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320118000000, '高淳区', 3, 320100000000); +INSERT INTO `zz_area_code` VALUES (320200000000, '无锡市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (320201000000, '市辖区', 3, 320200000000); +INSERT INTO `zz_area_code` VALUES (320205000000, '锡山区', 3, 320200000000); +INSERT INTO `zz_area_code` VALUES (320206000000, '惠山区', 3, 320200000000); +INSERT INTO `zz_area_code` VALUES (320211000000, '滨湖区', 3, 320200000000); +INSERT INTO `zz_area_code` VALUES (320213000000, '梁溪区', 3, 320200000000); +INSERT INTO `zz_area_code` VALUES (320214000000, '新吴区', 3, 320200000000); +INSERT INTO `zz_area_code` VALUES (320281000000, '江阴市', 3, 320200000000); +INSERT INTO `zz_area_code` VALUES (320282000000, '宜兴市', 3, 320200000000); +INSERT INTO `zz_area_code` VALUES (320300000000, '徐州市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (320301000000, '市辖区', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320302000000, '鼓楼区', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320303000000, '云龙区', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320305000000, '贾汪区', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320311000000, '泉山区', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320312000000, '铜山区', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320321000000, '丰县', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320322000000, '沛县', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320324000000, '睢宁县', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320371000000, '徐州经济技术开发区', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320381000000, '新沂市', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320382000000, '邳州市', 3, 320300000000); +INSERT INTO `zz_area_code` VALUES (320400000000, '常州市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (320401000000, '市辖区', 3, 320400000000); +INSERT INTO `zz_area_code` VALUES (320402000000, '天宁区', 3, 320400000000); +INSERT INTO `zz_area_code` VALUES (320404000000, '钟楼区', 3, 320400000000); +INSERT INTO `zz_area_code` VALUES (320411000000, '新北区', 3, 320400000000); +INSERT INTO `zz_area_code` VALUES (320412000000, '武进区', 3, 320400000000); +INSERT INTO `zz_area_code` VALUES (320413000000, '金坛区', 3, 320400000000); +INSERT INTO `zz_area_code` VALUES (320481000000, '溧阳市', 3, 320400000000); +INSERT INTO `zz_area_code` VALUES (320500000000, '苏州市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (320501000000, '市辖区', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320505000000, '虎丘区', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320506000000, '吴中区', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320507000000, '相城区', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320508000000, '姑苏区', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320509000000, '吴江区', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320571000000, '苏州工业园区', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320581000000, '常熟市', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320582000000, '张家港市', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320583000000, '昆山市', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320585000000, '太仓市', 3, 320500000000); +INSERT INTO `zz_area_code` VALUES (320600000000, '南通市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (320601000000, '市辖区', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320602000000, '崇川区', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320611000000, '港闸区', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320612000000, '通州区', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320623000000, '如东县', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320671000000, '南通经济技术开发区', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320681000000, '启东市', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320682000000, '如皋市', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320684000000, '海门市', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320685000000, '海安市', 3, 320600000000); +INSERT INTO `zz_area_code` VALUES (320700000000, '连云港市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (320701000000, '市辖区', 3, 320700000000); +INSERT INTO `zz_area_code` VALUES (320703000000, '连云区', 3, 320700000000); +INSERT INTO `zz_area_code` VALUES (320706000000, '海州区', 3, 320700000000); +INSERT INTO `zz_area_code` VALUES (320707000000, '赣榆区', 3, 320700000000); +INSERT INTO `zz_area_code` VALUES (320722000000, '东海县', 3, 320700000000); +INSERT INTO `zz_area_code` VALUES (320723000000, '灌云县', 3, 320700000000); +INSERT INTO `zz_area_code` VALUES (320724000000, '灌南县', 3, 320700000000); +INSERT INTO `zz_area_code` VALUES (320771000000, '连云港经济技术开发区', 3, 320700000000); +INSERT INTO `zz_area_code` VALUES (320772000000, '连云港高新技术产业开发区', 3, 320700000000); +INSERT INTO `zz_area_code` VALUES (320800000000, '淮安市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (320801000000, '市辖区', 3, 320800000000); +INSERT INTO `zz_area_code` VALUES (320803000000, '淮安区', 3, 320800000000); +INSERT INTO `zz_area_code` VALUES (320804000000, '淮阴区', 3, 320800000000); +INSERT INTO `zz_area_code` VALUES (320812000000, '清江浦区', 3, 320800000000); +INSERT INTO `zz_area_code` VALUES (320813000000, '洪泽区', 3, 320800000000); +INSERT INTO `zz_area_code` VALUES (320826000000, '涟水县', 3, 320800000000); +INSERT INTO `zz_area_code` VALUES (320830000000, '盱眙县', 3, 320800000000); +INSERT INTO `zz_area_code` VALUES (320831000000, '金湖县', 3, 320800000000); +INSERT INTO `zz_area_code` VALUES (320871000000, '淮安经济技术开发区', 3, 320800000000); +INSERT INTO `zz_area_code` VALUES (320900000000, '盐城市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (320901000000, '市辖区', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320902000000, '亭湖区', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320903000000, '盐都区', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320904000000, '大丰区', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320921000000, '响水县', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320922000000, '滨海县', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320923000000, '阜宁县', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320924000000, '射阳县', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320925000000, '建湖县', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320971000000, '盐城经济技术开发区', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (320981000000, '东台市', 3, 320900000000); +INSERT INTO `zz_area_code` VALUES (321000000000, '扬州市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (321001000000, '市辖区', 3, 321000000000); +INSERT INTO `zz_area_code` VALUES (321002000000, '广陵区', 3, 321000000000); +INSERT INTO `zz_area_code` VALUES (321003000000, '邗江区', 3, 321000000000); +INSERT INTO `zz_area_code` VALUES (321012000000, '江都区', 3, 321000000000); +INSERT INTO `zz_area_code` VALUES (321023000000, '宝应县', 3, 321000000000); +INSERT INTO `zz_area_code` VALUES (321071000000, '扬州经济技术开发区', 3, 321000000000); +INSERT INTO `zz_area_code` VALUES (321081000000, '仪征市', 3, 321000000000); +INSERT INTO `zz_area_code` VALUES (321084000000, '高邮市', 3, 321000000000); +INSERT INTO `zz_area_code` VALUES (321100000000, '镇江市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (321101000000, '市辖区', 3, 321100000000); +INSERT INTO `zz_area_code` VALUES (321102000000, '京口区', 3, 321100000000); +INSERT INTO `zz_area_code` VALUES (321111000000, '润州区', 3, 321100000000); +INSERT INTO `zz_area_code` VALUES (321112000000, '丹徒区', 3, 321100000000); +INSERT INTO `zz_area_code` VALUES (321171000000, '镇江新区', 3, 321100000000); +INSERT INTO `zz_area_code` VALUES (321181000000, '丹阳市', 3, 321100000000); +INSERT INTO `zz_area_code` VALUES (321182000000, '扬中市', 3, 321100000000); +INSERT INTO `zz_area_code` VALUES (321183000000, '句容市', 3, 321100000000); +INSERT INTO `zz_area_code` VALUES (321200000000, '泰州市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (321201000000, '市辖区', 3, 321200000000); +INSERT INTO `zz_area_code` VALUES (321202000000, '海陵区', 3, 321200000000); +INSERT INTO `zz_area_code` VALUES (321203000000, '高港区', 3, 321200000000); +INSERT INTO `zz_area_code` VALUES (321204000000, '姜堰区', 3, 321200000000); +INSERT INTO `zz_area_code` VALUES (321271000000, '泰州医药高新技术产业开发区', 3, 321200000000); +INSERT INTO `zz_area_code` VALUES (321281000000, '兴化市', 3, 321200000000); +INSERT INTO `zz_area_code` VALUES (321282000000, '靖江市', 3, 321200000000); +INSERT INTO `zz_area_code` VALUES (321283000000, '泰兴市', 3, 321200000000); +INSERT INTO `zz_area_code` VALUES (321300000000, '宿迁市', 2, 320000000000); +INSERT INTO `zz_area_code` VALUES (321301000000, '市辖区', 3, 321300000000); +INSERT INTO `zz_area_code` VALUES (321302000000, '宿城区', 3, 321300000000); +INSERT INTO `zz_area_code` VALUES (321311000000, '宿豫区', 3, 321300000000); +INSERT INTO `zz_area_code` VALUES (321322000000, '沭阳县', 3, 321300000000); +INSERT INTO `zz_area_code` VALUES (321323000000, '泗阳县', 3, 321300000000); +INSERT INTO `zz_area_code` VALUES (321324000000, '泗洪县', 3, 321300000000); +INSERT INTO `zz_area_code` VALUES (321371000000, '宿迁经济技术开发区', 3, 321300000000); +INSERT INTO `zz_area_code` VALUES (330000000000, '浙江省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (330100000000, '杭州市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (330101000000, '市辖区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330102000000, '上城区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330103000000, '下城区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330104000000, '江干区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330105000000, '拱墅区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330106000000, '西湖区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330108000000, '滨江区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330109000000, '萧山区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330110000000, '余杭区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330111000000, '富阳区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330112000000, '临安区', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330122000000, '桐庐县', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330127000000, '淳安县', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330182000000, '建德市', 3, 330100000000); +INSERT INTO `zz_area_code` VALUES (330200000000, '宁波市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (330201000000, '市辖区', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330203000000, '海曙区', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330205000000, '江北区', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330206000000, '北仑区', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330211000000, '镇海区', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330212000000, '鄞州区', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330213000000, '奉化区', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330225000000, '象山县', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330226000000, '宁海县', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330281000000, '余姚市', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330282000000, '慈溪市', 3, 330200000000); +INSERT INTO `zz_area_code` VALUES (330300000000, '温州市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (330301000000, '市辖区', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330302000000, '鹿城区', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330303000000, '龙湾区', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330304000000, '瓯海区', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330305000000, '洞头区', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330324000000, '永嘉县', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330326000000, '平阳县', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330327000000, '苍南县', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330328000000, '文成县', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330329000000, '泰顺县', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330371000000, '温州经济技术开发区', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330381000000, '瑞安市', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330382000000, '乐清市', 3, 330300000000); +INSERT INTO `zz_area_code` VALUES (330400000000, '嘉兴市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (330401000000, '市辖区', 3, 330400000000); +INSERT INTO `zz_area_code` VALUES (330402000000, '南湖区', 3, 330400000000); +INSERT INTO `zz_area_code` VALUES (330411000000, '秀洲区', 3, 330400000000); +INSERT INTO `zz_area_code` VALUES (330421000000, '嘉善县', 3, 330400000000); +INSERT INTO `zz_area_code` VALUES (330424000000, '海盐县', 3, 330400000000); +INSERT INTO `zz_area_code` VALUES (330481000000, '海宁市', 3, 330400000000); +INSERT INTO `zz_area_code` VALUES (330482000000, '平湖市', 3, 330400000000); +INSERT INTO `zz_area_code` VALUES (330483000000, '桐乡市', 3, 330400000000); +INSERT INTO `zz_area_code` VALUES (330500000000, '湖州市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (330501000000, '市辖区', 3, 330500000000); +INSERT INTO `zz_area_code` VALUES (330502000000, '吴兴区', 3, 330500000000); +INSERT INTO `zz_area_code` VALUES (330503000000, '南浔区', 3, 330500000000); +INSERT INTO `zz_area_code` VALUES (330521000000, '德清县', 3, 330500000000); +INSERT INTO `zz_area_code` VALUES (330522000000, '长兴县', 3, 330500000000); +INSERT INTO `zz_area_code` VALUES (330523000000, '安吉县', 3, 330500000000); +INSERT INTO `zz_area_code` VALUES (330600000000, '绍兴市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (330601000000, '市辖区', 3, 330600000000); +INSERT INTO `zz_area_code` VALUES (330602000000, '越城区', 3, 330600000000); +INSERT INTO `zz_area_code` VALUES (330603000000, '柯桥区', 3, 330600000000); +INSERT INTO `zz_area_code` VALUES (330604000000, '上虞区', 3, 330600000000); +INSERT INTO `zz_area_code` VALUES (330624000000, '新昌县', 3, 330600000000); +INSERT INTO `zz_area_code` VALUES (330681000000, '诸暨市', 3, 330600000000); +INSERT INTO `zz_area_code` VALUES (330683000000, '嵊州市', 3, 330600000000); +INSERT INTO `zz_area_code` VALUES (330700000000, '金华市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (330701000000, '市辖区', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330702000000, '婺城区', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330703000000, '金东区', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330723000000, '武义县', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330726000000, '浦江县', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330727000000, '磐安县', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330781000000, '兰溪市', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330782000000, '义乌市', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330783000000, '东阳市', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330784000000, '永康市', 3, 330700000000); +INSERT INTO `zz_area_code` VALUES (330800000000, '衢州市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (330801000000, '市辖区', 3, 330800000000); +INSERT INTO `zz_area_code` VALUES (330802000000, '柯城区', 3, 330800000000); +INSERT INTO `zz_area_code` VALUES (330803000000, '衢江区', 3, 330800000000); +INSERT INTO `zz_area_code` VALUES (330822000000, '常山县', 3, 330800000000); +INSERT INTO `zz_area_code` VALUES (330824000000, '开化县', 3, 330800000000); +INSERT INTO `zz_area_code` VALUES (330825000000, '龙游县', 3, 330800000000); +INSERT INTO `zz_area_code` VALUES (330881000000, '江山市', 3, 330800000000); +INSERT INTO `zz_area_code` VALUES (330900000000, '舟山市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (330901000000, '市辖区', 3, 330900000000); +INSERT INTO `zz_area_code` VALUES (330902000000, '定海区', 3, 330900000000); +INSERT INTO `zz_area_code` VALUES (330903000000, '普陀区', 3, 330900000000); +INSERT INTO `zz_area_code` VALUES (330921000000, '岱山县', 3, 330900000000); +INSERT INTO `zz_area_code` VALUES (330922000000, '嵊泗县', 3, 330900000000); +INSERT INTO `zz_area_code` VALUES (331000000000, '台州市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (331001000000, '市辖区', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331002000000, '椒江区', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331003000000, '黄岩区', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331004000000, '路桥区', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331022000000, '三门县', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331023000000, '天台县', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331024000000, '仙居县', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331081000000, '温岭市', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331082000000, '临海市', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331083000000, '玉环市', 3, 331000000000); +INSERT INTO `zz_area_code` VALUES (331100000000, '丽水市', 2, 330000000000); +INSERT INTO `zz_area_code` VALUES (331101000000, '市辖区', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (331102000000, '莲都区', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (331121000000, '青田县', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (331122000000, '缙云县', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (331123000000, '遂昌县', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (331124000000, '松阳县', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (331125000000, '云和县', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (331126000000, '庆元县', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (331127000000, '景宁畲族自治县', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (331181000000, '龙泉市', 3, 331100000000); +INSERT INTO `zz_area_code` VALUES (340000000000, '安徽省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (340100000000, '合肥市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (340101000000, '市辖区', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340102000000, '瑶海区', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340103000000, '庐阳区', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340104000000, '蜀山区', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340111000000, '包河区', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340121000000, '长丰县', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340122000000, '肥东县', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340123000000, '肥西县', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340124000000, '庐江县', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340171000000, '合肥高新技术产业开发区', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340172000000, '合肥经济技术开发区', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340173000000, '合肥新站高新技术产业开发区', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340181000000, '巢湖市', 3, 340100000000); +INSERT INTO `zz_area_code` VALUES (340200000000, '芜湖市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (340201000000, '市辖区', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340202000000, '镜湖区', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340203000000, '弋江区', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340207000000, '鸠江区', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340208000000, '三山区', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340221000000, '芜湖县', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340222000000, '繁昌县', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340223000000, '南陵县', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340225000000, '无为县', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340271000000, '芜湖经济技术开发区', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340272000000, '安徽芜湖长江大桥经济开发区', 3, 340200000000); +INSERT INTO `zz_area_code` VALUES (340300000000, '蚌埠市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (340301000000, '市辖区', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340302000000, '龙子湖区', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340303000000, '蚌山区', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340304000000, '禹会区', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340311000000, '淮上区', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340321000000, '怀远县', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340322000000, '五河县', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340323000000, '固镇县', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340371000000, '蚌埠市高新技术开发区', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340372000000, '蚌埠市经济开发区', 3, 340300000000); +INSERT INTO `zz_area_code` VALUES (340400000000, '淮南市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (340401000000, '市辖区', 3, 340400000000); +INSERT INTO `zz_area_code` VALUES (340402000000, '大通区', 3, 340400000000); +INSERT INTO `zz_area_code` VALUES (340403000000, '田家庵区', 3, 340400000000); +INSERT INTO `zz_area_code` VALUES (340404000000, '谢家集区', 3, 340400000000); +INSERT INTO `zz_area_code` VALUES (340405000000, '八公山区', 3, 340400000000); +INSERT INTO `zz_area_code` VALUES (340406000000, '潘集区', 3, 340400000000); +INSERT INTO `zz_area_code` VALUES (340421000000, '凤台县', 3, 340400000000); +INSERT INTO `zz_area_code` VALUES (340422000000, '寿县', 3, 340400000000); +INSERT INTO `zz_area_code` VALUES (340500000000, '马鞍山市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (340501000000, '市辖区', 3, 340500000000); +INSERT INTO `zz_area_code` VALUES (340503000000, '花山区', 3, 340500000000); +INSERT INTO `zz_area_code` VALUES (340504000000, '雨山区', 3, 340500000000); +INSERT INTO `zz_area_code` VALUES (340506000000, '博望区', 3, 340500000000); +INSERT INTO `zz_area_code` VALUES (340521000000, '当涂县', 3, 340500000000); +INSERT INTO `zz_area_code` VALUES (340522000000, '含山县', 3, 340500000000); +INSERT INTO `zz_area_code` VALUES (340523000000, '和县', 3, 340500000000); +INSERT INTO `zz_area_code` VALUES (340600000000, '淮北市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (340601000000, '市辖区', 3, 340600000000); +INSERT INTO `zz_area_code` VALUES (340602000000, '杜集区', 3, 340600000000); +INSERT INTO `zz_area_code` VALUES (340603000000, '相山区', 3, 340600000000); +INSERT INTO `zz_area_code` VALUES (340604000000, '烈山区', 3, 340600000000); +INSERT INTO `zz_area_code` VALUES (340621000000, '濉溪县', 3, 340600000000); +INSERT INTO `zz_area_code` VALUES (340700000000, '铜陵市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (340701000000, '市辖区', 3, 340700000000); +INSERT INTO `zz_area_code` VALUES (340705000000, '铜官区', 3, 340700000000); +INSERT INTO `zz_area_code` VALUES (340706000000, '义安区', 3, 340700000000); +INSERT INTO `zz_area_code` VALUES (340711000000, '郊区', 3, 340700000000); +INSERT INTO `zz_area_code` VALUES (340722000000, '枞阳县', 3, 340700000000); +INSERT INTO `zz_area_code` VALUES (340800000000, '安庆市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (340801000000, '市辖区', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340802000000, '迎江区', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340803000000, '大观区', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340811000000, '宜秀区', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340822000000, '怀宁县', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340825000000, '太湖县', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340826000000, '宿松县', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340827000000, '望江县', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340828000000, '岳西县', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340871000000, '安徽安庆经济开发区', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340881000000, '桐城市', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (340882000000, '潜山市', 3, 340800000000); +INSERT INTO `zz_area_code` VALUES (341000000000, '黄山市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (341001000000, '市辖区', 3, 341000000000); +INSERT INTO `zz_area_code` VALUES (341002000000, '屯溪区', 3, 341000000000); +INSERT INTO `zz_area_code` VALUES (341003000000, '黄山区', 3, 341000000000); +INSERT INTO `zz_area_code` VALUES (341004000000, '徽州区', 3, 341000000000); +INSERT INTO `zz_area_code` VALUES (341021000000, '歙县', 3, 341000000000); +INSERT INTO `zz_area_code` VALUES (341022000000, '休宁县', 3, 341000000000); +INSERT INTO `zz_area_code` VALUES (341023000000, '黟县', 3, 341000000000); +INSERT INTO `zz_area_code` VALUES (341024000000, '祁门县', 3, 341000000000); +INSERT INTO `zz_area_code` VALUES (341100000000, '滁州市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (341101000000, '市辖区', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341102000000, '琅琊区', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341103000000, '南谯区', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341122000000, '来安县', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341124000000, '全椒县', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341125000000, '定远县', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341126000000, '凤阳县', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341171000000, '苏滁现代产业园', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341172000000, '滁州经济技术开发区', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341181000000, '天长市', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341182000000, '明光市', 3, 341100000000); +INSERT INTO `zz_area_code` VALUES (341200000000, '阜阳市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (341201000000, '市辖区', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341202000000, '颍州区', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341203000000, '颍东区', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341204000000, '颍泉区', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341221000000, '临泉县', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341222000000, '太和县', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341225000000, '阜南县', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341226000000, '颍上县', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341271000000, '阜阳合肥现代产业园区', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341272000000, '阜阳经济技术开发区', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341282000000, '界首市', 3, 341200000000); +INSERT INTO `zz_area_code` VALUES (341300000000, '宿州市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (341301000000, '市辖区', 3, 341300000000); +INSERT INTO `zz_area_code` VALUES (341302000000, '埇桥区', 3, 341300000000); +INSERT INTO `zz_area_code` VALUES (341321000000, '砀山县', 3, 341300000000); +INSERT INTO `zz_area_code` VALUES (341322000000, '萧县', 3, 341300000000); +INSERT INTO `zz_area_code` VALUES (341323000000, '灵璧县', 3, 341300000000); +INSERT INTO `zz_area_code` VALUES (341324000000, '泗县', 3, 341300000000); +INSERT INTO `zz_area_code` VALUES (341371000000, '宿州马鞍山现代产业园区', 3, 341300000000); +INSERT INTO `zz_area_code` VALUES (341372000000, '宿州经济技术开发区', 3, 341300000000); +INSERT INTO `zz_area_code` VALUES (341500000000, '六安市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (341501000000, '市辖区', 3, 341500000000); +INSERT INTO `zz_area_code` VALUES (341502000000, '金安区', 3, 341500000000); +INSERT INTO `zz_area_code` VALUES (341503000000, '裕安区', 3, 341500000000); +INSERT INTO `zz_area_code` VALUES (341504000000, '叶集区', 3, 341500000000); +INSERT INTO `zz_area_code` VALUES (341522000000, '霍邱县', 3, 341500000000); +INSERT INTO `zz_area_code` VALUES (341523000000, '舒城县', 3, 341500000000); +INSERT INTO `zz_area_code` VALUES (341524000000, '金寨县', 3, 341500000000); +INSERT INTO `zz_area_code` VALUES (341525000000, '霍山县', 3, 341500000000); +INSERT INTO `zz_area_code` VALUES (341600000000, '亳州市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (341601000000, '市辖区', 3, 341600000000); +INSERT INTO `zz_area_code` VALUES (341602000000, '谯城区', 3, 341600000000); +INSERT INTO `zz_area_code` VALUES (341621000000, '涡阳县', 3, 341600000000); +INSERT INTO `zz_area_code` VALUES (341622000000, '蒙城县', 3, 341600000000); +INSERT INTO `zz_area_code` VALUES (341623000000, '利辛县', 3, 341600000000); +INSERT INTO `zz_area_code` VALUES (341700000000, '池州市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (341701000000, '市辖区', 3, 341700000000); +INSERT INTO `zz_area_code` VALUES (341702000000, '贵池区', 3, 341700000000); +INSERT INTO `zz_area_code` VALUES (341721000000, '东至县', 3, 341700000000); +INSERT INTO `zz_area_code` VALUES (341722000000, '石台县', 3, 341700000000); +INSERT INTO `zz_area_code` VALUES (341723000000, '青阳县', 3, 341700000000); +INSERT INTO `zz_area_code` VALUES (341800000000, '宣城市', 2, 340000000000); +INSERT INTO `zz_area_code` VALUES (341801000000, '市辖区', 3, 341800000000); +INSERT INTO `zz_area_code` VALUES (341802000000, '宣州区', 3, 341800000000); +INSERT INTO `zz_area_code` VALUES (341821000000, '郎溪县', 3, 341800000000); +INSERT INTO `zz_area_code` VALUES (341822000000, '广德县', 3, 341800000000); +INSERT INTO `zz_area_code` VALUES (341823000000, '泾县', 3, 341800000000); +INSERT INTO `zz_area_code` VALUES (341824000000, '绩溪县', 3, 341800000000); +INSERT INTO `zz_area_code` VALUES (341825000000, '旌德县', 3, 341800000000); +INSERT INTO `zz_area_code` VALUES (341871000000, '宣城市经济开发区', 3, 341800000000); +INSERT INTO `zz_area_code` VALUES (341881000000, '宁国市', 3, 341800000000); +INSERT INTO `zz_area_code` VALUES (350000000000, '福建省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (350100000000, '福州市', 2, 350000000000); +INSERT INTO `zz_area_code` VALUES (350101000000, '市辖区', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350102000000, '鼓楼区', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350103000000, '台江区', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350104000000, '仓山区', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350105000000, '马尾区', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350111000000, '晋安区', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350112000000, '长乐区', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350121000000, '闽侯县', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350122000000, '连江县', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350123000000, '罗源县', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350124000000, '闽清县', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350125000000, '永泰县', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350128000000, '平潭县', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350181000000, '福清市', 3, 350100000000); +INSERT INTO `zz_area_code` VALUES (350200000000, '厦门市', 2, 350000000000); +INSERT INTO `zz_area_code` VALUES (350201000000, '市辖区', 3, 350200000000); +INSERT INTO `zz_area_code` VALUES (350203000000, '思明区', 3, 350200000000); +INSERT INTO `zz_area_code` VALUES (350205000000, '海沧区', 3, 350200000000); +INSERT INTO `zz_area_code` VALUES (350206000000, '湖里区', 3, 350200000000); +INSERT INTO `zz_area_code` VALUES (350211000000, '集美区', 3, 350200000000); +INSERT INTO `zz_area_code` VALUES (350212000000, '同安区', 3, 350200000000); +INSERT INTO `zz_area_code` VALUES (350213000000, '翔安区', 3, 350200000000); +INSERT INTO `zz_area_code` VALUES (350300000000, '莆田市', 2, 350000000000); +INSERT INTO `zz_area_code` VALUES (350301000000, '市辖区', 3, 350300000000); +INSERT INTO `zz_area_code` VALUES (350302000000, '城厢区', 3, 350300000000); +INSERT INTO `zz_area_code` VALUES (350303000000, '涵江区', 3, 350300000000); +INSERT INTO `zz_area_code` VALUES (350304000000, '荔城区', 3, 350300000000); +INSERT INTO `zz_area_code` VALUES (350305000000, '秀屿区', 3, 350300000000); +INSERT INTO `zz_area_code` VALUES (350322000000, '仙游县', 3, 350300000000); +INSERT INTO `zz_area_code` VALUES (350400000000, '三明市', 2, 350000000000); +INSERT INTO `zz_area_code` VALUES (350401000000, '市辖区', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350402000000, '梅列区', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350403000000, '三元区', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350421000000, '明溪县', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350423000000, '清流县', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350424000000, '宁化县', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350425000000, '大田县', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350426000000, '尤溪县', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350427000000, '沙县', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350428000000, '将乐县', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350429000000, '泰宁县', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350430000000, '建宁县', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350481000000, '永安市', 3, 350400000000); +INSERT INTO `zz_area_code` VALUES (350500000000, '泉州市', 2, 350000000000); +INSERT INTO `zz_area_code` VALUES (350501000000, '市辖区', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350502000000, '鲤城区', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350503000000, '丰泽区', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350504000000, '洛江区', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350505000000, '泉港区', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350521000000, '惠安县', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350524000000, '安溪县', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350525000000, '永春县', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350526000000, '德化县', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350527000000, '金门县', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350581000000, '石狮市', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350582000000, '晋江市', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350583000000, '南安市', 3, 350500000000); +INSERT INTO `zz_area_code` VALUES (350600000000, '漳州市', 2, 350000000000); +INSERT INTO `zz_area_code` VALUES (350601000000, '市辖区', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350602000000, '芗城区', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350603000000, '龙文区', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350622000000, '云霄县', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350623000000, '漳浦县', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350624000000, '诏安县', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350625000000, '长泰县', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350626000000, '东山县', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350627000000, '南靖县', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350628000000, '平和县', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350629000000, '华安县', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350681000000, '龙海市', 3, 350600000000); +INSERT INTO `zz_area_code` VALUES (350700000000, '南平市', 2, 350000000000); +INSERT INTO `zz_area_code` VALUES (350701000000, '市辖区', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350702000000, '延平区', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350703000000, '建阳区', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350721000000, '顺昌县', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350722000000, '浦城县', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350723000000, '光泽县', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350724000000, '松溪县', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350725000000, '政和县', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350781000000, '邵武市', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350782000000, '武夷山市', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350783000000, '建瓯市', 3, 350700000000); +INSERT INTO `zz_area_code` VALUES (350800000000, '龙岩市', 2, 350000000000); +INSERT INTO `zz_area_code` VALUES (350801000000, '市辖区', 3, 350800000000); +INSERT INTO `zz_area_code` VALUES (350802000000, '新罗区', 3, 350800000000); +INSERT INTO `zz_area_code` VALUES (350803000000, '永定区', 3, 350800000000); +INSERT INTO `zz_area_code` VALUES (350821000000, '长汀县', 3, 350800000000); +INSERT INTO `zz_area_code` VALUES (350823000000, '上杭县', 3, 350800000000); +INSERT INTO `zz_area_code` VALUES (350824000000, '武平县', 3, 350800000000); +INSERT INTO `zz_area_code` VALUES (350825000000, '连城县', 3, 350800000000); +INSERT INTO `zz_area_code` VALUES (350881000000, '漳平市', 3, 350800000000); +INSERT INTO `zz_area_code` VALUES (350900000000, '宁德市', 2, 350000000000); +INSERT INTO `zz_area_code` VALUES (350901000000, '市辖区', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (350902000000, '蕉城区', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (350921000000, '霞浦县', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (350922000000, '古田县', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (350923000000, '屏南县', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (350924000000, '寿宁县', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (350925000000, '周宁县', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (350926000000, '柘荣县', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (350981000000, '福安市', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (350982000000, '福鼎市', 3, 350900000000); +INSERT INTO `zz_area_code` VALUES (360000000000, '江西省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (360100000000, '南昌市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (360101000000, '市辖区', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360102000000, '东湖区', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360103000000, '西湖区', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360104000000, '青云谱区', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360105000000, '湾里区', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360111000000, '青山湖区', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360112000000, '新建区', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360121000000, '南昌县', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360123000000, '安义县', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360124000000, '进贤县', 3, 360100000000); +INSERT INTO `zz_area_code` VALUES (360200000000, '景德镇市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (360201000000, '市辖区', 3, 360200000000); +INSERT INTO `zz_area_code` VALUES (360202000000, '昌江区', 3, 360200000000); +INSERT INTO `zz_area_code` VALUES (360203000000, '珠山区', 3, 360200000000); +INSERT INTO `zz_area_code` VALUES (360222000000, '浮梁县', 3, 360200000000); +INSERT INTO `zz_area_code` VALUES (360281000000, '乐平市', 3, 360200000000); +INSERT INTO `zz_area_code` VALUES (360300000000, '萍乡市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (360301000000, '市辖区', 3, 360300000000); +INSERT INTO `zz_area_code` VALUES (360302000000, '安源区', 3, 360300000000); +INSERT INTO `zz_area_code` VALUES (360313000000, '湘东区', 3, 360300000000); +INSERT INTO `zz_area_code` VALUES (360321000000, '莲花县', 3, 360300000000); +INSERT INTO `zz_area_code` VALUES (360322000000, '上栗县', 3, 360300000000); +INSERT INTO `zz_area_code` VALUES (360323000000, '芦溪县', 3, 360300000000); +INSERT INTO `zz_area_code` VALUES (360400000000, '九江市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (360401000000, '市辖区', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360402000000, '濂溪区', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360403000000, '浔阳区', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360404000000, '柴桑区', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360423000000, '武宁县', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360424000000, '修水县', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360425000000, '永修县', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360426000000, '德安县', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360428000000, '都昌县', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360429000000, '湖口县', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360430000000, '彭泽县', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360481000000, '瑞昌市', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360482000000, '共青城市', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360483000000, '庐山市', 3, 360400000000); +INSERT INTO `zz_area_code` VALUES (360500000000, '新余市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (360501000000, '市辖区', 3, 360500000000); +INSERT INTO `zz_area_code` VALUES (360502000000, '渝水区', 3, 360500000000); +INSERT INTO `zz_area_code` VALUES (360521000000, '分宜县', 3, 360500000000); +INSERT INTO `zz_area_code` VALUES (360600000000, '鹰潭市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (360601000000, '市辖区', 3, 360600000000); +INSERT INTO `zz_area_code` VALUES (360602000000, '月湖区', 3, 360600000000); +INSERT INTO `zz_area_code` VALUES (360603000000, '余江区', 3, 360600000000); +INSERT INTO `zz_area_code` VALUES (360681000000, '贵溪市', 3, 360600000000); +INSERT INTO `zz_area_code` VALUES (360700000000, '赣州市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (360701000000, '市辖区', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360702000000, '章贡区', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360703000000, '南康区', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360704000000, '赣县区', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360722000000, '信丰县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360723000000, '大余县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360724000000, '上犹县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360725000000, '崇义县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360726000000, '安远县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360727000000, '龙南县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360728000000, '定南县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360729000000, '全南县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360730000000, '宁都县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360731000000, '于都县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360732000000, '兴国县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360733000000, '会昌县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360734000000, '寻乌县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360735000000, '石城县', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360781000000, '瑞金市', 3, 360700000000); +INSERT INTO `zz_area_code` VALUES (360800000000, '吉安市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (360801000000, '市辖区', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360802000000, '吉州区', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360803000000, '青原区', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360821000000, '吉安县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360822000000, '吉水县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360823000000, '峡江县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360824000000, '新干县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360825000000, '永丰县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360826000000, '泰和县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360827000000, '遂川县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360828000000, '万安县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360829000000, '安福县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360830000000, '永新县', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360881000000, '井冈山市', 3, 360800000000); +INSERT INTO `zz_area_code` VALUES (360900000000, '宜春市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (360901000000, '市辖区', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360902000000, '袁州区', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360921000000, '奉新县', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360922000000, '万载县', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360923000000, '上高县', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360924000000, '宜丰县', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360925000000, '靖安县', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360926000000, '铜鼓县', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360981000000, '丰城市', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360982000000, '樟树市', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (360983000000, '高安市', 3, 360900000000); +INSERT INTO `zz_area_code` VALUES (361000000000, '抚州市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (361001000000, '市辖区', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361002000000, '临川区', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361003000000, '东乡区', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361021000000, '南城县', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361022000000, '黎川县', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361023000000, '南丰县', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361024000000, '崇仁县', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361025000000, '乐安县', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361026000000, '宜黄县', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361027000000, '金溪县', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361028000000, '资溪县', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361030000000, '广昌县', 3, 361000000000); +INSERT INTO `zz_area_code` VALUES (361100000000, '上饶市', 2, 360000000000); +INSERT INTO `zz_area_code` VALUES (361101000000, '市辖区', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361102000000, '信州区', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361103000000, '广丰区', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361121000000, '上饶县', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361123000000, '玉山县', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361124000000, '铅山县', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361125000000, '横峰县', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361126000000, '弋阳县', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361127000000, '余干县', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361128000000, '鄱阳县', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361129000000, '万年县', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361130000000, '婺源县', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (361181000000, '德兴市', 3, 361100000000); +INSERT INTO `zz_area_code` VALUES (370000000000, '山东省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (370100000000, '济南市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (370101000000, '市辖区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370102000000, '历下区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370103000000, '市中区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370104000000, '槐荫区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370105000000, '天桥区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370112000000, '历城区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370113000000, '长清区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370114000000, '章丘区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370115000000, '济阳区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370124000000, '平阴县', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370126000000, '商河县', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370171000000, '济南高新技术产业开发区', 3, 370100000000); +INSERT INTO `zz_area_code` VALUES (370200000000, '青岛市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (370201000000, '市辖区', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370202000000, '市南区', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370203000000, '市北区', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370211000000, '黄岛区', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370212000000, '崂山区', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370213000000, '李沧区', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370214000000, '城阳区', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370215000000, '即墨区', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370271000000, '青岛高新技术产业开发区', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370281000000, '胶州市', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370283000000, '平度市', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370285000000, '莱西市', 3, 370200000000); +INSERT INTO `zz_area_code` VALUES (370300000000, '淄博市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (370301000000, '市辖区', 3, 370300000000); +INSERT INTO `zz_area_code` VALUES (370302000000, '淄川区', 3, 370300000000); +INSERT INTO `zz_area_code` VALUES (370303000000, '张店区', 3, 370300000000); +INSERT INTO `zz_area_code` VALUES (370304000000, '博山区', 3, 370300000000); +INSERT INTO `zz_area_code` VALUES (370305000000, '临淄区', 3, 370300000000); +INSERT INTO `zz_area_code` VALUES (370306000000, '周村区', 3, 370300000000); +INSERT INTO `zz_area_code` VALUES (370321000000, '桓台县', 3, 370300000000); +INSERT INTO `zz_area_code` VALUES (370322000000, '高青县', 3, 370300000000); +INSERT INTO `zz_area_code` VALUES (370323000000, '沂源县', 3, 370300000000); +INSERT INTO `zz_area_code` VALUES (370400000000, '枣庄市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (370401000000, '市辖区', 3, 370400000000); +INSERT INTO `zz_area_code` VALUES (370402000000, '市中区', 3, 370400000000); +INSERT INTO `zz_area_code` VALUES (370403000000, '薛城区', 3, 370400000000); +INSERT INTO `zz_area_code` VALUES (370404000000, '峄城区', 3, 370400000000); +INSERT INTO `zz_area_code` VALUES (370405000000, '台儿庄区', 3, 370400000000); +INSERT INTO `zz_area_code` VALUES (370406000000, '山亭区', 3, 370400000000); +INSERT INTO `zz_area_code` VALUES (370481000000, '滕州市', 3, 370400000000); +INSERT INTO `zz_area_code` VALUES (370500000000, '东营市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (370501000000, '市辖区', 3, 370500000000); +INSERT INTO `zz_area_code` VALUES (370502000000, '东营区', 3, 370500000000); +INSERT INTO `zz_area_code` VALUES (370503000000, '河口区', 3, 370500000000); +INSERT INTO `zz_area_code` VALUES (370505000000, '垦利区', 3, 370500000000); +INSERT INTO `zz_area_code` VALUES (370522000000, '利津县', 3, 370500000000); +INSERT INTO `zz_area_code` VALUES (370523000000, '广饶县', 3, 370500000000); +INSERT INTO `zz_area_code` VALUES (370571000000, '东营经济技术开发区', 3, 370500000000); +INSERT INTO `zz_area_code` VALUES (370572000000, '东营港经济开发区', 3, 370500000000); +INSERT INTO `zz_area_code` VALUES (370600000000, '烟台市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (370601000000, '市辖区', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370602000000, '芝罘区', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370611000000, '福山区', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370612000000, '牟平区', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370613000000, '莱山区', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370634000000, '长岛县', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370671000000, '烟台高新技术产业开发区', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370672000000, '烟台经济技术开发区', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370681000000, '龙口市', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370682000000, '莱阳市', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370683000000, '莱州市', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370684000000, '蓬莱市', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370685000000, '招远市', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370686000000, '栖霞市', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370687000000, '海阳市', 3, 370600000000); +INSERT INTO `zz_area_code` VALUES (370700000000, '潍坊市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (370701000000, '市辖区', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370702000000, '潍城区', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370703000000, '寒亭区', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370704000000, '坊子区', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370705000000, '奎文区', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370724000000, '临朐县', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370725000000, '昌乐县', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370772000000, '潍坊滨海经济技术开发区', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370781000000, '青州市', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370782000000, '诸城市', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370783000000, '寿光市', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370784000000, '安丘市', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370785000000, '高密市', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370786000000, '昌邑市', 3, 370700000000); +INSERT INTO `zz_area_code` VALUES (370800000000, '济宁市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (370801000000, '市辖区', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370811000000, '任城区', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370812000000, '兖州区', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370826000000, '微山县', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370827000000, '鱼台县', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370828000000, '金乡县', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370829000000, '嘉祥县', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370830000000, '汶上县', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370831000000, '泗水县', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370832000000, '梁山县', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370871000000, '济宁高新技术产业开发区', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370881000000, '曲阜市', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370883000000, '邹城市', 3, 370800000000); +INSERT INTO `zz_area_code` VALUES (370900000000, '泰安市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (370901000000, '市辖区', 3, 370900000000); +INSERT INTO `zz_area_code` VALUES (370902000000, '泰山区', 3, 370900000000); +INSERT INTO `zz_area_code` VALUES (370911000000, '岱岳区', 3, 370900000000); +INSERT INTO `zz_area_code` VALUES (370921000000, '宁阳县', 3, 370900000000); +INSERT INTO `zz_area_code` VALUES (370923000000, '东平县', 3, 370900000000); +INSERT INTO `zz_area_code` VALUES (370982000000, '新泰市', 3, 370900000000); +INSERT INTO `zz_area_code` VALUES (370983000000, '肥城市', 3, 370900000000); +INSERT INTO `zz_area_code` VALUES (371000000000, '威海市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (371001000000, '市辖区', 3, 371000000000); +INSERT INTO `zz_area_code` VALUES (371002000000, '环翠区', 3, 371000000000); +INSERT INTO `zz_area_code` VALUES (371003000000, '文登区', 3, 371000000000); +INSERT INTO `zz_area_code` VALUES (371071000000, '威海火炬高技术产业开发区', 3, 371000000000); +INSERT INTO `zz_area_code` VALUES (371072000000, '威海经济技术开发区', 3, 371000000000); +INSERT INTO `zz_area_code` VALUES (371073000000, '威海临港经济技术开发区', 3, 371000000000); +INSERT INTO `zz_area_code` VALUES (371082000000, '荣成市', 3, 371000000000); +INSERT INTO `zz_area_code` VALUES (371083000000, '乳山市', 3, 371000000000); +INSERT INTO `zz_area_code` VALUES (371100000000, '日照市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (371101000000, '市辖区', 3, 371100000000); +INSERT INTO `zz_area_code` VALUES (371102000000, '东港区', 3, 371100000000); +INSERT INTO `zz_area_code` VALUES (371103000000, '岚山区', 3, 371100000000); +INSERT INTO `zz_area_code` VALUES (371121000000, '五莲县', 3, 371100000000); +INSERT INTO `zz_area_code` VALUES (371122000000, '莒县', 3, 371100000000); +INSERT INTO `zz_area_code` VALUES (371171000000, '日照经济技术开发区', 3, 371100000000); +INSERT INTO `zz_area_code` VALUES (371200000000, '莱芜市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (371201000000, '市辖区', 3, 371200000000); +INSERT INTO `zz_area_code` VALUES (371202000000, '莱城区', 3, 371200000000); +INSERT INTO `zz_area_code` VALUES (371203000000, '钢城区', 3, 371200000000); +INSERT INTO `zz_area_code` VALUES (371300000000, '临沂市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (371301000000, '市辖区', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371302000000, '兰山区', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371311000000, '罗庄区', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371312000000, '河东区', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371321000000, '沂南县', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371322000000, '郯城县', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371323000000, '沂水县', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371324000000, '兰陵县', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371325000000, '费县', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371326000000, '平邑县', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371327000000, '莒南县', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371328000000, '蒙阴县', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371329000000, '临沭县', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371371000000, '临沂高新技术产业开发区', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371372000000, '临沂经济技术开发区', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371373000000, '临沂临港经济开发区', 3, 371300000000); +INSERT INTO `zz_area_code` VALUES (371400000000, '德州市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (371401000000, '市辖区', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371402000000, '德城区', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371403000000, '陵城区', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371422000000, '宁津县', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371423000000, '庆云县', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371424000000, '临邑县', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371425000000, '齐河县', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371426000000, '平原县', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371427000000, '夏津县', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371428000000, '武城县', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371471000000, '德州经济技术开发区', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371472000000, '德州运河经济开发区', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371481000000, '乐陵市', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371482000000, '禹城市', 3, 371400000000); +INSERT INTO `zz_area_code` VALUES (371500000000, '聊城市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (371501000000, '市辖区', 3, 371500000000); +INSERT INTO `zz_area_code` VALUES (371502000000, '东昌府区', 3, 371500000000); +INSERT INTO `zz_area_code` VALUES (371521000000, '阳谷县', 3, 371500000000); +INSERT INTO `zz_area_code` VALUES (371522000000, '莘县', 3, 371500000000); +INSERT INTO `zz_area_code` VALUES (371523000000, '茌平县', 3, 371500000000); +INSERT INTO `zz_area_code` VALUES (371524000000, '东阿县', 3, 371500000000); +INSERT INTO `zz_area_code` VALUES (371525000000, '冠县', 3, 371500000000); +INSERT INTO `zz_area_code` VALUES (371526000000, '高唐县', 3, 371500000000); +INSERT INTO `zz_area_code` VALUES (371581000000, '临清市', 3, 371500000000); +INSERT INTO `zz_area_code` VALUES (371600000000, '滨州市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (371601000000, '市辖区', 3, 371600000000); +INSERT INTO `zz_area_code` VALUES (371602000000, '滨城区', 3, 371600000000); +INSERT INTO `zz_area_code` VALUES (371603000000, '沾化区', 3, 371600000000); +INSERT INTO `zz_area_code` VALUES (371621000000, '惠民县', 3, 371600000000); +INSERT INTO `zz_area_code` VALUES (371622000000, '阳信县', 3, 371600000000); +INSERT INTO `zz_area_code` VALUES (371623000000, '无棣县', 3, 371600000000); +INSERT INTO `zz_area_code` VALUES (371625000000, '博兴县', 3, 371600000000); +INSERT INTO `zz_area_code` VALUES (371681000000, '邹平市', 3, 371600000000); +INSERT INTO `zz_area_code` VALUES (371700000000, '菏泽市', 2, 370000000000); +INSERT INTO `zz_area_code` VALUES (371701000000, '市辖区', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371702000000, '牡丹区', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371703000000, '定陶区', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371721000000, '曹县', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371722000000, '单县', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371723000000, '成武县', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371724000000, '巨野县', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371725000000, '郓城县', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371726000000, '鄄城县', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371728000000, '东明县', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371771000000, '菏泽经济技术开发区', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (371772000000, '菏泽高新技术开发区', 3, 371700000000); +INSERT INTO `zz_area_code` VALUES (410000000000, '河南省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (410100000000, '郑州市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (410101000000, '市辖区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410102000000, '中原区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410103000000, '二七区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410104000000, '管城回族区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410105000000, '金水区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410106000000, '上街区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410108000000, '惠济区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410122000000, '中牟县', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410171000000, '郑州经济技术开发区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410172000000, '郑州高新技术产业开发区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410173000000, '郑州航空港经济综合实验区', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410181000000, '巩义市', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410182000000, '荥阳市', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410183000000, '新密市', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410184000000, '新郑市', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410185000000, '登封市', 3, 410100000000); +INSERT INTO `zz_area_code` VALUES (410200000000, '开封市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (410201000000, '市辖区', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410202000000, '龙亭区', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410203000000, '顺河回族区', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410204000000, '鼓楼区', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410205000000, '禹王台区', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410212000000, '祥符区', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410221000000, '杞县', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410222000000, '通许县', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410223000000, '尉氏县', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410225000000, '兰考县', 3, 410200000000); +INSERT INTO `zz_area_code` VALUES (410300000000, '洛阳市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (410301000000, '市辖区', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410302000000, '老城区', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410303000000, '西工区', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410304000000, '瀍河回族区', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410305000000, '涧西区', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410306000000, '吉利区', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410311000000, '洛龙区', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410322000000, '孟津县', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410323000000, '新安县', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410324000000, '栾川县', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410325000000, '嵩县', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410326000000, '汝阳县', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410327000000, '宜阳县', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410328000000, '洛宁县', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410329000000, '伊川县', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410371000000, '洛阳高新技术产业开发区', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410381000000, '偃师市', 3, 410300000000); +INSERT INTO `zz_area_code` VALUES (410400000000, '平顶山市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (410401000000, '市辖区', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410402000000, '新华区', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410403000000, '卫东区', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410404000000, '石龙区', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410411000000, '湛河区', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410421000000, '宝丰县', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410422000000, '叶县', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410423000000, '鲁山县', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410425000000, '郏县', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410471000000, '平顶山高新技术产业开发区', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410472000000, '平顶山市新城区', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410481000000, '舞钢市', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410482000000, '汝州市', 3, 410400000000); +INSERT INTO `zz_area_code` VALUES (410500000000, '安阳市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (410501000000, '市辖区', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410502000000, '文峰区', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410503000000, '北关区', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410505000000, '殷都区', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410506000000, '龙安区', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410522000000, '安阳县', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410523000000, '汤阴县', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410526000000, '滑县', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410527000000, '内黄县', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410571000000, '安阳高新技术产业开发区', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410581000000, '林州市', 3, 410500000000); +INSERT INTO `zz_area_code` VALUES (410600000000, '鹤壁市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (410601000000, '市辖区', 3, 410600000000); +INSERT INTO `zz_area_code` VALUES (410602000000, '鹤山区', 3, 410600000000); +INSERT INTO `zz_area_code` VALUES (410603000000, '山城区', 3, 410600000000); +INSERT INTO `zz_area_code` VALUES (410611000000, '淇滨区', 3, 410600000000); +INSERT INTO `zz_area_code` VALUES (410621000000, '浚县', 3, 410600000000); +INSERT INTO `zz_area_code` VALUES (410622000000, '淇县', 3, 410600000000); +INSERT INTO `zz_area_code` VALUES (410671000000, '鹤壁经济技术开发区', 3, 410600000000); +INSERT INTO `zz_area_code` VALUES (410700000000, '新乡市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (410701000000, '市辖区', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410702000000, '红旗区', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410703000000, '卫滨区', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410704000000, '凤泉区', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410711000000, '牧野区', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410721000000, '新乡县', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410724000000, '获嘉县', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410725000000, '原阳县', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410726000000, '延津县', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410727000000, '封丘县', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410728000000, '长垣县', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410771000000, '新乡高新技术产业开发区', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410772000000, '新乡经济技术开发区', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410773000000, '新乡市平原城乡一体化示范区', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410781000000, '卫辉市', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410782000000, '辉县市', 3, 410700000000); +INSERT INTO `zz_area_code` VALUES (410800000000, '焦作市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (410801000000, '市辖区', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410802000000, '解放区', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410803000000, '中站区', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410804000000, '马村区', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410811000000, '山阳区', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410821000000, '修武县', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410822000000, '博爱县', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410823000000, '武陟县', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410825000000, '温县', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410871000000, '焦作城乡一体化示范区', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410882000000, '沁阳市', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410883000000, '孟州市', 3, 410800000000); +INSERT INTO `zz_area_code` VALUES (410900000000, '濮阳市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (410901000000, '市辖区', 3, 410900000000); +INSERT INTO `zz_area_code` VALUES (410902000000, '华龙区', 3, 410900000000); +INSERT INTO `zz_area_code` VALUES (410922000000, '清丰县', 3, 410900000000); +INSERT INTO `zz_area_code` VALUES (410923000000, '南乐县', 3, 410900000000); +INSERT INTO `zz_area_code` VALUES (410926000000, '范县', 3, 410900000000); +INSERT INTO `zz_area_code` VALUES (410927000000, '台前县', 3, 410900000000); +INSERT INTO `zz_area_code` VALUES (410928000000, '濮阳县', 3, 410900000000); +INSERT INTO `zz_area_code` VALUES (410971000000, '河南濮阳工业园区', 3, 410900000000); +INSERT INTO `zz_area_code` VALUES (410972000000, '濮阳经济技术开发区', 3, 410900000000); +INSERT INTO `zz_area_code` VALUES (411000000000, '许昌市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (411001000000, '市辖区', 3, 411000000000); +INSERT INTO `zz_area_code` VALUES (411002000000, '魏都区', 3, 411000000000); +INSERT INTO `zz_area_code` VALUES (411003000000, '建安区', 3, 411000000000); +INSERT INTO `zz_area_code` VALUES (411024000000, '鄢陵县', 3, 411000000000); +INSERT INTO `zz_area_code` VALUES (411025000000, '襄城县', 3, 411000000000); +INSERT INTO `zz_area_code` VALUES (411071000000, '许昌经济技术开发区', 3, 411000000000); +INSERT INTO `zz_area_code` VALUES (411081000000, '禹州市', 3, 411000000000); +INSERT INTO `zz_area_code` VALUES (411082000000, '长葛市', 3, 411000000000); +INSERT INTO `zz_area_code` VALUES (411100000000, '漯河市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (411101000000, '市辖区', 3, 411100000000); +INSERT INTO `zz_area_code` VALUES (411102000000, '源汇区', 3, 411100000000); +INSERT INTO `zz_area_code` VALUES (411103000000, '郾城区', 3, 411100000000); +INSERT INTO `zz_area_code` VALUES (411104000000, '召陵区', 3, 411100000000); +INSERT INTO `zz_area_code` VALUES (411121000000, '舞阳县', 3, 411100000000); +INSERT INTO `zz_area_code` VALUES (411122000000, '临颍县', 3, 411100000000); +INSERT INTO `zz_area_code` VALUES (411171000000, '漯河经济技术开发区', 3, 411100000000); +INSERT INTO `zz_area_code` VALUES (411200000000, '三门峡市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (411201000000, '市辖区', 3, 411200000000); +INSERT INTO `zz_area_code` VALUES (411202000000, '湖滨区', 3, 411200000000); +INSERT INTO `zz_area_code` VALUES (411203000000, '陕州区', 3, 411200000000); +INSERT INTO `zz_area_code` VALUES (411221000000, '渑池县', 3, 411200000000); +INSERT INTO `zz_area_code` VALUES (411224000000, '卢氏县', 3, 411200000000); +INSERT INTO `zz_area_code` VALUES (411271000000, '河南三门峡经济开发区', 3, 411200000000); +INSERT INTO `zz_area_code` VALUES (411281000000, '义马市', 3, 411200000000); +INSERT INTO `zz_area_code` VALUES (411282000000, '灵宝市', 3, 411200000000); +INSERT INTO `zz_area_code` VALUES (411300000000, '南阳市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (411301000000, '市辖区', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411302000000, '宛城区', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411303000000, '卧龙区', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411321000000, '南召县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411322000000, '方城县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411323000000, '西峡县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411324000000, '镇平县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411325000000, '内乡县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411326000000, '淅川县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411327000000, '社旗县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411328000000, '唐河县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411329000000, '新野县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411330000000, '桐柏县', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411371000000, '南阳高新技术产业开发区', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411372000000, '南阳市城乡一体化示范区', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411381000000, '邓州市', 3, 411300000000); +INSERT INTO `zz_area_code` VALUES (411400000000, '商丘市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (411401000000, '市辖区', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411402000000, '梁园区', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411403000000, '睢阳区', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411421000000, '民权县', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411422000000, '睢县', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411423000000, '宁陵县', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411424000000, '柘城县', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411425000000, '虞城县', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411426000000, '夏邑县', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411471000000, '豫东综合物流产业聚集区', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411472000000, '河南商丘经济开发区', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411481000000, '永城市', 3, 411400000000); +INSERT INTO `zz_area_code` VALUES (411500000000, '信阳市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (411501000000, '市辖区', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411502000000, '浉河区', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411503000000, '平桥区', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411521000000, '罗山县', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411522000000, '光山县', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411523000000, '新县', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411524000000, '商城县', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411525000000, '固始县', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411526000000, '潢川县', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411527000000, '淮滨县', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411528000000, '息县', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411571000000, '信阳高新技术产业开发区', 3, 411500000000); +INSERT INTO `zz_area_code` VALUES (411600000000, '周口市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (411601000000, '市辖区', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411602000000, '川汇区', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411621000000, '扶沟县', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411622000000, '西华县', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411623000000, '商水县', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411624000000, '沈丘县', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411625000000, '郸城县', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411626000000, '淮阳县', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411627000000, '太康县', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411628000000, '鹿邑县', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411671000000, '河南周口经济开发区', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411681000000, '项城市', 3, 411600000000); +INSERT INTO `zz_area_code` VALUES (411700000000, '驻马店市', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (411701000000, '市辖区', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411702000000, '驿城区', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411721000000, '西平县', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411722000000, '上蔡县', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411723000000, '平舆县', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411724000000, '正阳县', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411725000000, '确山县', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411726000000, '泌阳县', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411727000000, '汝南县', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411728000000, '遂平县', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411729000000, '新蔡县', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (411771000000, '河南驻马店经济开发区', 3, 411700000000); +INSERT INTO `zz_area_code` VALUES (419000000000, '省直辖县级行政区划', 2, 410000000000); +INSERT INTO `zz_area_code` VALUES (419001000000, '济源市', 3, 419000000000); +INSERT INTO `zz_area_code` VALUES (420000000000, '湖北省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (420100000000, '武汉市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (420101000000, '市辖区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420102000000, '江岸区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420103000000, '江汉区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420104000000, '硚口区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420105000000, '汉阳区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420106000000, '武昌区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420107000000, '青山区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420111000000, '洪山区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420112000000, '东西湖区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420113000000, '汉南区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420114000000, '蔡甸区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420115000000, '江夏区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420116000000, '黄陂区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420117000000, '新洲区', 3, 420100000000); +INSERT INTO `zz_area_code` VALUES (420200000000, '黄石市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (420201000000, '市辖区', 3, 420200000000); +INSERT INTO `zz_area_code` VALUES (420202000000, '黄石港区', 3, 420200000000); +INSERT INTO `zz_area_code` VALUES (420203000000, '西塞山区', 3, 420200000000); +INSERT INTO `zz_area_code` VALUES (420204000000, '下陆区', 3, 420200000000); +INSERT INTO `zz_area_code` VALUES (420205000000, '铁山区', 3, 420200000000); +INSERT INTO `zz_area_code` VALUES (420222000000, '阳新县', 3, 420200000000); +INSERT INTO `zz_area_code` VALUES (420281000000, '大冶市', 3, 420200000000); +INSERT INTO `zz_area_code` VALUES (420300000000, '十堰市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (420301000000, '市辖区', 3, 420300000000); +INSERT INTO `zz_area_code` VALUES (420302000000, '茅箭区', 3, 420300000000); +INSERT INTO `zz_area_code` VALUES (420303000000, '张湾区', 3, 420300000000); +INSERT INTO `zz_area_code` VALUES (420304000000, '郧阳区', 3, 420300000000); +INSERT INTO `zz_area_code` VALUES (420322000000, '郧西县', 3, 420300000000); +INSERT INTO `zz_area_code` VALUES (420323000000, '竹山县', 3, 420300000000); +INSERT INTO `zz_area_code` VALUES (420324000000, '竹溪县', 3, 420300000000); +INSERT INTO `zz_area_code` VALUES (420325000000, '房县', 3, 420300000000); +INSERT INTO `zz_area_code` VALUES (420381000000, '丹江口市', 3, 420300000000); +INSERT INTO `zz_area_code` VALUES (420500000000, '宜昌市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (420501000000, '市辖区', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420502000000, '西陵区', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420503000000, '伍家岗区', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420504000000, '点军区', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420505000000, '猇亭区', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420506000000, '夷陵区', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420525000000, '远安县', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420526000000, '兴山县', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420527000000, '秭归县', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420528000000, '长阳土家族自治县', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420529000000, '五峰土家族自治县', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420581000000, '宜都市', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420582000000, '当阳市', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420583000000, '枝江市', 3, 420500000000); +INSERT INTO `zz_area_code` VALUES (420600000000, '襄阳市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (420601000000, '市辖区', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420602000000, '襄城区', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420606000000, '樊城区', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420607000000, '襄州区', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420624000000, '南漳县', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420625000000, '谷城县', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420626000000, '保康县', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420682000000, '老河口市', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420683000000, '枣阳市', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420684000000, '宜城市', 3, 420600000000); +INSERT INTO `zz_area_code` VALUES (420700000000, '鄂州市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (420701000000, '市辖区', 3, 420700000000); +INSERT INTO `zz_area_code` VALUES (420702000000, '梁子湖区', 3, 420700000000); +INSERT INTO `zz_area_code` VALUES (420703000000, '华容区', 3, 420700000000); +INSERT INTO `zz_area_code` VALUES (420704000000, '鄂城区', 3, 420700000000); +INSERT INTO `zz_area_code` VALUES (420800000000, '荆门市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (420801000000, '市辖区', 3, 420800000000); +INSERT INTO `zz_area_code` VALUES (420802000000, '东宝区', 3, 420800000000); +INSERT INTO `zz_area_code` VALUES (420804000000, '掇刀区', 3, 420800000000); +INSERT INTO `zz_area_code` VALUES (420822000000, '沙洋县', 3, 420800000000); +INSERT INTO `zz_area_code` VALUES (420881000000, '钟祥市', 3, 420800000000); +INSERT INTO `zz_area_code` VALUES (420882000000, '京山市', 3, 420800000000); +INSERT INTO `zz_area_code` VALUES (420900000000, '孝感市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (420901000000, '市辖区', 3, 420900000000); +INSERT INTO `zz_area_code` VALUES (420902000000, '孝南区', 3, 420900000000); +INSERT INTO `zz_area_code` VALUES (420921000000, '孝昌县', 3, 420900000000); +INSERT INTO `zz_area_code` VALUES (420922000000, '大悟县', 3, 420900000000); +INSERT INTO `zz_area_code` VALUES (420923000000, '云梦县', 3, 420900000000); +INSERT INTO `zz_area_code` VALUES (420981000000, '应城市', 3, 420900000000); +INSERT INTO `zz_area_code` VALUES (420982000000, '安陆市', 3, 420900000000); +INSERT INTO `zz_area_code` VALUES (420984000000, '汉川市', 3, 420900000000); +INSERT INTO `zz_area_code` VALUES (421000000000, '荆州市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (421001000000, '市辖区', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421002000000, '沙市区', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421003000000, '荆州区', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421022000000, '公安县', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421023000000, '监利县', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421024000000, '江陵县', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421071000000, '荆州经济技术开发区', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421081000000, '石首市', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421083000000, '洪湖市', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421087000000, '松滋市', 3, 421000000000); +INSERT INTO `zz_area_code` VALUES (421100000000, '黄冈市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (421101000000, '市辖区', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421102000000, '黄州区', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421121000000, '团风县', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421122000000, '红安县', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421123000000, '罗田县', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421124000000, '英山县', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421125000000, '浠水县', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421126000000, '蕲春县', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421127000000, '黄梅县', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421171000000, '龙感湖管理区', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421181000000, '麻城市', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421182000000, '武穴市', 3, 421100000000); +INSERT INTO `zz_area_code` VALUES (421200000000, '咸宁市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (421201000000, '市辖区', 3, 421200000000); +INSERT INTO `zz_area_code` VALUES (421202000000, '咸安区', 3, 421200000000); +INSERT INTO `zz_area_code` VALUES (421221000000, '嘉鱼县', 3, 421200000000); +INSERT INTO `zz_area_code` VALUES (421222000000, '通城县', 3, 421200000000); +INSERT INTO `zz_area_code` VALUES (421223000000, '崇阳县', 3, 421200000000); +INSERT INTO `zz_area_code` VALUES (421224000000, '通山县', 3, 421200000000); +INSERT INTO `zz_area_code` VALUES (421281000000, '赤壁市', 3, 421200000000); +INSERT INTO `zz_area_code` VALUES (421300000000, '随州市', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (421301000000, '市辖区', 3, 421300000000); +INSERT INTO `zz_area_code` VALUES (421303000000, '曾都区', 3, 421300000000); +INSERT INTO `zz_area_code` VALUES (421321000000, '随县', 3, 421300000000); +INSERT INTO `zz_area_code` VALUES (421381000000, '广水市', 3, 421300000000); +INSERT INTO `zz_area_code` VALUES (422800000000, '恩施土家族苗族自治州', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (422801000000, '恩施市', 3, 422800000000); +INSERT INTO `zz_area_code` VALUES (422802000000, '利川市', 3, 422800000000); +INSERT INTO `zz_area_code` VALUES (422822000000, '建始县', 3, 422800000000); +INSERT INTO `zz_area_code` VALUES (422823000000, '巴东县', 3, 422800000000); +INSERT INTO `zz_area_code` VALUES (422825000000, '宣恩县', 3, 422800000000); +INSERT INTO `zz_area_code` VALUES (422826000000, '咸丰县', 3, 422800000000); +INSERT INTO `zz_area_code` VALUES (422827000000, '来凤县', 3, 422800000000); +INSERT INTO `zz_area_code` VALUES (422828000000, '鹤峰县', 3, 422800000000); +INSERT INTO `zz_area_code` VALUES (429000000000, '省直辖县级行政区划', 2, 420000000000); +INSERT INTO `zz_area_code` VALUES (429004000000, '仙桃市', 3, 429000000000); +INSERT INTO `zz_area_code` VALUES (429005000000, '潜江市', 3, 429000000000); +INSERT INTO `zz_area_code` VALUES (429006000000, '天门市', 3, 429000000000); +INSERT INTO `zz_area_code` VALUES (429021000000, '神农架林区', 3, 429000000000); +INSERT INTO `zz_area_code` VALUES (430000000000, '湖南省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (430100000000, '长沙市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (430101000000, '市辖区', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430102000000, '芙蓉区', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430103000000, '天心区', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430104000000, '岳麓区', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430105000000, '开福区', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430111000000, '雨花区', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430112000000, '望城区', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430121000000, '长沙县', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430181000000, '浏阳市', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430182000000, '宁乡市', 3, 430100000000); +INSERT INTO `zz_area_code` VALUES (430200000000, '株洲市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (430201000000, '市辖区', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430202000000, '荷塘区', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430203000000, '芦淞区', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430204000000, '石峰区', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430211000000, '天元区', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430212000000, '渌口区', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430223000000, '攸县', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430224000000, '茶陵县', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430225000000, '炎陵县', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430271000000, '云龙示范区', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430281000000, '醴陵市', 3, 430200000000); +INSERT INTO `zz_area_code` VALUES (430300000000, '湘潭市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (430301000000, '市辖区', 3, 430300000000); +INSERT INTO `zz_area_code` VALUES (430302000000, '雨湖区', 3, 430300000000); +INSERT INTO `zz_area_code` VALUES (430304000000, '岳塘区', 3, 430300000000); +INSERT INTO `zz_area_code` VALUES (430321000000, '湘潭县', 3, 430300000000); +INSERT INTO `zz_area_code` VALUES (430371000000, '湖南湘潭高新技术产业园区', 3, 430300000000); +INSERT INTO `zz_area_code` VALUES (430372000000, '湘潭昭山示范区', 3, 430300000000); +INSERT INTO `zz_area_code` VALUES (430373000000, '湘潭九华示范区', 3, 430300000000); +INSERT INTO `zz_area_code` VALUES (430381000000, '湘乡市', 3, 430300000000); +INSERT INTO `zz_area_code` VALUES (430382000000, '韶山市', 3, 430300000000); +INSERT INTO `zz_area_code` VALUES (430400000000, '衡阳市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (430401000000, '市辖区', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430405000000, '珠晖区', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430406000000, '雁峰区', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430407000000, '石鼓区', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430408000000, '蒸湘区', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430412000000, '南岳区', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430421000000, '衡阳县', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430422000000, '衡南县', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430423000000, '衡山县', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430424000000, '衡东县', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430426000000, '祁东县', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430471000000, '衡阳综合保税区', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430472000000, '湖南衡阳高新技术产业园区', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430473000000, '湖南衡阳松木经济开发区', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430481000000, '耒阳市', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430482000000, '常宁市', 3, 430400000000); +INSERT INTO `zz_area_code` VALUES (430500000000, '邵阳市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (430501000000, '市辖区', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430502000000, '双清区', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430503000000, '大祥区', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430511000000, '北塔区', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430521000000, '邵东县', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430522000000, '新邵县', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430523000000, '邵阳县', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430524000000, '隆回县', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430525000000, '洞口县', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430527000000, '绥宁县', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430528000000, '新宁县', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430529000000, '城步苗族自治县', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430581000000, '武冈市', 3, 430500000000); +INSERT INTO `zz_area_code` VALUES (430600000000, '岳阳市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (430601000000, '市辖区', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430602000000, '岳阳楼区', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430603000000, '云溪区', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430611000000, '君山区', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430621000000, '岳阳县', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430623000000, '华容县', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430624000000, '湘阴县', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430626000000, '平江县', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430671000000, '岳阳市屈原管理区', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430681000000, '汨罗市', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430682000000, '临湘市', 3, 430600000000); +INSERT INTO `zz_area_code` VALUES (430700000000, '常德市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (430701000000, '市辖区', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430702000000, '武陵区', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430703000000, '鼎城区', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430721000000, '安乡县', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430722000000, '汉寿县', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430723000000, '澧县', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430724000000, '临澧县', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430725000000, '桃源县', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430726000000, '石门县', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430771000000, '常德市西洞庭管理区', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430781000000, '津市市', 3, 430700000000); +INSERT INTO `zz_area_code` VALUES (430800000000, '张家界市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (430801000000, '市辖区', 3, 430800000000); +INSERT INTO `zz_area_code` VALUES (430802000000, '永定区', 3, 430800000000); +INSERT INTO `zz_area_code` VALUES (430811000000, '武陵源区', 3, 430800000000); +INSERT INTO `zz_area_code` VALUES (430821000000, '慈利县', 3, 430800000000); +INSERT INTO `zz_area_code` VALUES (430822000000, '桑植县', 3, 430800000000); +INSERT INTO `zz_area_code` VALUES (430900000000, '益阳市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (430901000000, '市辖区', 3, 430900000000); +INSERT INTO `zz_area_code` VALUES (430902000000, '资阳区', 3, 430900000000); +INSERT INTO `zz_area_code` VALUES (430903000000, '赫山区', 3, 430900000000); +INSERT INTO `zz_area_code` VALUES (430921000000, '南县', 3, 430900000000); +INSERT INTO `zz_area_code` VALUES (430922000000, '桃江县', 3, 430900000000); +INSERT INTO `zz_area_code` VALUES (430923000000, '安化县', 3, 430900000000); +INSERT INTO `zz_area_code` VALUES (430971000000, '益阳市大通湖管理区', 3, 430900000000); +INSERT INTO `zz_area_code` VALUES (430972000000, '湖南益阳高新技术产业园区', 3, 430900000000); +INSERT INTO `zz_area_code` VALUES (430981000000, '沅江市', 3, 430900000000); +INSERT INTO `zz_area_code` VALUES (431000000000, '郴州市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (431001000000, '市辖区', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431002000000, '北湖区', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431003000000, '苏仙区', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431021000000, '桂阳县', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431022000000, '宜章县', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431023000000, '永兴县', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431024000000, '嘉禾县', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431025000000, '临武县', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431026000000, '汝城县', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431027000000, '桂东县', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431028000000, '安仁县', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431081000000, '资兴市', 3, 431000000000); +INSERT INTO `zz_area_code` VALUES (431100000000, '永州市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (431101000000, '市辖区', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431102000000, '零陵区', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431103000000, '冷水滩区', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431121000000, '祁阳县', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431122000000, '东安县', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431123000000, '双牌县', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431124000000, '道县', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431125000000, '江永县', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431126000000, '宁远县', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431127000000, '蓝山县', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431128000000, '新田县', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431129000000, '江华瑶族自治县', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431171000000, '永州经济技术开发区', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431172000000, '永州市金洞管理区', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431173000000, '永州市回龙圩管理区', 3, 431100000000); +INSERT INTO `zz_area_code` VALUES (431200000000, '怀化市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (431201000000, '市辖区', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431202000000, '鹤城区', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431221000000, '中方县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431222000000, '沅陵县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431223000000, '辰溪县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431224000000, '溆浦县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431225000000, '会同县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431226000000, '麻阳苗族自治县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431227000000, '新晃侗族自治县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431228000000, '芷江侗族自治县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431229000000, '靖州苗族侗族自治县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431230000000, '通道侗族自治县', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431271000000, '怀化市洪江管理区', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431281000000, '洪江市', 3, 431200000000); +INSERT INTO `zz_area_code` VALUES (431300000000, '娄底市', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (431301000000, '市辖区', 3, 431300000000); +INSERT INTO `zz_area_code` VALUES (431302000000, '娄星区', 3, 431300000000); +INSERT INTO `zz_area_code` VALUES (431321000000, '双峰县', 3, 431300000000); +INSERT INTO `zz_area_code` VALUES (431322000000, '新化县', 3, 431300000000); +INSERT INTO `zz_area_code` VALUES (431381000000, '冷水江市', 3, 431300000000); +INSERT INTO `zz_area_code` VALUES (431382000000, '涟源市', 3, 431300000000); +INSERT INTO `zz_area_code` VALUES (433100000000, '湘西土家族苗族自治州', 2, 430000000000); +INSERT INTO `zz_area_code` VALUES (433101000000, '吉首市', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (433122000000, '泸溪县', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (433123000000, '凤凰县', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (433124000000, '花垣县', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (433125000000, '保靖县', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (433126000000, '古丈县', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (433127000000, '永顺县', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (433130000000, '龙山县', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (433172000000, '湖南吉首经济开发区', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (433173000000, '湖南永顺经济开发区', 3, 433100000000); +INSERT INTO `zz_area_code` VALUES (440000000000, '广东省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (440100000000, '广州市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (440101000000, '市辖区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440103000000, '荔湾区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440104000000, '越秀区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440105000000, '海珠区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440106000000, '天河区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440111000000, '白云区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440112000000, '黄埔区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440113000000, '番禺区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440114000000, '花都区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440115000000, '南沙区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440117000000, '从化区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440118000000, '增城区', 3, 440100000000); +INSERT INTO `zz_area_code` VALUES (440200000000, '韶关市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (440201000000, '市辖区', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440203000000, '武江区', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440204000000, '浈江区', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440205000000, '曲江区', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440222000000, '始兴县', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440224000000, '仁化县', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440229000000, '翁源县', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440232000000, '乳源瑶族自治县', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440233000000, '新丰县', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440281000000, '乐昌市', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440282000000, '南雄市', 3, 440200000000); +INSERT INTO `zz_area_code` VALUES (440300000000, '深圳市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (440301000000, '市辖区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440303000000, '罗湖区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440304000000, '福田区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440305000000, '南山区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440306000000, '宝安区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440307000000, '龙岗区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440308000000, '盐田区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440309000000, '龙华区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440310000000, '坪山区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440311000000, '光明区', 3, 440300000000); +INSERT INTO `zz_area_code` VALUES (440400000000, '珠海市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (440401000000, '市辖区', 3, 440400000000); +INSERT INTO `zz_area_code` VALUES (440402000000, '香洲区', 3, 440400000000); +INSERT INTO `zz_area_code` VALUES (440403000000, '斗门区', 3, 440400000000); +INSERT INTO `zz_area_code` VALUES (440404000000, '金湾区', 3, 440400000000); +INSERT INTO `zz_area_code` VALUES (440500000000, '汕头市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (440501000000, '市辖区', 3, 440500000000); +INSERT INTO `zz_area_code` VALUES (440507000000, '龙湖区', 3, 440500000000); +INSERT INTO `zz_area_code` VALUES (440511000000, '金平区', 3, 440500000000); +INSERT INTO `zz_area_code` VALUES (440512000000, '濠江区', 3, 440500000000); +INSERT INTO `zz_area_code` VALUES (440513000000, '潮阳区', 3, 440500000000); +INSERT INTO `zz_area_code` VALUES (440514000000, '潮南区', 3, 440500000000); +INSERT INTO `zz_area_code` VALUES (440515000000, '澄海区', 3, 440500000000); +INSERT INTO `zz_area_code` VALUES (440523000000, '南澳县', 3, 440500000000); +INSERT INTO `zz_area_code` VALUES (440600000000, '佛山市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (440601000000, '市辖区', 3, 440600000000); +INSERT INTO `zz_area_code` VALUES (440604000000, '禅城区', 3, 440600000000); +INSERT INTO `zz_area_code` VALUES (440605000000, '南海区', 3, 440600000000); +INSERT INTO `zz_area_code` VALUES (440606000000, '顺德区', 3, 440600000000); +INSERT INTO `zz_area_code` VALUES (440607000000, '三水区', 3, 440600000000); +INSERT INTO `zz_area_code` VALUES (440608000000, '高明区', 3, 440600000000); +INSERT INTO `zz_area_code` VALUES (440700000000, '江门市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (440701000000, '市辖区', 3, 440700000000); +INSERT INTO `zz_area_code` VALUES (440703000000, '蓬江区', 3, 440700000000); +INSERT INTO `zz_area_code` VALUES (440704000000, '江海区', 3, 440700000000); +INSERT INTO `zz_area_code` VALUES (440705000000, '新会区', 3, 440700000000); +INSERT INTO `zz_area_code` VALUES (440781000000, '台山市', 3, 440700000000); +INSERT INTO `zz_area_code` VALUES (440783000000, '开平市', 3, 440700000000); +INSERT INTO `zz_area_code` VALUES (440784000000, '鹤山市', 3, 440700000000); +INSERT INTO `zz_area_code` VALUES (440785000000, '恩平市', 3, 440700000000); +INSERT INTO `zz_area_code` VALUES (440800000000, '湛江市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (440801000000, '市辖区', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440802000000, '赤坎区', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440803000000, '霞山区', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440804000000, '坡头区', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440811000000, '麻章区', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440823000000, '遂溪县', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440825000000, '徐闻县', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440881000000, '廉江市', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440882000000, '雷州市', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440883000000, '吴川市', 3, 440800000000); +INSERT INTO `zz_area_code` VALUES (440900000000, '茂名市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (440901000000, '市辖区', 3, 440900000000); +INSERT INTO `zz_area_code` VALUES (440902000000, '茂南区', 3, 440900000000); +INSERT INTO `zz_area_code` VALUES (440904000000, '电白区', 3, 440900000000); +INSERT INTO `zz_area_code` VALUES (440981000000, '高州市', 3, 440900000000); +INSERT INTO `zz_area_code` VALUES (440982000000, '化州市', 3, 440900000000); +INSERT INTO `zz_area_code` VALUES (440983000000, '信宜市', 3, 440900000000); +INSERT INTO `zz_area_code` VALUES (441200000000, '肇庆市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (441201000000, '市辖区', 3, 441200000000); +INSERT INTO `zz_area_code` VALUES (441202000000, '端州区', 3, 441200000000); +INSERT INTO `zz_area_code` VALUES (441203000000, '鼎湖区', 3, 441200000000); +INSERT INTO `zz_area_code` VALUES (441204000000, '高要区', 3, 441200000000); +INSERT INTO `zz_area_code` VALUES (441223000000, '广宁县', 3, 441200000000); +INSERT INTO `zz_area_code` VALUES (441224000000, '怀集县', 3, 441200000000); +INSERT INTO `zz_area_code` VALUES (441225000000, '封开县', 3, 441200000000); +INSERT INTO `zz_area_code` VALUES (441226000000, '德庆县', 3, 441200000000); +INSERT INTO `zz_area_code` VALUES (441284000000, '四会市', 3, 441200000000); +INSERT INTO `zz_area_code` VALUES (441300000000, '惠州市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (441301000000, '市辖区', 3, 441300000000); +INSERT INTO `zz_area_code` VALUES (441302000000, '惠城区', 3, 441300000000); +INSERT INTO `zz_area_code` VALUES (441303000000, '惠阳区', 3, 441300000000); +INSERT INTO `zz_area_code` VALUES (441322000000, '博罗县', 3, 441300000000); +INSERT INTO `zz_area_code` VALUES (441323000000, '惠东县', 3, 441300000000); +INSERT INTO `zz_area_code` VALUES (441324000000, '龙门县', 3, 441300000000); +INSERT INTO `zz_area_code` VALUES (441400000000, '梅州市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (441401000000, '市辖区', 3, 441400000000); +INSERT INTO `zz_area_code` VALUES (441402000000, '梅江区', 3, 441400000000); +INSERT INTO `zz_area_code` VALUES (441403000000, '梅县区', 3, 441400000000); +INSERT INTO `zz_area_code` VALUES (441422000000, '大埔县', 3, 441400000000); +INSERT INTO `zz_area_code` VALUES (441423000000, '丰顺县', 3, 441400000000); +INSERT INTO `zz_area_code` VALUES (441424000000, '五华县', 3, 441400000000); +INSERT INTO `zz_area_code` VALUES (441426000000, '平远县', 3, 441400000000); +INSERT INTO `zz_area_code` VALUES (441427000000, '蕉岭县', 3, 441400000000); +INSERT INTO `zz_area_code` VALUES (441481000000, '兴宁市', 3, 441400000000); +INSERT INTO `zz_area_code` VALUES (441500000000, '汕尾市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (441501000000, '市辖区', 3, 441500000000); +INSERT INTO `zz_area_code` VALUES (441502000000, '城区', 3, 441500000000); +INSERT INTO `zz_area_code` VALUES (441521000000, '海丰县', 3, 441500000000); +INSERT INTO `zz_area_code` VALUES (441523000000, '陆河县', 3, 441500000000); +INSERT INTO `zz_area_code` VALUES (441581000000, '陆丰市', 3, 441500000000); +INSERT INTO `zz_area_code` VALUES (441600000000, '河源市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (441601000000, '市辖区', 3, 441600000000); +INSERT INTO `zz_area_code` VALUES (441602000000, '源城区', 3, 441600000000); +INSERT INTO `zz_area_code` VALUES (441621000000, '紫金县', 3, 441600000000); +INSERT INTO `zz_area_code` VALUES (441622000000, '龙川县', 3, 441600000000); +INSERT INTO `zz_area_code` VALUES (441623000000, '连平县', 3, 441600000000); +INSERT INTO `zz_area_code` VALUES (441624000000, '和平县', 3, 441600000000); +INSERT INTO `zz_area_code` VALUES (441625000000, '东源县', 3, 441600000000); +INSERT INTO `zz_area_code` VALUES (441700000000, '阳江市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (441701000000, '市辖区', 3, 441700000000); +INSERT INTO `zz_area_code` VALUES (441702000000, '江城区', 3, 441700000000); +INSERT INTO `zz_area_code` VALUES (441704000000, '阳东区', 3, 441700000000); +INSERT INTO `zz_area_code` VALUES (441721000000, '阳西县', 3, 441700000000); +INSERT INTO `zz_area_code` VALUES (441781000000, '阳春市', 3, 441700000000); +INSERT INTO `zz_area_code` VALUES (441800000000, '清远市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (441801000000, '市辖区', 3, 441800000000); +INSERT INTO `zz_area_code` VALUES (441802000000, '清城区', 3, 441800000000); +INSERT INTO `zz_area_code` VALUES (441803000000, '清新区', 3, 441800000000); +INSERT INTO `zz_area_code` VALUES (441821000000, '佛冈县', 3, 441800000000); +INSERT INTO `zz_area_code` VALUES (441823000000, '阳山县', 3, 441800000000); +INSERT INTO `zz_area_code` VALUES (441825000000, '连山壮族瑶族自治县', 3, 441800000000); +INSERT INTO `zz_area_code` VALUES (441826000000, '连南瑶族自治县', 3, 441800000000); +INSERT INTO `zz_area_code` VALUES (441881000000, '英德市', 3, 441800000000); +INSERT INTO `zz_area_code` VALUES (441882000000, '连州市', 3, 441800000000); +INSERT INTO `zz_area_code` VALUES (441900000000, '东莞市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (442000000000, '中山市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (445100000000, '潮州市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (445101000000, '市辖区', 3, 445100000000); +INSERT INTO `zz_area_code` VALUES (445102000000, '湘桥区', 3, 445100000000); +INSERT INTO `zz_area_code` VALUES (445103000000, '潮安区', 3, 445100000000); +INSERT INTO `zz_area_code` VALUES (445122000000, '饶平县', 3, 445100000000); +INSERT INTO `zz_area_code` VALUES (445200000000, '揭阳市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (445201000000, '市辖区', 3, 445200000000); +INSERT INTO `zz_area_code` VALUES (445202000000, '榕城区', 3, 445200000000); +INSERT INTO `zz_area_code` VALUES (445203000000, '揭东区', 3, 445200000000); +INSERT INTO `zz_area_code` VALUES (445222000000, '揭西县', 3, 445200000000); +INSERT INTO `zz_area_code` VALUES (445224000000, '惠来县', 3, 445200000000); +INSERT INTO `zz_area_code` VALUES (445281000000, '普宁市', 3, 445200000000); +INSERT INTO `zz_area_code` VALUES (445300000000, '云浮市', 2, 440000000000); +INSERT INTO `zz_area_code` VALUES (445301000000, '市辖区', 3, 445300000000); +INSERT INTO `zz_area_code` VALUES (445302000000, '云城区', 3, 445300000000); +INSERT INTO `zz_area_code` VALUES (445303000000, '云安区', 3, 445300000000); +INSERT INTO `zz_area_code` VALUES (445321000000, '新兴县', 3, 445300000000); +INSERT INTO `zz_area_code` VALUES (445322000000, '郁南县', 3, 445300000000); +INSERT INTO `zz_area_code` VALUES (445381000000, '罗定市', 3, 445300000000); +INSERT INTO `zz_area_code` VALUES (450000000000, '广西壮族自治区', 1, NULL); +INSERT INTO `zz_area_code` VALUES (450100000000, '南宁市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (450101000000, '市辖区', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450102000000, '兴宁区', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450103000000, '青秀区', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450105000000, '江南区', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450107000000, '西乡塘区', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450108000000, '良庆区', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450109000000, '邕宁区', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450110000000, '武鸣区', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450123000000, '隆安县', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450124000000, '马山县', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450125000000, '上林县', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450126000000, '宾阳县', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450127000000, '横县', 3, 450100000000); +INSERT INTO `zz_area_code` VALUES (450200000000, '柳州市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (450201000000, '市辖区', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450202000000, '城中区', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450203000000, '鱼峰区', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450204000000, '柳南区', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450205000000, '柳北区', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450206000000, '柳江区', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450222000000, '柳城县', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450223000000, '鹿寨县', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450224000000, '融安县', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450225000000, '融水苗族自治县', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450226000000, '三江侗族自治县', 3, 450200000000); +INSERT INTO `zz_area_code` VALUES (450300000000, '桂林市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (450301000000, '市辖区', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450302000000, '秀峰区', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450303000000, '叠彩区', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450304000000, '象山区', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450305000000, '七星区', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450311000000, '雁山区', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450312000000, '临桂区', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450321000000, '阳朔县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450323000000, '灵川县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450324000000, '全州县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450325000000, '兴安县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450326000000, '永福县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450327000000, '灌阳县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450328000000, '龙胜各族自治县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450329000000, '资源县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450330000000, '平乐县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450332000000, '恭城瑶族自治县', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450381000000, '荔浦市', 3, 450300000000); +INSERT INTO `zz_area_code` VALUES (450400000000, '梧州市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (450401000000, '市辖区', 3, 450400000000); +INSERT INTO `zz_area_code` VALUES (450403000000, '万秀区', 3, 450400000000); +INSERT INTO `zz_area_code` VALUES (450405000000, '长洲区', 3, 450400000000); +INSERT INTO `zz_area_code` VALUES (450406000000, '龙圩区', 3, 450400000000); +INSERT INTO `zz_area_code` VALUES (450421000000, '苍梧县', 3, 450400000000); +INSERT INTO `zz_area_code` VALUES (450422000000, '藤县', 3, 450400000000); +INSERT INTO `zz_area_code` VALUES (450423000000, '蒙山县', 3, 450400000000); +INSERT INTO `zz_area_code` VALUES (450481000000, '岑溪市', 3, 450400000000); +INSERT INTO `zz_area_code` VALUES (450500000000, '北海市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (450501000000, '市辖区', 3, 450500000000); +INSERT INTO `zz_area_code` VALUES (450502000000, '海城区', 3, 450500000000); +INSERT INTO `zz_area_code` VALUES (450503000000, '银海区', 3, 450500000000); +INSERT INTO `zz_area_code` VALUES (450512000000, '铁山港区', 3, 450500000000); +INSERT INTO `zz_area_code` VALUES (450521000000, '合浦县', 3, 450500000000); +INSERT INTO `zz_area_code` VALUES (450600000000, '防城港市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (450601000000, '市辖区', 3, 450600000000); +INSERT INTO `zz_area_code` VALUES (450602000000, '港口区', 3, 450600000000); +INSERT INTO `zz_area_code` VALUES (450603000000, '防城区', 3, 450600000000); +INSERT INTO `zz_area_code` VALUES (450621000000, '上思县', 3, 450600000000); +INSERT INTO `zz_area_code` VALUES (450681000000, '东兴市', 3, 450600000000); +INSERT INTO `zz_area_code` VALUES (450700000000, '钦州市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (450701000000, '市辖区', 3, 450700000000); +INSERT INTO `zz_area_code` VALUES (450702000000, '钦南区', 3, 450700000000); +INSERT INTO `zz_area_code` VALUES (450703000000, '钦北区', 3, 450700000000); +INSERT INTO `zz_area_code` VALUES (450721000000, '灵山县', 3, 450700000000); +INSERT INTO `zz_area_code` VALUES (450722000000, '浦北县', 3, 450700000000); +INSERT INTO `zz_area_code` VALUES (450800000000, '贵港市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (450801000000, '市辖区', 3, 450800000000); +INSERT INTO `zz_area_code` VALUES (450802000000, '港北区', 3, 450800000000); +INSERT INTO `zz_area_code` VALUES (450803000000, '港南区', 3, 450800000000); +INSERT INTO `zz_area_code` VALUES (450804000000, '覃塘区', 3, 450800000000); +INSERT INTO `zz_area_code` VALUES (450821000000, '平南县', 3, 450800000000); +INSERT INTO `zz_area_code` VALUES (450881000000, '桂平市', 3, 450800000000); +INSERT INTO `zz_area_code` VALUES (450900000000, '玉林市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (450901000000, '市辖区', 3, 450900000000); +INSERT INTO `zz_area_code` VALUES (450902000000, '玉州区', 3, 450900000000); +INSERT INTO `zz_area_code` VALUES (450903000000, '福绵区', 3, 450900000000); +INSERT INTO `zz_area_code` VALUES (450921000000, '容县', 3, 450900000000); +INSERT INTO `zz_area_code` VALUES (450922000000, '陆川县', 3, 450900000000); +INSERT INTO `zz_area_code` VALUES (450923000000, '博白县', 3, 450900000000); +INSERT INTO `zz_area_code` VALUES (450924000000, '兴业县', 3, 450900000000); +INSERT INTO `zz_area_code` VALUES (450981000000, '北流市', 3, 450900000000); +INSERT INTO `zz_area_code` VALUES (451000000000, '百色市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (451001000000, '市辖区', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451002000000, '右江区', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451021000000, '田阳县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451022000000, '田东县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451023000000, '平果县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451024000000, '德保县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451026000000, '那坡县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451027000000, '凌云县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451028000000, '乐业县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451029000000, '田林县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451030000000, '西林县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451031000000, '隆林各族自治县', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451081000000, '靖西市', 3, 451000000000); +INSERT INTO `zz_area_code` VALUES (451100000000, '贺州市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (451101000000, '市辖区', 3, 451100000000); +INSERT INTO `zz_area_code` VALUES (451102000000, '八步区', 3, 451100000000); +INSERT INTO `zz_area_code` VALUES (451103000000, '平桂区', 3, 451100000000); +INSERT INTO `zz_area_code` VALUES (451121000000, '昭平县', 3, 451100000000); +INSERT INTO `zz_area_code` VALUES (451122000000, '钟山县', 3, 451100000000); +INSERT INTO `zz_area_code` VALUES (451123000000, '富川瑶族自治县', 3, 451100000000); +INSERT INTO `zz_area_code` VALUES (451200000000, '河池市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (451201000000, '市辖区', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451202000000, '金城江区', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451203000000, '宜州区', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451221000000, '南丹县', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451222000000, '天峨县', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451223000000, '凤山县', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451224000000, '东兰县', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451225000000, '罗城仫佬族自治县', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451226000000, '环江毛南族自治县', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451227000000, '巴马瑶族自治县', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451228000000, '都安瑶族自治县', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451229000000, '大化瑶族自治县', 3, 451200000000); +INSERT INTO `zz_area_code` VALUES (451300000000, '来宾市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (451301000000, '市辖区', 3, 451300000000); +INSERT INTO `zz_area_code` VALUES (451302000000, '兴宾区', 3, 451300000000); +INSERT INTO `zz_area_code` VALUES (451321000000, '忻城县', 3, 451300000000); +INSERT INTO `zz_area_code` VALUES (451322000000, '象州县', 3, 451300000000); +INSERT INTO `zz_area_code` VALUES (451323000000, '武宣县', 3, 451300000000); +INSERT INTO `zz_area_code` VALUES (451324000000, '金秀瑶族自治县', 3, 451300000000); +INSERT INTO `zz_area_code` VALUES (451381000000, '合山市', 3, 451300000000); +INSERT INTO `zz_area_code` VALUES (451400000000, '崇左市', 2, 450000000000); +INSERT INTO `zz_area_code` VALUES (451401000000, '市辖区', 3, 451400000000); +INSERT INTO `zz_area_code` VALUES (451402000000, '江州区', 3, 451400000000); +INSERT INTO `zz_area_code` VALUES (451421000000, '扶绥县', 3, 451400000000); +INSERT INTO `zz_area_code` VALUES (451422000000, '宁明县', 3, 451400000000); +INSERT INTO `zz_area_code` VALUES (451423000000, '龙州县', 3, 451400000000); +INSERT INTO `zz_area_code` VALUES (451424000000, '大新县', 3, 451400000000); +INSERT INTO `zz_area_code` VALUES (451425000000, '天等县', 3, 451400000000); +INSERT INTO `zz_area_code` VALUES (451481000000, '凭祥市', 3, 451400000000); +INSERT INTO `zz_area_code` VALUES (460000000000, '海南省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (460100000000, '海口市', 2, 460000000000); +INSERT INTO `zz_area_code` VALUES (460101000000, '市辖区', 3, 460100000000); +INSERT INTO `zz_area_code` VALUES (460105000000, '秀英区', 3, 460100000000); +INSERT INTO `zz_area_code` VALUES (460106000000, '龙华区', 3, 460100000000); +INSERT INTO `zz_area_code` VALUES (460107000000, '琼山区', 3, 460100000000); +INSERT INTO `zz_area_code` VALUES (460108000000, '美兰区', 3, 460100000000); +INSERT INTO `zz_area_code` VALUES (460200000000, '三亚市', 2, 460000000000); +INSERT INTO `zz_area_code` VALUES (460201000000, '市辖区', 3, 460200000000); +INSERT INTO `zz_area_code` VALUES (460202000000, '海棠区', 3, 460200000000); +INSERT INTO `zz_area_code` VALUES (460203000000, '吉阳区', 3, 460200000000); +INSERT INTO `zz_area_code` VALUES (460204000000, '天涯区', 3, 460200000000); +INSERT INTO `zz_area_code` VALUES (460205000000, '崖州区', 3, 460200000000); +INSERT INTO `zz_area_code` VALUES (460300000000, '三沙市', 2, 460000000000); +INSERT INTO `zz_area_code` VALUES (460321000000, '西沙群岛', 3, 460300000000); +INSERT INTO `zz_area_code` VALUES (460322000000, '南沙群岛', 3, 460300000000); +INSERT INTO `zz_area_code` VALUES (460323000000, '中沙群岛的岛礁及其海域', 3, 460300000000); +INSERT INTO `zz_area_code` VALUES (460400000000, '儋州市', 2, 460000000000); +INSERT INTO `zz_area_code` VALUES (469000000000, '省直辖县级行政区划', 2, 460000000000); +INSERT INTO `zz_area_code` VALUES (469001000000, '五指山市', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469002000000, '琼海市', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469005000000, '文昌市', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469006000000, '万宁市', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469007000000, '东方市', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469021000000, '定安县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469022000000, '屯昌县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469023000000, '澄迈县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469024000000, '临高县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469025000000, '白沙黎族自治县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469026000000, '昌江黎族自治县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469027000000, '乐东黎族自治县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469028000000, '陵水黎族自治县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469029000000, '保亭黎族苗族自治县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (469030000000, '琼中黎族苗族自治县', 3, 469000000000); +INSERT INTO `zz_area_code` VALUES (500000000000, '重庆市', 1, NULL); +INSERT INTO `zz_area_code` VALUES (500100000000, '市辖区', 2, 500000000000); +INSERT INTO `zz_area_code` VALUES (500101000000, '万州区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500102000000, '涪陵区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500103000000, '渝中区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500104000000, '大渡口区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500105000000, '江北区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500106000000, '沙坪坝区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500107000000, '九龙坡区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500108000000, '南岸区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500109000000, '北碚区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500110000000, '綦江区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500111000000, '大足区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500112000000, '渝北区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500113000000, '巴南区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500114000000, '黔江区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500115000000, '长寿区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500116000000, '江津区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500117000000, '合川区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500118000000, '永川区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500119000000, '南川区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500120000000, '璧山区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500151000000, '铜梁区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500152000000, '潼南区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500153000000, '荣昌区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500154000000, '开州区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500155000000, '梁平区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500156000000, '武隆区', 3, 500100000000); +INSERT INTO `zz_area_code` VALUES (500200000000, '县', 2, 500000000000); +INSERT INTO `zz_area_code` VALUES (500229000000, '城口县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500230000000, '丰都县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500231000000, '垫江县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500233000000, '忠县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500235000000, '云阳县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500236000000, '奉节县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500237000000, '巫山县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500238000000, '巫溪县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500240000000, '石柱土家族自治县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500241000000, '秀山土家族苗族自治县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500242000000, '酉阳土家族苗族自治县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (500243000000, '彭水苗族土家族自治县', 3, 500200000000); +INSERT INTO `zz_area_code` VALUES (510000000000, '四川省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (510100000000, '成都市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (510101000000, '市辖区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510104000000, '锦江区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510105000000, '青羊区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510106000000, '金牛区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510107000000, '武侯区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510108000000, '成华区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510112000000, '龙泉驿区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510113000000, '青白江区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510114000000, '新都区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510115000000, '温江区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510116000000, '双流区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510117000000, '郫都区', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510121000000, '金堂县', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510129000000, '大邑县', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510131000000, '蒲江县', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510132000000, '新津县', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510181000000, '都江堰市', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510182000000, '彭州市', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510183000000, '邛崃市', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510184000000, '崇州市', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510185000000, '简阳市', 3, 510100000000); +INSERT INTO `zz_area_code` VALUES (510300000000, '自贡市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (510301000000, '市辖区', 3, 510300000000); +INSERT INTO `zz_area_code` VALUES (510302000000, '自流井区', 3, 510300000000); +INSERT INTO `zz_area_code` VALUES (510303000000, '贡井区', 3, 510300000000); +INSERT INTO `zz_area_code` VALUES (510304000000, '大安区', 3, 510300000000); +INSERT INTO `zz_area_code` VALUES (510311000000, '沿滩区', 3, 510300000000); +INSERT INTO `zz_area_code` VALUES (510321000000, '荣县', 3, 510300000000); +INSERT INTO `zz_area_code` VALUES (510322000000, '富顺县', 3, 510300000000); +INSERT INTO `zz_area_code` VALUES (510400000000, '攀枝花市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (510401000000, '市辖区', 3, 510400000000); +INSERT INTO `zz_area_code` VALUES (510402000000, '东区', 3, 510400000000); +INSERT INTO `zz_area_code` VALUES (510403000000, '西区', 3, 510400000000); +INSERT INTO `zz_area_code` VALUES (510411000000, '仁和区', 3, 510400000000); +INSERT INTO `zz_area_code` VALUES (510421000000, '米易县', 3, 510400000000); +INSERT INTO `zz_area_code` VALUES (510422000000, '盐边县', 3, 510400000000); +INSERT INTO `zz_area_code` VALUES (510500000000, '泸州市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (510501000000, '市辖区', 3, 510500000000); +INSERT INTO `zz_area_code` VALUES (510502000000, '江阳区', 3, 510500000000); +INSERT INTO `zz_area_code` VALUES (510503000000, '纳溪区', 3, 510500000000); +INSERT INTO `zz_area_code` VALUES (510504000000, '龙马潭区', 3, 510500000000); +INSERT INTO `zz_area_code` VALUES (510521000000, '泸县', 3, 510500000000); +INSERT INTO `zz_area_code` VALUES (510522000000, '合江县', 3, 510500000000); +INSERT INTO `zz_area_code` VALUES (510524000000, '叙永县', 3, 510500000000); +INSERT INTO `zz_area_code` VALUES (510525000000, '古蔺县', 3, 510500000000); +INSERT INTO `zz_area_code` VALUES (510600000000, '德阳市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (510601000000, '市辖区', 3, 510600000000); +INSERT INTO `zz_area_code` VALUES (510603000000, '旌阳区', 3, 510600000000); +INSERT INTO `zz_area_code` VALUES (510604000000, '罗江区', 3, 510600000000); +INSERT INTO `zz_area_code` VALUES (510623000000, '中江县', 3, 510600000000); +INSERT INTO `zz_area_code` VALUES (510681000000, '广汉市', 3, 510600000000); +INSERT INTO `zz_area_code` VALUES (510682000000, '什邡市', 3, 510600000000); +INSERT INTO `zz_area_code` VALUES (510683000000, '绵竹市', 3, 510600000000); +INSERT INTO `zz_area_code` VALUES (510700000000, '绵阳市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (510701000000, '市辖区', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510703000000, '涪城区', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510704000000, '游仙区', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510705000000, '安州区', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510722000000, '三台县', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510723000000, '盐亭县', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510725000000, '梓潼县', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510726000000, '北川羌族自治县', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510727000000, '平武县', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510781000000, '江油市', 3, 510700000000); +INSERT INTO `zz_area_code` VALUES (510800000000, '广元市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (510801000000, '市辖区', 3, 510800000000); +INSERT INTO `zz_area_code` VALUES (510802000000, '利州区', 3, 510800000000); +INSERT INTO `zz_area_code` VALUES (510811000000, '昭化区', 3, 510800000000); +INSERT INTO `zz_area_code` VALUES (510812000000, '朝天区', 3, 510800000000); +INSERT INTO `zz_area_code` VALUES (510821000000, '旺苍县', 3, 510800000000); +INSERT INTO `zz_area_code` VALUES (510822000000, '青川县', 3, 510800000000); +INSERT INTO `zz_area_code` VALUES (510823000000, '剑阁县', 3, 510800000000); +INSERT INTO `zz_area_code` VALUES (510824000000, '苍溪县', 3, 510800000000); +INSERT INTO `zz_area_code` VALUES (510900000000, '遂宁市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (510901000000, '市辖区', 3, 510900000000); +INSERT INTO `zz_area_code` VALUES (510903000000, '船山区', 3, 510900000000); +INSERT INTO `zz_area_code` VALUES (510904000000, '安居区', 3, 510900000000); +INSERT INTO `zz_area_code` VALUES (510921000000, '蓬溪县', 3, 510900000000); +INSERT INTO `zz_area_code` VALUES (510922000000, '射洪县', 3, 510900000000); +INSERT INTO `zz_area_code` VALUES (510923000000, '大英县', 3, 510900000000); +INSERT INTO `zz_area_code` VALUES (511000000000, '内江市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (511001000000, '市辖区', 3, 511000000000); +INSERT INTO `zz_area_code` VALUES (511002000000, '市中区', 3, 511000000000); +INSERT INTO `zz_area_code` VALUES (511011000000, '东兴区', 3, 511000000000); +INSERT INTO `zz_area_code` VALUES (511024000000, '威远县', 3, 511000000000); +INSERT INTO `zz_area_code` VALUES (511025000000, '资中县', 3, 511000000000); +INSERT INTO `zz_area_code` VALUES (511071000000, '内江经济开发区', 3, 511000000000); +INSERT INTO `zz_area_code` VALUES (511083000000, '隆昌市', 3, 511000000000); +INSERT INTO `zz_area_code` VALUES (511100000000, '乐山市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (511101000000, '市辖区', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511102000000, '市中区', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511111000000, '沙湾区', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511112000000, '五通桥区', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511113000000, '金口河区', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511123000000, '犍为县', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511124000000, '井研县', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511126000000, '夹江县', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511129000000, '沐川县', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511132000000, '峨边彝族自治县', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511133000000, '马边彝族自治县', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511181000000, '峨眉山市', 3, 511100000000); +INSERT INTO `zz_area_code` VALUES (511300000000, '南充市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (511301000000, '市辖区', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511302000000, '顺庆区', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511303000000, '高坪区', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511304000000, '嘉陵区', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511321000000, '南部县', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511322000000, '营山县', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511323000000, '蓬安县', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511324000000, '仪陇县', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511325000000, '西充县', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511381000000, '阆中市', 3, 511300000000); +INSERT INTO `zz_area_code` VALUES (511400000000, '眉山市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (511401000000, '市辖区', 3, 511400000000); +INSERT INTO `zz_area_code` VALUES (511402000000, '东坡区', 3, 511400000000); +INSERT INTO `zz_area_code` VALUES (511403000000, '彭山区', 3, 511400000000); +INSERT INTO `zz_area_code` VALUES (511421000000, '仁寿县', 3, 511400000000); +INSERT INTO `zz_area_code` VALUES (511423000000, '洪雅县', 3, 511400000000); +INSERT INTO `zz_area_code` VALUES (511424000000, '丹棱县', 3, 511400000000); +INSERT INTO `zz_area_code` VALUES (511425000000, '青神县', 3, 511400000000); +INSERT INTO `zz_area_code` VALUES (511500000000, '宜宾市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (511501000000, '市辖区', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511502000000, '翠屏区', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511503000000, '南溪区', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511504000000, '叙州区', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511523000000, '江安县', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511524000000, '长宁县', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511525000000, '高县', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511526000000, '珙县', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511527000000, '筠连县', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511528000000, '兴文县', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511529000000, '屏山县', 3, 511500000000); +INSERT INTO `zz_area_code` VALUES (511600000000, '广安市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (511601000000, '市辖区', 3, 511600000000); +INSERT INTO `zz_area_code` VALUES (511602000000, '广安区', 3, 511600000000); +INSERT INTO `zz_area_code` VALUES (511603000000, '前锋区', 3, 511600000000); +INSERT INTO `zz_area_code` VALUES (511621000000, '岳池县', 3, 511600000000); +INSERT INTO `zz_area_code` VALUES (511622000000, '武胜县', 3, 511600000000); +INSERT INTO `zz_area_code` VALUES (511623000000, '邻水县', 3, 511600000000); +INSERT INTO `zz_area_code` VALUES (511681000000, '华蓥市', 3, 511600000000); +INSERT INTO `zz_area_code` VALUES (511700000000, '达州市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (511701000000, '市辖区', 3, 511700000000); +INSERT INTO `zz_area_code` VALUES (511702000000, '通川区', 3, 511700000000); +INSERT INTO `zz_area_code` VALUES (511703000000, '达川区', 3, 511700000000); +INSERT INTO `zz_area_code` VALUES (511722000000, '宣汉县', 3, 511700000000); +INSERT INTO `zz_area_code` VALUES (511723000000, '开江县', 3, 511700000000); +INSERT INTO `zz_area_code` VALUES (511724000000, '大竹县', 3, 511700000000); +INSERT INTO `zz_area_code` VALUES (511725000000, '渠县', 3, 511700000000); +INSERT INTO `zz_area_code` VALUES (511771000000, '达州经济开发区', 3, 511700000000); +INSERT INTO `zz_area_code` VALUES (511781000000, '万源市', 3, 511700000000); +INSERT INTO `zz_area_code` VALUES (511800000000, '雅安市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (511801000000, '市辖区', 3, 511800000000); +INSERT INTO `zz_area_code` VALUES (511802000000, '雨城区', 3, 511800000000); +INSERT INTO `zz_area_code` VALUES (511803000000, '名山区', 3, 511800000000); +INSERT INTO `zz_area_code` VALUES (511822000000, '荥经县', 3, 511800000000); +INSERT INTO `zz_area_code` VALUES (511823000000, '汉源县', 3, 511800000000); +INSERT INTO `zz_area_code` VALUES (511824000000, '石棉县', 3, 511800000000); +INSERT INTO `zz_area_code` VALUES (511825000000, '天全县', 3, 511800000000); +INSERT INTO `zz_area_code` VALUES (511826000000, '芦山县', 3, 511800000000); +INSERT INTO `zz_area_code` VALUES (511827000000, '宝兴县', 3, 511800000000); +INSERT INTO `zz_area_code` VALUES (511900000000, '巴中市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (511901000000, '市辖区', 3, 511900000000); +INSERT INTO `zz_area_code` VALUES (511902000000, '巴州区', 3, 511900000000); +INSERT INTO `zz_area_code` VALUES (511903000000, '恩阳区', 3, 511900000000); +INSERT INTO `zz_area_code` VALUES (511921000000, '通江县', 3, 511900000000); +INSERT INTO `zz_area_code` VALUES (511922000000, '南江县', 3, 511900000000); +INSERT INTO `zz_area_code` VALUES (511923000000, '平昌县', 3, 511900000000); +INSERT INTO `zz_area_code` VALUES (511971000000, '巴中经济开发区', 3, 511900000000); +INSERT INTO `zz_area_code` VALUES (512000000000, '资阳市', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (512001000000, '市辖区', 3, 512000000000); +INSERT INTO `zz_area_code` VALUES (512002000000, '雁江区', 3, 512000000000); +INSERT INTO `zz_area_code` VALUES (512021000000, '安岳县', 3, 512000000000); +INSERT INTO `zz_area_code` VALUES (512022000000, '乐至县', 3, 512000000000); +INSERT INTO `zz_area_code` VALUES (513200000000, '阿坝藏族羌族自治州', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (513201000000, '马尔康市', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513221000000, '汶川县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513222000000, '理县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513223000000, '茂县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513224000000, '松潘县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513225000000, '九寨沟县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513226000000, '金川县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513227000000, '小金县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513228000000, '黑水县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513230000000, '壤塘县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513231000000, '阿坝县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513232000000, '若尔盖县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513233000000, '红原县', 3, 513200000000); +INSERT INTO `zz_area_code` VALUES (513300000000, '甘孜藏族自治州', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (513301000000, '康定市', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513322000000, '泸定县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513323000000, '丹巴县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513324000000, '九龙县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513325000000, '雅江县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513326000000, '道孚县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513327000000, '炉霍县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513328000000, '甘孜县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513329000000, '新龙县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513330000000, '德格县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513331000000, '白玉县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513332000000, '石渠县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513333000000, '色达县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513334000000, '理塘县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513335000000, '巴塘县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513336000000, '乡城县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513337000000, '稻城县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513338000000, '得荣县', 3, 513300000000); +INSERT INTO `zz_area_code` VALUES (513400000000, '凉山彝族自治州', 2, 510000000000); +INSERT INTO `zz_area_code` VALUES (513401000000, '西昌市', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513422000000, '木里藏族自治县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513423000000, '盐源县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513424000000, '德昌县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513425000000, '会理县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513426000000, '会东县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513427000000, '宁南县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513428000000, '普格县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513429000000, '布拖县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513430000000, '金阳县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513431000000, '昭觉县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513432000000, '喜德县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513433000000, '冕宁县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513434000000, '越西县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513435000000, '甘洛县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513436000000, '美姑县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (513437000000, '雷波县', 3, 513400000000); +INSERT INTO `zz_area_code` VALUES (520000000000, '贵州省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (520100000000, '贵阳市', 2, 520000000000); +INSERT INTO `zz_area_code` VALUES (520101000000, '市辖区', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520102000000, '南明区', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520103000000, '云岩区', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520111000000, '花溪区', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520112000000, '乌当区', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520113000000, '白云区', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520115000000, '观山湖区', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520121000000, '开阳县', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520122000000, '息烽县', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520123000000, '修文县', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520181000000, '清镇市', 3, 520100000000); +INSERT INTO `zz_area_code` VALUES (520200000000, '六盘水市', 2, 520000000000); +INSERT INTO `zz_area_code` VALUES (520201000000, '钟山区', 3, 520200000000); +INSERT INTO `zz_area_code` VALUES (520203000000, '六枝特区', 3, 520200000000); +INSERT INTO `zz_area_code` VALUES (520221000000, '水城县', 3, 520200000000); +INSERT INTO `zz_area_code` VALUES (520281000000, '盘州市', 3, 520200000000); +INSERT INTO `zz_area_code` VALUES (520300000000, '遵义市', 2, 520000000000); +INSERT INTO `zz_area_code` VALUES (520301000000, '市辖区', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520302000000, '红花岗区', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520303000000, '汇川区', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520304000000, '播州区', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520322000000, '桐梓县', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520323000000, '绥阳县', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520324000000, '正安县', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520325000000, '道真仡佬族苗族自治县', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520326000000, '务川仡佬族苗族自治县', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520327000000, '凤冈县', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520328000000, '湄潭县', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520329000000, '余庆县', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520330000000, '习水县', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520381000000, '赤水市', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520382000000, '仁怀市', 3, 520300000000); +INSERT INTO `zz_area_code` VALUES (520400000000, '安顺市', 2, 520000000000); +INSERT INTO `zz_area_code` VALUES (520401000000, '市辖区', 3, 520400000000); +INSERT INTO `zz_area_code` VALUES (520402000000, '西秀区', 3, 520400000000); +INSERT INTO `zz_area_code` VALUES (520403000000, '平坝区', 3, 520400000000); +INSERT INTO `zz_area_code` VALUES (520422000000, '普定县', 3, 520400000000); +INSERT INTO `zz_area_code` VALUES (520423000000, '镇宁布依族苗族自治县', 3, 520400000000); +INSERT INTO `zz_area_code` VALUES (520424000000, '关岭布依族苗族自治县', 3, 520400000000); +INSERT INTO `zz_area_code` VALUES (520425000000, '紫云苗族布依族自治县', 3, 520400000000); +INSERT INTO `zz_area_code` VALUES (520500000000, '毕节市', 2, 520000000000); +INSERT INTO `zz_area_code` VALUES (520501000000, '市辖区', 3, 520500000000); +INSERT INTO `zz_area_code` VALUES (520502000000, '七星关区', 3, 520500000000); +INSERT INTO `zz_area_code` VALUES (520521000000, '大方县', 3, 520500000000); +INSERT INTO `zz_area_code` VALUES (520522000000, '黔西县', 3, 520500000000); +INSERT INTO `zz_area_code` VALUES (520523000000, '金沙县', 3, 520500000000); +INSERT INTO `zz_area_code` VALUES (520524000000, '织金县', 3, 520500000000); +INSERT INTO `zz_area_code` VALUES (520525000000, '纳雍县', 3, 520500000000); +INSERT INTO `zz_area_code` VALUES (520526000000, '威宁彝族回族苗族自治县', 3, 520500000000); +INSERT INTO `zz_area_code` VALUES (520527000000, '赫章县', 3, 520500000000); +INSERT INTO `zz_area_code` VALUES (520600000000, '铜仁市', 2, 520000000000); +INSERT INTO `zz_area_code` VALUES (520601000000, '市辖区', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520602000000, '碧江区', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520603000000, '万山区', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520621000000, '江口县', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520622000000, '玉屏侗族自治县', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520623000000, '石阡县', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520624000000, '思南县', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520625000000, '印江土家族苗族自治县', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520626000000, '德江县', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520627000000, '沿河土家族自治县', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (520628000000, '松桃苗族自治县', 3, 520600000000); +INSERT INTO `zz_area_code` VALUES (522300000000, '黔西南布依族苗族自治州', 2, 520000000000); +INSERT INTO `zz_area_code` VALUES (522301000000, '兴义市', 3, 522300000000); +INSERT INTO `zz_area_code` VALUES (522302000000, '兴仁市', 3, 522300000000); +INSERT INTO `zz_area_code` VALUES (522323000000, '普安县', 3, 522300000000); +INSERT INTO `zz_area_code` VALUES (522324000000, '晴隆县', 3, 522300000000); +INSERT INTO `zz_area_code` VALUES (522325000000, '贞丰县', 3, 522300000000); +INSERT INTO `zz_area_code` VALUES (522326000000, '望谟县', 3, 522300000000); +INSERT INTO `zz_area_code` VALUES (522327000000, '册亨县', 3, 522300000000); +INSERT INTO `zz_area_code` VALUES (522328000000, '安龙县', 3, 522300000000); +INSERT INTO `zz_area_code` VALUES (522600000000, '黔东南苗族侗族自治州', 2, 520000000000); +INSERT INTO `zz_area_code` VALUES (522601000000, '凯里市', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522622000000, '黄平县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522623000000, '施秉县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522624000000, '三穗县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522625000000, '镇远县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522626000000, '岑巩县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522627000000, '天柱县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522628000000, '锦屏县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522629000000, '剑河县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522630000000, '台江县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522631000000, '黎平县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522632000000, '榕江县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522633000000, '从江县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522634000000, '雷山县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522635000000, '麻江县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522636000000, '丹寨县', 3, 522600000000); +INSERT INTO `zz_area_code` VALUES (522700000000, '黔南布依族苗族自治州', 2, 520000000000); +INSERT INTO `zz_area_code` VALUES (522701000000, '都匀市', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522702000000, '福泉市', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522722000000, '荔波县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522723000000, '贵定县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522725000000, '瓮安县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522726000000, '独山县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522727000000, '平塘县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522728000000, '罗甸县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522729000000, '长顺县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522730000000, '龙里县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522731000000, '惠水县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (522732000000, '三都水族自治县', 3, 522700000000); +INSERT INTO `zz_area_code` VALUES (530000000000, '云南省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (530100000000, '昆明市', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (530101000000, '市辖区', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530102000000, '五华区', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530103000000, '盘龙区', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530111000000, '官渡区', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530112000000, '西山区', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530113000000, '东川区', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530114000000, '呈贡区', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530115000000, '晋宁区', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530124000000, '富民县', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530125000000, '宜良县', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530126000000, '石林彝族自治县', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530127000000, '嵩明县', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530128000000, '禄劝彝族苗族自治县', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530129000000, '寻甸回族彝族自治县', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530181000000, '安宁市', 3, 530100000000); +INSERT INTO `zz_area_code` VALUES (530300000000, '曲靖市', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (530301000000, '市辖区', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530302000000, '麒麟区', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530303000000, '沾益区', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530304000000, '马龙区', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530322000000, '陆良县', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530323000000, '师宗县', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530324000000, '罗平县', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530325000000, '富源县', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530326000000, '会泽县', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530381000000, '宣威市', 3, 530300000000); +INSERT INTO `zz_area_code` VALUES (530400000000, '玉溪市', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (530401000000, '市辖区', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530402000000, '红塔区', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530403000000, '江川区', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530422000000, '澄江县', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530423000000, '通海县', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530424000000, '华宁县', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530425000000, '易门县', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530426000000, '峨山彝族自治县', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530427000000, '新平彝族傣族自治县', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530428000000, '元江哈尼族彝族傣族自治县', 3, 530400000000); +INSERT INTO `zz_area_code` VALUES (530500000000, '保山市', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (530501000000, '市辖区', 3, 530500000000); +INSERT INTO `zz_area_code` VALUES (530502000000, '隆阳区', 3, 530500000000); +INSERT INTO `zz_area_code` VALUES (530521000000, '施甸县', 3, 530500000000); +INSERT INTO `zz_area_code` VALUES (530523000000, '龙陵县', 3, 530500000000); +INSERT INTO `zz_area_code` VALUES (530524000000, '昌宁县', 3, 530500000000); +INSERT INTO `zz_area_code` VALUES (530581000000, '腾冲市', 3, 530500000000); +INSERT INTO `zz_area_code` VALUES (530600000000, '昭通市', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (530601000000, '市辖区', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530602000000, '昭阳区', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530621000000, '鲁甸县', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530622000000, '巧家县', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530623000000, '盐津县', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530624000000, '大关县', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530625000000, '永善县', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530626000000, '绥江县', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530627000000, '镇雄县', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530628000000, '彝良县', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530629000000, '威信县', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530681000000, '水富市', 3, 530600000000); +INSERT INTO `zz_area_code` VALUES (530700000000, '丽江市', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (530701000000, '市辖区', 3, 530700000000); +INSERT INTO `zz_area_code` VALUES (530702000000, '古城区', 3, 530700000000); +INSERT INTO `zz_area_code` VALUES (530721000000, '玉龙纳西族自治县', 3, 530700000000); +INSERT INTO `zz_area_code` VALUES (530722000000, '永胜县', 3, 530700000000); +INSERT INTO `zz_area_code` VALUES (530723000000, '华坪县', 3, 530700000000); +INSERT INTO `zz_area_code` VALUES (530724000000, '宁蒗彝族自治县', 3, 530700000000); +INSERT INTO `zz_area_code` VALUES (530800000000, '普洱市', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (530801000000, '市辖区', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530802000000, '思茅区', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530821000000, '宁洱哈尼族彝族自治县', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530822000000, '墨江哈尼族自治县', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530823000000, '景东彝族自治县', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530824000000, '景谷傣族彝族自治县', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530825000000, '镇沅彝族哈尼族拉祜族自治县', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530826000000, '江城哈尼族彝族自治县', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530827000000, '孟连傣族拉祜族佤族自治县', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530828000000, '澜沧拉祜族自治县', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530829000000, '西盟佤族自治县', 3, 530800000000); +INSERT INTO `zz_area_code` VALUES (530900000000, '临沧市', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (530901000000, '市辖区', 3, 530900000000); +INSERT INTO `zz_area_code` VALUES (530902000000, '临翔区', 3, 530900000000); +INSERT INTO `zz_area_code` VALUES (530921000000, '凤庆县', 3, 530900000000); +INSERT INTO `zz_area_code` VALUES (530922000000, '云县', 3, 530900000000); +INSERT INTO `zz_area_code` VALUES (530923000000, '永德县', 3, 530900000000); +INSERT INTO `zz_area_code` VALUES (530924000000, '镇康县', 3, 530900000000); +INSERT INTO `zz_area_code` VALUES (530925000000, '双江拉祜族佤族布朗族傣族自治县', 3, 530900000000); +INSERT INTO `zz_area_code` VALUES (530926000000, '耿马傣族佤族自治县', 3, 530900000000); +INSERT INTO `zz_area_code` VALUES (530927000000, '沧源佤族自治县', 3, 530900000000); +INSERT INTO `zz_area_code` VALUES (532300000000, '楚雄彝族自治州', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (532301000000, '楚雄市', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532322000000, '双柏县', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532323000000, '牟定县', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532324000000, '南华县', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532325000000, '姚安县', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532326000000, '大姚县', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532327000000, '永仁县', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532328000000, '元谋县', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532329000000, '武定县', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532331000000, '禄丰县', 3, 532300000000); +INSERT INTO `zz_area_code` VALUES (532500000000, '红河哈尼族彝族自治州', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (532501000000, '个旧市', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532502000000, '开远市', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532503000000, '蒙自市', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532504000000, '弥勒市', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532523000000, '屏边苗族自治县', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532524000000, '建水县', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532525000000, '石屏县', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532527000000, '泸西县', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532528000000, '元阳县', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532529000000, '红河县', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532530000000, '金平苗族瑶族傣族自治县', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532531000000, '绿春县', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532532000000, '河口瑶族自治县', 3, 532500000000); +INSERT INTO `zz_area_code` VALUES (532600000000, '文山壮族苗族自治州', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (532601000000, '文山市', 3, 532600000000); +INSERT INTO `zz_area_code` VALUES (532622000000, '砚山县', 3, 532600000000); +INSERT INTO `zz_area_code` VALUES (532623000000, '西畴县', 3, 532600000000); +INSERT INTO `zz_area_code` VALUES (532624000000, '麻栗坡县', 3, 532600000000); +INSERT INTO `zz_area_code` VALUES (532625000000, '马关县', 3, 532600000000); +INSERT INTO `zz_area_code` VALUES (532626000000, '丘北县', 3, 532600000000); +INSERT INTO `zz_area_code` VALUES (532627000000, '广南县', 3, 532600000000); +INSERT INTO `zz_area_code` VALUES (532628000000, '富宁县', 3, 532600000000); +INSERT INTO `zz_area_code` VALUES (532800000000, '西双版纳傣族自治州', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (532801000000, '景洪市', 3, 532800000000); +INSERT INTO `zz_area_code` VALUES (532822000000, '勐海县', 3, 532800000000); +INSERT INTO `zz_area_code` VALUES (532823000000, '勐腊县', 3, 532800000000); +INSERT INTO `zz_area_code` VALUES (532900000000, '大理白族自治州', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (532901000000, '大理市', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532922000000, '漾濞彝族自治县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532923000000, '祥云县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532924000000, '宾川县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532925000000, '弥渡县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532926000000, '南涧彝族自治县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532927000000, '巍山彝族回族自治县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532928000000, '永平县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532929000000, '云龙县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532930000000, '洱源县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532931000000, '剑川县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (532932000000, '鹤庆县', 3, 532900000000); +INSERT INTO `zz_area_code` VALUES (533100000000, '德宏傣族景颇族自治州', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (533102000000, '瑞丽市', 3, 533100000000); +INSERT INTO `zz_area_code` VALUES (533103000000, '芒市', 3, 533100000000); +INSERT INTO `zz_area_code` VALUES (533122000000, '梁河县', 3, 533100000000); +INSERT INTO `zz_area_code` VALUES (533123000000, '盈江县', 3, 533100000000); +INSERT INTO `zz_area_code` VALUES (533124000000, '陇川县', 3, 533100000000); +INSERT INTO `zz_area_code` VALUES (533300000000, '怒江傈僳族自治州', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (533301000000, '泸水市', 3, 533300000000); +INSERT INTO `zz_area_code` VALUES (533323000000, '福贡县', 3, 533300000000); +INSERT INTO `zz_area_code` VALUES (533324000000, '贡山独龙族怒族自治县', 3, 533300000000); +INSERT INTO `zz_area_code` VALUES (533325000000, '兰坪白族普米族自治县', 3, 533300000000); +INSERT INTO `zz_area_code` VALUES (533400000000, '迪庆藏族自治州', 2, 530000000000); +INSERT INTO `zz_area_code` VALUES (533401000000, '香格里拉市', 3, 533400000000); +INSERT INTO `zz_area_code` VALUES (533422000000, '德钦县', 3, 533400000000); +INSERT INTO `zz_area_code` VALUES (533423000000, '维西傈僳族自治县', 3, 533400000000); +INSERT INTO `zz_area_code` VALUES (540000000000, '西藏自治区', 1, NULL); +INSERT INTO `zz_area_code` VALUES (540100000000, '拉萨市', 2, 540000000000); +INSERT INTO `zz_area_code` VALUES (540101000000, '市辖区', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540102000000, '城关区', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540103000000, '堆龙德庆区', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540104000000, '达孜区', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540121000000, '林周县', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540122000000, '当雄县', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540123000000, '尼木县', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540124000000, '曲水县', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540127000000, '墨竹工卡县', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540171000000, '格尔木藏青工业园区', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540172000000, '拉萨经济技术开发区', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540173000000, '西藏文化旅游创意园区', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540174000000, '达孜工业园区', 3, 540100000000); +INSERT INTO `zz_area_code` VALUES (540200000000, '日喀则市', 2, 540000000000); +INSERT INTO `zz_area_code` VALUES (540202000000, '桑珠孜区', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540221000000, '南木林县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540222000000, '江孜县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540223000000, '定日县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540224000000, '萨迦县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540225000000, '拉孜县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540226000000, '昂仁县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540227000000, '谢通门县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540228000000, '白朗县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540229000000, '仁布县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540230000000, '康马县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540231000000, '定结县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540232000000, '仲巴县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540233000000, '亚东县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540234000000, '吉隆县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540235000000, '聂拉木县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540236000000, '萨嘎县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540237000000, '岗巴县', 3, 540200000000); +INSERT INTO `zz_area_code` VALUES (540300000000, '昌都市', 2, 540000000000); +INSERT INTO `zz_area_code` VALUES (540302000000, '卡若区', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540321000000, '江达县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540322000000, '贡觉县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540323000000, '类乌齐县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540324000000, '丁青县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540325000000, '察雅县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540326000000, '八宿县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540327000000, '左贡县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540328000000, '芒康县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540329000000, '洛隆县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540330000000, '边坝县', 3, 540300000000); +INSERT INTO `zz_area_code` VALUES (540400000000, '林芝市', 2, 540000000000); +INSERT INTO `zz_area_code` VALUES (540402000000, '巴宜区', 3, 540400000000); +INSERT INTO `zz_area_code` VALUES (540421000000, '工布江达县', 3, 540400000000); +INSERT INTO `zz_area_code` VALUES (540422000000, '米林县', 3, 540400000000); +INSERT INTO `zz_area_code` VALUES (540423000000, '墨脱县', 3, 540400000000); +INSERT INTO `zz_area_code` VALUES (540424000000, '波密县', 3, 540400000000); +INSERT INTO `zz_area_code` VALUES (540425000000, '察隅县', 3, 540400000000); +INSERT INTO `zz_area_code` VALUES (540426000000, '朗县', 3, 540400000000); +INSERT INTO `zz_area_code` VALUES (540500000000, '山南市', 2, 540000000000); +INSERT INTO `zz_area_code` VALUES (540501000000, '市辖区', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540502000000, '乃东区', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540521000000, '扎囊县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540522000000, '贡嘎县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540523000000, '桑日县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540524000000, '琼结县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540525000000, '曲松县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540526000000, '措美县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540527000000, '洛扎县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540528000000, '加查县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540529000000, '隆子县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540530000000, '错那县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540531000000, '浪卡子县', 3, 540500000000); +INSERT INTO `zz_area_code` VALUES (540600000000, '那曲市', 2, 540000000000); +INSERT INTO `zz_area_code` VALUES (540602000000, '色尼区', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540621000000, '嘉黎县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540622000000, '比如县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540623000000, '聂荣县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540624000000, '安多县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540625000000, '申扎县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540626000000, '索县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540627000000, '班戈县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540628000000, '巴青县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540629000000, '尼玛县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (540630000000, '双湖县', 3, 540600000000); +INSERT INTO `zz_area_code` VALUES (542500000000, '阿里地区', 2, 540000000000); +INSERT INTO `zz_area_code` VALUES (542521000000, '普兰县', 3, 542500000000); +INSERT INTO `zz_area_code` VALUES (542522000000, '札达县', 3, 542500000000); +INSERT INTO `zz_area_code` VALUES (542523000000, '噶尔县', 3, 542500000000); +INSERT INTO `zz_area_code` VALUES (542524000000, '日土县', 3, 542500000000); +INSERT INTO `zz_area_code` VALUES (542525000000, '革吉县', 3, 542500000000); +INSERT INTO `zz_area_code` VALUES (542526000000, '改则县', 3, 542500000000); +INSERT INTO `zz_area_code` VALUES (542527000000, '措勤县', 3, 542500000000); +INSERT INTO `zz_area_code` VALUES (610000000000, '陕西省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (610100000000, '西安市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (610101000000, '市辖区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610102000000, '新城区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610103000000, '碑林区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610104000000, '莲湖区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610111000000, '灞桥区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610112000000, '未央区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610113000000, '雁塔区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610114000000, '阎良区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610115000000, '临潼区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610116000000, '长安区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610117000000, '高陵区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610118000000, '鄠邑区', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610122000000, '蓝田县', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610124000000, '周至县', 3, 610100000000); +INSERT INTO `zz_area_code` VALUES (610200000000, '铜川市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (610201000000, '市辖区', 3, 610200000000); +INSERT INTO `zz_area_code` VALUES (610202000000, '王益区', 3, 610200000000); +INSERT INTO `zz_area_code` VALUES (610203000000, '印台区', 3, 610200000000); +INSERT INTO `zz_area_code` VALUES (610204000000, '耀州区', 3, 610200000000); +INSERT INTO `zz_area_code` VALUES (610222000000, '宜君县', 3, 610200000000); +INSERT INTO `zz_area_code` VALUES (610300000000, '宝鸡市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (610301000000, '市辖区', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610302000000, '渭滨区', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610303000000, '金台区', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610304000000, '陈仓区', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610322000000, '凤翔县', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610323000000, '岐山县', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610324000000, '扶风县', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610326000000, '眉县', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610327000000, '陇县', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610328000000, '千阳县', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610329000000, '麟游县', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610330000000, '凤县', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610331000000, '太白县', 3, 610300000000); +INSERT INTO `zz_area_code` VALUES (610400000000, '咸阳市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (610401000000, '市辖区', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610402000000, '秦都区', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610403000000, '杨陵区', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610404000000, '渭城区', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610422000000, '三原县', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610423000000, '泾阳县', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610424000000, '乾县', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610425000000, '礼泉县', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610426000000, '永寿县', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610428000000, '长武县', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610429000000, '旬邑县', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610430000000, '淳化县', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610431000000, '武功县', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610481000000, '兴平市', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610482000000, '彬州市', 3, 610400000000); +INSERT INTO `zz_area_code` VALUES (610500000000, '渭南市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (610501000000, '市辖区', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610502000000, '临渭区', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610503000000, '华州区', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610522000000, '潼关县', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610523000000, '大荔县', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610524000000, '合阳县', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610525000000, '澄城县', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610526000000, '蒲城县', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610527000000, '白水县', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610528000000, '富平县', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610581000000, '韩城市', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610582000000, '华阴市', 3, 610500000000); +INSERT INTO `zz_area_code` VALUES (610600000000, '延安市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (610601000000, '市辖区', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610602000000, '宝塔区', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610603000000, '安塞区', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610621000000, '延长县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610622000000, '延川县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610623000000, '子长县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610625000000, '志丹县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610626000000, '吴起县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610627000000, '甘泉县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610628000000, '富县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610629000000, '洛川县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610630000000, '宜川县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610631000000, '黄龙县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610632000000, '黄陵县', 3, 610600000000); +INSERT INTO `zz_area_code` VALUES (610700000000, '汉中市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (610701000000, '市辖区', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610702000000, '汉台区', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610703000000, '南郑区', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610722000000, '城固县', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610723000000, '洋县', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610724000000, '西乡县', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610725000000, '勉县', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610726000000, '宁强县', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610727000000, '略阳县', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610728000000, '镇巴县', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610729000000, '留坝县', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610730000000, '佛坪县', 3, 610700000000); +INSERT INTO `zz_area_code` VALUES (610800000000, '榆林市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (610801000000, '市辖区', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610802000000, '榆阳区', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610803000000, '横山区', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610822000000, '府谷县', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610824000000, '靖边县', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610825000000, '定边县', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610826000000, '绥德县', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610827000000, '米脂县', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610828000000, '佳县', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610829000000, '吴堡县', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610830000000, '清涧县', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610831000000, '子洲县', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610881000000, '神木市', 3, 610800000000); +INSERT INTO `zz_area_code` VALUES (610900000000, '安康市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (610901000000, '市辖区', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610902000000, '汉滨区', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610921000000, '汉阴县', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610922000000, '石泉县', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610923000000, '宁陕县', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610924000000, '紫阳县', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610925000000, '岚皋县', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610926000000, '平利县', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610927000000, '镇坪县', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610928000000, '旬阳县', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (610929000000, '白河县', 3, 610900000000); +INSERT INTO `zz_area_code` VALUES (611000000000, '商洛市', 2, 610000000000); +INSERT INTO `zz_area_code` VALUES (611001000000, '市辖区', 3, 611000000000); +INSERT INTO `zz_area_code` VALUES (611002000000, '商州区', 3, 611000000000); +INSERT INTO `zz_area_code` VALUES (611021000000, '洛南县', 3, 611000000000); +INSERT INTO `zz_area_code` VALUES (611022000000, '丹凤县', 3, 611000000000); +INSERT INTO `zz_area_code` VALUES (611023000000, '商南县', 3, 611000000000); +INSERT INTO `zz_area_code` VALUES (611024000000, '山阳县', 3, 611000000000); +INSERT INTO `zz_area_code` VALUES (611025000000, '镇安县', 3, 611000000000); +INSERT INTO `zz_area_code` VALUES (611026000000, '柞水县', 3, 611000000000); +INSERT INTO `zz_area_code` VALUES (620000000000, '甘肃省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (620100000000, '兰州市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (620101000000, '市辖区', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620102000000, '城关区', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620103000000, '七里河区', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620104000000, '西固区', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620105000000, '安宁区', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620111000000, '红古区', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620121000000, '永登县', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620122000000, '皋兰县', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620123000000, '榆中县', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620171000000, '兰州新区', 3, 620100000000); +INSERT INTO `zz_area_code` VALUES (620200000000, '嘉峪关市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (620201000000, '市辖区', 3, 620200000000); +INSERT INTO `zz_area_code` VALUES (620300000000, '金昌市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (620301000000, '市辖区', 3, 620300000000); +INSERT INTO `zz_area_code` VALUES (620302000000, '金川区', 3, 620300000000); +INSERT INTO `zz_area_code` VALUES (620321000000, '永昌县', 3, 620300000000); +INSERT INTO `zz_area_code` VALUES (620400000000, '白银市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (620401000000, '市辖区', 3, 620400000000); +INSERT INTO `zz_area_code` VALUES (620402000000, '白银区', 3, 620400000000); +INSERT INTO `zz_area_code` VALUES (620403000000, '平川区', 3, 620400000000); +INSERT INTO `zz_area_code` VALUES (620421000000, '靖远县', 3, 620400000000); +INSERT INTO `zz_area_code` VALUES (620422000000, '会宁县', 3, 620400000000); +INSERT INTO `zz_area_code` VALUES (620423000000, '景泰县', 3, 620400000000); +INSERT INTO `zz_area_code` VALUES (620500000000, '天水市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (620501000000, '市辖区', 3, 620500000000); +INSERT INTO `zz_area_code` VALUES (620502000000, '秦州区', 3, 620500000000); +INSERT INTO `zz_area_code` VALUES (620503000000, '麦积区', 3, 620500000000); +INSERT INTO `zz_area_code` VALUES (620521000000, '清水县', 3, 620500000000); +INSERT INTO `zz_area_code` VALUES (620522000000, '秦安县', 3, 620500000000); +INSERT INTO `zz_area_code` VALUES (620523000000, '甘谷县', 3, 620500000000); +INSERT INTO `zz_area_code` VALUES (620524000000, '武山县', 3, 620500000000); +INSERT INTO `zz_area_code` VALUES (620525000000, '张家川回族自治县', 3, 620500000000); +INSERT INTO `zz_area_code` VALUES (620600000000, '武威市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (620601000000, '市辖区', 3, 620600000000); +INSERT INTO `zz_area_code` VALUES (620602000000, '凉州区', 3, 620600000000); +INSERT INTO `zz_area_code` VALUES (620621000000, '民勤县', 3, 620600000000); +INSERT INTO `zz_area_code` VALUES (620622000000, '古浪县', 3, 620600000000); +INSERT INTO `zz_area_code` VALUES (620623000000, '天祝藏族自治县', 3, 620600000000); +INSERT INTO `zz_area_code` VALUES (620700000000, '张掖市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (620701000000, '市辖区', 3, 620700000000); +INSERT INTO `zz_area_code` VALUES (620702000000, '甘州区', 3, 620700000000); +INSERT INTO `zz_area_code` VALUES (620721000000, '肃南裕固族自治县', 3, 620700000000); +INSERT INTO `zz_area_code` VALUES (620722000000, '民乐县', 3, 620700000000); +INSERT INTO `zz_area_code` VALUES (620723000000, '临泽县', 3, 620700000000); +INSERT INTO `zz_area_code` VALUES (620724000000, '高台县', 3, 620700000000); +INSERT INTO `zz_area_code` VALUES (620725000000, '山丹县', 3, 620700000000); +INSERT INTO `zz_area_code` VALUES (620800000000, '平凉市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (620801000000, '市辖区', 3, 620800000000); +INSERT INTO `zz_area_code` VALUES (620802000000, '崆峒区', 3, 620800000000); +INSERT INTO `zz_area_code` VALUES (620821000000, '泾川县', 3, 620800000000); +INSERT INTO `zz_area_code` VALUES (620822000000, '灵台县', 3, 620800000000); +INSERT INTO `zz_area_code` VALUES (620823000000, '崇信县', 3, 620800000000); +INSERT INTO `zz_area_code` VALUES (620825000000, '庄浪县', 3, 620800000000); +INSERT INTO `zz_area_code` VALUES (620826000000, '静宁县', 3, 620800000000); +INSERT INTO `zz_area_code` VALUES (620881000000, '华亭市', 3, 620800000000); +INSERT INTO `zz_area_code` VALUES (620900000000, '酒泉市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (620901000000, '市辖区', 3, 620900000000); +INSERT INTO `zz_area_code` VALUES (620902000000, '肃州区', 3, 620900000000); +INSERT INTO `zz_area_code` VALUES (620921000000, '金塔县', 3, 620900000000); +INSERT INTO `zz_area_code` VALUES (620922000000, '瓜州县', 3, 620900000000); +INSERT INTO `zz_area_code` VALUES (620923000000, '肃北蒙古族自治县', 3, 620900000000); +INSERT INTO `zz_area_code` VALUES (620924000000, '阿克塞哈萨克族自治县', 3, 620900000000); +INSERT INTO `zz_area_code` VALUES (620981000000, '玉门市', 3, 620900000000); +INSERT INTO `zz_area_code` VALUES (620982000000, '敦煌市', 3, 620900000000); +INSERT INTO `zz_area_code` VALUES (621000000000, '庆阳市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (621001000000, '市辖区', 3, 621000000000); +INSERT INTO `zz_area_code` VALUES (621002000000, '西峰区', 3, 621000000000); +INSERT INTO `zz_area_code` VALUES (621021000000, '庆城县', 3, 621000000000); +INSERT INTO `zz_area_code` VALUES (621022000000, '环县', 3, 621000000000); +INSERT INTO `zz_area_code` VALUES (621023000000, '华池县', 3, 621000000000); +INSERT INTO `zz_area_code` VALUES (621024000000, '合水县', 3, 621000000000); +INSERT INTO `zz_area_code` VALUES (621025000000, '正宁县', 3, 621000000000); +INSERT INTO `zz_area_code` VALUES (621026000000, '宁县', 3, 621000000000); +INSERT INTO `zz_area_code` VALUES (621027000000, '镇原县', 3, 621000000000); +INSERT INTO `zz_area_code` VALUES (621100000000, '定西市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (621101000000, '市辖区', 3, 621100000000); +INSERT INTO `zz_area_code` VALUES (621102000000, '安定区', 3, 621100000000); +INSERT INTO `zz_area_code` VALUES (621121000000, '通渭县', 3, 621100000000); +INSERT INTO `zz_area_code` VALUES (621122000000, '陇西县', 3, 621100000000); +INSERT INTO `zz_area_code` VALUES (621123000000, '渭源县', 3, 621100000000); +INSERT INTO `zz_area_code` VALUES (621124000000, '临洮县', 3, 621100000000); +INSERT INTO `zz_area_code` VALUES (621125000000, '漳县', 3, 621100000000); +INSERT INTO `zz_area_code` VALUES (621126000000, '岷县', 3, 621100000000); +INSERT INTO `zz_area_code` VALUES (621200000000, '陇南市', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (621201000000, '市辖区', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (621202000000, '武都区', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (621221000000, '成县', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (621222000000, '文县', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (621223000000, '宕昌县', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (621224000000, '康县', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (621225000000, '西和县', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (621226000000, '礼县', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (621227000000, '徽县', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (621228000000, '两当县', 3, 621200000000); +INSERT INTO `zz_area_code` VALUES (622900000000, '临夏回族自治州', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (622901000000, '临夏市', 3, 622900000000); +INSERT INTO `zz_area_code` VALUES (622921000000, '临夏县', 3, 622900000000); +INSERT INTO `zz_area_code` VALUES (622922000000, '康乐县', 3, 622900000000); +INSERT INTO `zz_area_code` VALUES (622923000000, '永靖县', 3, 622900000000); +INSERT INTO `zz_area_code` VALUES (622924000000, '广河县', 3, 622900000000); +INSERT INTO `zz_area_code` VALUES (622925000000, '和政县', 3, 622900000000); +INSERT INTO `zz_area_code` VALUES (622926000000, '东乡族自治县', 3, 622900000000); +INSERT INTO `zz_area_code` VALUES (622927000000, '积石山保安族东乡族撒拉族自治县', 3, 622900000000); +INSERT INTO `zz_area_code` VALUES (623000000000, '甘南藏族自治州', 2, 620000000000); +INSERT INTO `zz_area_code` VALUES (623001000000, '合作市', 3, 623000000000); +INSERT INTO `zz_area_code` VALUES (623021000000, '临潭县', 3, 623000000000); +INSERT INTO `zz_area_code` VALUES (623022000000, '卓尼县', 3, 623000000000); +INSERT INTO `zz_area_code` VALUES (623023000000, '舟曲县', 3, 623000000000); +INSERT INTO `zz_area_code` VALUES (623024000000, '迭部县', 3, 623000000000); +INSERT INTO `zz_area_code` VALUES (623025000000, '玛曲县', 3, 623000000000); +INSERT INTO `zz_area_code` VALUES (623026000000, '碌曲县', 3, 623000000000); +INSERT INTO `zz_area_code` VALUES (623027000000, '夏河县', 3, 623000000000); +INSERT INTO `zz_area_code` VALUES (630000000000, '青海省', 1, NULL); +INSERT INTO `zz_area_code` VALUES (630100000000, '西宁市', 2, 630000000000); +INSERT INTO `zz_area_code` VALUES (630101000000, '市辖区', 3, 630100000000); +INSERT INTO `zz_area_code` VALUES (630102000000, '城东区', 3, 630100000000); +INSERT INTO `zz_area_code` VALUES (630103000000, '城中区', 3, 630100000000); +INSERT INTO `zz_area_code` VALUES (630104000000, '城西区', 3, 630100000000); +INSERT INTO `zz_area_code` VALUES (630105000000, '城北区', 3, 630100000000); +INSERT INTO `zz_area_code` VALUES (630121000000, '大通回族土族自治县', 3, 630100000000); +INSERT INTO `zz_area_code` VALUES (630122000000, '湟中县', 3, 630100000000); +INSERT INTO `zz_area_code` VALUES (630123000000, '湟源县', 3, 630100000000); +INSERT INTO `zz_area_code` VALUES (630200000000, '海东市', 2, 630000000000); +INSERT INTO `zz_area_code` VALUES (630202000000, '乐都区', 3, 630200000000); +INSERT INTO `zz_area_code` VALUES (630203000000, '平安区', 3, 630200000000); +INSERT INTO `zz_area_code` VALUES (630222000000, '民和回族土族自治县', 3, 630200000000); +INSERT INTO `zz_area_code` VALUES (630223000000, '互助土族自治县', 3, 630200000000); +INSERT INTO `zz_area_code` VALUES (630224000000, '化隆回族自治县', 3, 630200000000); +INSERT INTO `zz_area_code` VALUES (630225000000, '循化撒拉族自治县', 3, 630200000000); +INSERT INTO `zz_area_code` VALUES (632200000000, '海北藏族自治州', 2, 630000000000); +INSERT INTO `zz_area_code` VALUES (632221000000, '门源回族自治县', 3, 632200000000); +INSERT INTO `zz_area_code` VALUES (632222000000, '祁连县', 3, 632200000000); +INSERT INTO `zz_area_code` VALUES (632223000000, '海晏县', 3, 632200000000); +INSERT INTO `zz_area_code` VALUES (632224000000, '刚察县', 3, 632200000000); +INSERT INTO `zz_area_code` VALUES (632300000000, '黄南藏族自治州', 2, 630000000000); +INSERT INTO `zz_area_code` VALUES (632321000000, '同仁县', 3, 632300000000); +INSERT INTO `zz_area_code` VALUES (632322000000, '尖扎县', 3, 632300000000); +INSERT INTO `zz_area_code` VALUES (632323000000, '泽库县', 3, 632300000000); +INSERT INTO `zz_area_code` VALUES (632324000000, '河南蒙古族自治县', 3, 632300000000); +INSERT INTO `zz_area_code` VALUES (632500000000, '海南藏族自治州', 2, 630000000000); +INSERT INTO `zz_area_code` VALUES (632521000000, '共和县', 3, 632500000000); +INSERT INTO `zz_area_code` VALUES (632522000000, '同德县', 3, 632500000000); +INSERT INTO `zz_area_code` VALUES (632523000000, '贵德县', 3, 632500000000); +INSERT INTO `zz_area_code` VALUES (632524000000, '兴海县', 3, 632500000000); +INSERT INTO `zz_area_code` VALUES (632525000000, '贵南县', 3, 632500000000); +INSERT INTO `zz_area_code` VALUES (632600000000, '果洛藏族自治州', 2, 630000000000); +INSERT INTO `zz_area_code` VALUES (632621000000, '玛沁县', 3, 632600000000); +INSERT INTO `zz_area_code` VALUES (632622000000, '班玛县', 3, 632600000000); +INSERT INTO `zz_area_code` VALUES (632623000000, '甘德县', 3, 632600000000); +INSERT INTO `zz_area_code` VALUES (632624000000, '达日县', 3, 632600000000); +INSERT INTO `zz_area_code` VALUES (632625000000, '久治县', 3, 632600000000); +INSERT INTO `zz_area_code` VALUES (632626000000, '玛多县', 3, 632600000000); +INSERT INTO `zz_area_code` VALUES (632700000000, '玉树藏族自治州', 2, 630000000000); +INSERT INTO `zz_area_code` VALUES (632701000000, '玉树市', 3, 632700000000); +INSERT INTO `zz_area_code` VALUES (632722000000, '杂多县', 3, 632700000000); +INSERT INTO `zz_area_code` VALUES (632723000000, '称多县', 3, 632700000000); +INSERT INTO `zz_area_code` VALUES (632724000000, '治多县', 3, 632700000000); +INSERT INTO `zz_area_code` VALUES (632725000000, '囊谦县', 3, 632700000000); +INSERT INTO `zz_area_code` VALUES (632726000000, '曲麻莱县', 3, 632700000000); +INSERT INTO `zz_area_code` VALUES (632800000000, '海西蒙古族藏族自治州', 2, 630000000000); +INSERT INTO `zz_area_code` VALUES (632801000000, '格尔木市', 3, 632800000000); +INSERT INTO `zz_area_code` VALUES (632802000000, '德令哈市', 3, 632800000000); +INSERT INTO `zz_area_code` VALUES (632803000000, '茫崖市', 3, 632800000000); +INSERT INTO `zz_area_code` VALUES (632821000000, '乌兰县', 3, 632800000000); +INSERT INTO `zz_area_code` VALUES (632822000000, '都兰县', 3, 632800000000); +INSERT INTO `zz_area_code` VALUES (632823000000, '天峻县', 3, 632800000000); +INSERT INTO `zz_area_code` VALUES (632857000000, '大柴旦行政委员会', 3, 632800000000); +INSERT INTO `zz_area_code` VALUES (640000000000, '宁夏回族自治区', 1, NULL); +INSERT INTO `zz_area_code` VALUES (640100000000, '银川市', 2, 640000000000); +INSERT INTO `zz_area_code` VALUES (640101000000, '市辖区', 3, 640100000000); +INSERT INTO `zz_area_code` VALUES (640104000000, '兴庆区', 3, 640100000000); +INSERT INTO `zz_area_code` VALUES (640105000000, '西夏区', 3, 640100000000); +INSERT INTO `zz_area_code` VALUES (640106000000, '金凤区', 3, 640100000000); +INSERT INTO `zz_area_code` VALUES (640121000000, '永宁县', 3, 640100000000); +INSERT INTO `zz_area_code` VALUES (640122000000, '贺兰县', 3, 640100000000); +INSERT INTO `zz_area_code` VALUES (640181000000, '灵武市', 3, 640100000000); +INSERT INTO `zz_area_code` VALUES (640200000000, '石嘴山市', 2, 640000000000); +INSERT INTO `zz_area_code` VALUES (640201000000, '市辖区', 3, 640200000000); +INSERT INTO `zz_area_code` VALUES (640202000000, '大武口区', 3, 640200000000); +INSERT INTO `zz_area_code` VALUES (640205000000, '惠农区', 3, 640200000000); +INSERT INTO `zz_area_code` VALUES (640221000000, '平罗县', 3, 640200000000); +INSERT INTO `zz_area_code` VALUES (640300000000, '吴忠市', 2, 640000000000); +INSERT INTO `zz_area_code` VALUES (640301000000, '市辖区', 3, 640300000000); +INSERT INTO `zz_area_code` VALUES (640302000000, '利通区', 3, 640300000000); +INSERT INTO `zz_area_code` VALUES (640303000000, '红寺堡区', 3, 640300000000); +INSERT INTO `zz_area_code` VALUES (640323000000, '盐池县', 3, 640300000000); +INSERT INTO `zz_area_code` VALUES (640324000000, '同心县', 3, 640300000000); +INSERT INTO `zz_area_code` VALUES (640381000000, '青铜峡市', 3, 640300000000); +INSERT INTO `zz_area_code` VALUES (640400000000, '固原市', 2, 640000000000); +INSERT INTO `zz_area_code` VALUES (640401000000, '市辖区', 3, 640400000000); +INSERT INTO `zz_area_code` VALUES (640402000000, '原州区', 3, 640400000000); +INSERT INTO `zz_area_code` VALUES (640422000000, '西吉县', 3, 640400000000); +INSERT INTO `zz_area_code` VALUES (640423000000, '隆德县', 3, 640400000000); +INSERT INTO `zz_area_code` VALUES (640424000000, '泾源县', 3, 640400000000); +INSERT INTO `zz_area_code` VALUES (640425000000, '彭阳县', 3, 640400000000); +INSERT INTO `zz_area_code` VALUES (640500000000, '中卫市', 2, 640000000000); +INSERT INTO `zz_area_code` VALUES (640501000000, '市辖区', 3, 640500000000); +INSERT INTO `zz_area_code` VALUES (640502000000, '沙坡头区', 3, 640500000000); +INSERT INTO `zz_area_code` VALUES (640521000000, '中宁县', 3, 640500000000); +INSERT INTO `zz_area_code` VALUES (640522000000, '海原县', 3, 640500000000); +INSERT INTO `zz_area_code` VALUES (650000000000, '新疆维吾尔自治区', 1, NULL); +INSERT INTO `zz_area_code` VALUES (650100000000, '乌鲁木齐市', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (650101000000, '市辖区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650102000000, '天山区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650103000000, '沙依巴克区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650104000000, '新市区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650105000000, '水磨沟区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650106000000, '头屯河区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650107000000, '达坂城区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650109000000, '米东区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650121000000, '乌鲁木齐县', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650171000000, '乌鲁木齐经济技术开发区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650172000000, '乌鲁木齐高新技术产业开发区', 3, 650100000000); +INSERT INTO `zz_area_code` VALUES (650200000000, '克拉玛依市', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (650201000000, '市辖区', 3, 650200000000); +INSERT INTO `zz_area_code` VALUES (650202000000, '独山子区', 3, 650200000000); +INSERT INTO `zz_area_code` VALUES (650203000000, '克拉玛依区', 3, 650200000000); +INSERT INTO `zz_area_code` VALUES (650204000000, '白碱滩区', 3, 650200000000); +INSERT INTO `zz_area_code` VALUES (650205000000, '乌尔禾区', 3, 650200000000); +INSERT INTO `zz_area_code` VALUES (650400000000, '吐鲁番市', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (650402000000, '高昌区', 3, 650400000000); +INSERT INTO `zz_area_code` VALUES (650421000000, '鄯善县', 3, 650400000000); +INSERT INTO `zz_area_code` VALUES (650422000000, '托克逊县', 3, 650400000000); +INSERT INTO `zz_area_code` VALUES (650500000000, '哈密市', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (650502000000, '伊州区', 3, 650500000000); +INSERT INTO `zz_area_code` VALUES (650521000000, '巴里坤哈萨克自治县', 3, 650500000000); +INSERT INTO `zz_area_code` VALUES (650522000000, '伊吾县', 3, 650500000000); +INSERT INTO `zz_area_code` VALUES (652300000000, '昌吉回族自治州', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (652301000000, '昌吉市', 3, 652300000000); +INSERT INTO `zz_area_code` VALUES (652302000000, '阜康市', 3, 652300000000); +INSERT INTO `zz_area_code` VALUES (652323000000, '呼图壁县', 3, 652300000000); +INSERT INTO `zz_area_code` VALUES (652324000000, '玛纳斯县', 3, 652300000000); +INSERT INTO `zz_area_code` VALUES (652325000000, '奇台县', 3, 652300000000); +INSERT INTO `zz_area_code` VALUES (652327000000, '吉木萨尔县', 3, 652300000000); +INSERT INTO `zz_area_code` VALUES (652328000000, '木垒哈萨克自治县', 3, 652300000000); +INSERT INTO `zz_area_code` VALUES (652700000000, '博尔塔拉蒙古自治州', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (652701000000, '博乐市', 3, 652700000000); +INSERT INTO `zz_area_code` VALUES (652702000000, '阿拉山口市', 3, 652700000000); +INSERT INTO `zz_area_code` VALUES (652722000000, '精河县', 3, 652700000000); +INSERT INTO `zz_area_code` VALUES (652723000000, '温泉县', 3, 652700000000); +INSERT INTO `zz_area_code` VALUES (652800000000, '巴音郭楞蒙古自治州', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (652801000000, '库尔勒市', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652822000000, '轮台县', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652823000000, '尉犁县', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652824000000, '若羌县', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652825000000, '且末县', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652826000000, '焉耆回族自治县', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652827000000, '和静县', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652828000000, '和硕县', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652829000000, '博湖县', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652871000000, '库尔勒经济技术开发区', 3, 652800000000); +INSERT INTO `zz_area_code` VALUES (652900000000, '阿克苏地区', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (652901000000, '阿克苏市', 3, 652900000000); +INSERT INTO `zz_area_code` VALUES (652922000000, '温宿县', 3, 652900000000); +INSERT INTO `zz_area_code` VALUES (652923000000, '库车县', 3, 652900000000); +INSERT INTO `zz_area_code` VALUES (652924000000, '沙雅县', 3, 652900000000); +INSERT INTO `zz_area_code` VALUES (652925000000, '新和县', 3, 652900000000); +INSERT INTO `zz_area_code` VALUES (652926000000, '拜城县', 3, 652900000000); +INSERT INTO `zz_area_code` VALUES (652927000000, '乌什县', 3, 652900000000); +INSERT INTO `zz_area_code` VALUES (652928000000, '阿瓦提县', 3, 652900000000); +INSERT INTO `zz_area_code` VALUES (652929000000, '柯坪县', 3, 652900000000); +INSERT INTO `zz_area_code` VALUES (653000000000, '克孜勒苏柯尔克孜自治州', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (653001000000, '阿图什市', 3, 653000000000); +INSERT INTO `zz_area_code` VALUES (653022000000, '阿克陶县', 3, 653000000000); +INSERT INTO `zz_area_code` VALUES (653023000000, '阿合奇县', 3, 653000000000); +INSERT INTO `zz_area_code` VALUES (653024000000, '乌恰县', 3, 653000000000); +INSERT INTO `zz_area_code` VALUES (653100000000, '喀什地区', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (653101000000, '喀什市', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653121000000, '疏附县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653122000000, '疏勒县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653123000000, '英吉沙县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653124000000, '泽普县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653125000000, '莎车县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653126000000, '叶城县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653127000000, '麦盖提县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653128000000, '岳普湖县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653129000000, '伽师县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653130000000, '巴楚县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653131000000, '塔什库尔干塔吉克自治县', 3, 653100000000); +INSERT INTO `zz_area_code` VALUES (653200000000, '和田地区', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (653201000000, '和田市', 3, 653200000000); +INSERT INTO `zz_area_code` VALUES (653221000000, '和田县', 3, 653200000000); +INSERT INTO `zz_area_code` VALUES (653222000000, '墨玉县', 3, 653200000000); +INSERT INTO `zz_area_code` VALUES (653223000000, '皮山县', 3, 653200000000); +INSERT INTO `zz_area_code` VALUES (653224000000, '洛浦县', 3, 653200000000); +INSERT INTO `zz_area_code` VALUES (653225000000, '策勒县', 3, 653200000000); +INSERT INTO `zz_area_code` VALUES (653226000000, '于田县', 3, 653200000000); +INSERT INTO `zz_area_code` VALUES (653227000000, '民丰县', 3, 653200000000); +INSERT INTO `zz_area_code` VALUES (654000000000, '伊犁哈萨克自治州', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (654002000000, '伊宁市', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654003000000, '奎屯市', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654004000000, '霍尔果斯市', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654021000000, '伊宁县', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654022000000, '察布查尔锡伯自治县', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654023000000, '霍城县', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654024000000, '巩留县', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654025000000, '新源县', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654026000000, '昭苏县', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654027000000, '特克斯县', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654028000000, '尼勒克县', 3, 654000000000); +INSERT INTO `zz_area_code` VALUES (654200000000, '塔城地区', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (654201000000, '塔城市', 3, 654200000000); +INSERT INTO `zz_area_code` VALUES (654202000000, '乌苏市', 3, 654200000000); +INSERT INTO `zz_area_code` VALUES (654221000000, '额敏县', 3, 654200000000); +INSERT INTO `zz_area_code` VALUES (654223000000, '沙湾县', 3, 654200000000); +INSERT INTO `zz_area_code` VALUES (654224000000, '托里县', 3, 654200000000); +INSERT INTO `zz_area_code` VALUES (654225000000, '裕民县', 3, 654200000000); +INSERT INTO `zz_area_code` VALUES (654226000000, '和布克赛尔蒙古自治县', 3, 654200000000); +INSERT INTO `zz_area_code` VALUES (654300000000, '阿勒泰地区', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (654301000000, '阿勒泰市', 3, 654300000000); +INSERT INTO `zz_area_code` VALUES (654321000000, '布尔津县', 3, 654300000000); +INSERT INTO `zz_area_code` VALUES (654322000000, '富蕴县', 3, 654300000000); +INSERT INTO `zz_area_code` VALUES (654323000000, '福海县', 3, 654300000000); +INSERT INTO `zz_area_code` VALUES (654324000000, '哈巴河县', 3, 654300000000); +INSERT INTO `zz_area_code` VALUES (654325000000, '青河县', 3, 654300000000); +INSERT INTO `zz_area_code` VALUES (654326000000, '吉木乃县', 3, 654300000000); +INSERT INTO `zz_area_code` VALUES (659000000000, '自治区直辖县级行政区划', 2, 650000000000); +INSERT INTO `zz_area_code` VALUES (659001000000, '石河子市', 3, 659000000000); +INSERT INTO `zz_area_code` VALUES (659002000000, '阿拉尔市', 3, 659000000000); +INSERT INTO `zz_area_code` VALUES (659003000000, '图木舒克市', 3, 659000000000); +INSERT INTO `zz_area_code` VALUES (659004000000, '五家渠市', 3, 659000000000); +INSERT INTO `zz_area_code` VALUES (659006000000, '铁门关市', 3, 659000000000); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_flow_category +-- ---------------------------- +DROP TABLE IF EXISTS `zz_flow_category`; +CREATE TABLE `zz_flow_category` ( + `category_id` bigint(20) NOT NULL COMMENT '主键Id', + `name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '显示名称', + `code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '分类编码', + `show_order` int(11) NOT NULL COMMENT '实现顺序', + `update_time` datetime NOT NULL COMMENT '更新时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + PRIMARY KEY (`category_id`) USING BTREE, + UNIQUE KEY `idx_code` (`code`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_flow_category +-- ---------------------------- +BEGIN; +INSERT INTO `zz_flow_category` VALUES (1440940473421139968, '人事管理', 'HR', 1, '2021-09-23 15:25:55', 1440911410581213417, '2021-09-23 15:25:55', 1440911410581213417); +INSERT INTO `zz_flow_category` VALUES (1440940520124715008, '财务管理', 'CW', 2, '2021-09-23 15:26:06', 1440911410581213417, '2021-09-23 15:26:06', 1440911410581213417); +INSERT INTO `zz_flow_category` VALUES (1440940563934220288, '项目管理', 'XM', 3, '2021-09-23 15:26:16', 1440911410581213417, '2021-09-23 15:26:16', 1440911410581213417); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_flow_entry +-- ---------------------------- +DROP TABLE IF EXISTS `zz_flow_entry`; +CREATE TABLE `zz_flow_entry` ( + `entry_id` bigint(20) NOT NULL COMMENT '主键', + `process_definition_name` varchar(200) NOT NULL COMMENT '流程名称', + `process_definition_key` varchar(150) NOT NULL COMMENT '流程标识Key', + `category_id` bigint(20) NOT NULL COMMENT '流程分类', + `main_entry_publish_id` bigint(20) DEFAULT NULL COMMENT '工作流部署的发布主版本Id', + `lastest_publish_time` datetime DEFAULT NULL COMMENT '最新发布时间', + `status` int(11) NOT NULL COMMENT '流程状态', + `bpmn_xml` longtext COMMENT '流程定义的xml', + `bind_form_type` int(11) NOT NULL COMMENT '绑定表单类型', + `page_id` bigint(20) DEFAULT NULL COMMENT '在线表单的页面Id', + `default_form_id` bigint(20) DEFAULT NULL COMMENT '在线表单Id', + `default_router_name` varchar(255) DEFAULT NULL COMMENT '静态表单的缺省路由名称', + `update_time` datetime NOT NULL COMMENT '更新时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + PRIMARY KEY (`entry_id`) USING BTREE, + UNIQUE KEY `idx_process_definition_key` (`process_definition_key`) USING BTREE, + KEY `idx_category_id` (`category_id`) USING BTREE, + KEY `idx_status` (`status`) USING BTREE, + KEY `idx_process_definition_name` (`process_definition_name`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Records of zz_flow_entry +-- ---------------------------- +BEGIN; +INSERT INTO `zz_flow_entry` VALUES (1440962968085860352, '请假申请', 'flowLeave', 1440940473421139968, 1440966810131238912, '2021-09-23 17:10:34', 1, '\n\n \n \n Flow_05fy9wh\n \n \n \n \n \n \n \n \n Flow_05fy9wh\n Flow_012hd4v\n Flow_1dpnyz6\n Flow_0pme0vr\n \n \n \n \n \n \n \n \n \n \n Flow_0pme0vr\n Flow_1hbob37\n Flow_012hd4v\n \n \n \n \n \n \n \n \n \n \n Flow_1hbob37\n Flow_0so810a\n Flow_1dpnyz6\n \n \n \n \n \n ${operationType == \'agree\'}\n \n \n Flow_0so810a\n \n \n \n \n \n ${operationType == \'agree\'}\n \n \n \n \n \n ${operationType == \'refuse\'}\n \n \n \n \n \n ${operationType == \'refuse\'}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n', 0, 1440945149889744896, 1440945411354267648, NULL, '2021-09-24 09:30:26', 1440911410581213417, '2021-09-23 16:55:18', 1440911410581213417); +INSERT INTO `zz_flow_entry` VALUES (1440966906914803712, '报销申请', 'flowSubmit', 1440940520124715008, 1440972224344363008, '2021-09-23 17:32:05', 1, '\n\n \n \n Flow_00ldvag\n \n \n \n \n \n \n \n \n Flow_00ldvag\n Flow_1hmaykh\n Flow_09b7unr\n Flow_0x9dx2t\n \n \n \n \n \n \n \n \n \n \n \n \n Flow_0x9dx2t\n Flow_18p3hqb\n Flow_1hmaykh\n \n \n \n Flow_18p3hqb\n Flow_1qigakr\n Flow_058cmsb\n \n \n \n \n \n ${operationType == \'agree\'}\n \n \n Flow_1qigakr\n Flow_0ycx8fb\n \n \n ${totalAmount <= 1000}\n \n \n \n \n \n \n \n \n \n Flow_058cmsb\n Flow_0ycx8fb\n Flow_09b7unr\n \n \n ${totalAmount > 1000}\n \n \n \n \n \n ${operationType == \'agree\'}\n \n \n \n \n \n ${operationType == \'refuse\'}\n \n \n \n \n \n ${operationType == \'refuse\'}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n', 0, 1440946020174270464, 1440947675041107968, NULL, '2021-09-24 13:23:15', 1440911410581213417, '2021-09-23 17:10:57', 1440911410581213417); +INSERT INTO `zz_flow_entry` VALUES (1440968423508021248, '合同审批', 'flowContract', 1440940563934220288, 1441216695006924800, '2021-09-24 09:43:31', 1, '\n\n \n \n Flow_00cexea\n \n \n \n \n \n \n \n \n Flow_00cexea\n Flow_0lloy56\n Flow_1vsrivb\n Flow_1m2406f\n Flow_04kcajc\n \n \n \n \n \n \n \n \n \n Flow_04kcajc\n Flow_026fvnq\n \n \n \n \n Flow_026fvnq\n Flow_0zz0u9g\n Flow_1yxqbe0\n \n \n \n \n \n \n \n \n Flow_0zz0u9g\n Flow_124e8z3\n \n \n \n \n \n \n \n \n \n Flow_1yxqbe0\n Flow_1uvj3ds\n \n \n \n \n Flow_124e8z3\n Flow_1uvj3ds\n Flow_1kyhnlz\n \n \n \n \n \n \n \n \n \n \n Flow_1kyhnlz\n Flow_0di6qa6\n Flow_0lloy56\n \n \n \n \n \n \n \n \n \n \n Flow_0zmsn3x\n Flow_0jyv1zb\n \n ${nrOfInstances == nrOfCompletedInstances}\n \n \n \n \n \n \n ${operationType == \'agree\'}\n \n \n Flow_0jyv1zb\n Flow_1f8yxov\n Flow_1vsrivb\n \n \n \n \n \n \n \n \n \n \n Flow_1f8yxov\n Flow_1a3qclm\n Flow_1m2406f\n \n \n ${multiAgreeCount / multiNumOfInstances > 0.4}\n \n \n Flow_1a3qclm\n \n \n \n \n \n ${operationType == \'agree\'}\n \n \n \n \n \n ${operationType == \'refuse\'}\n \n \n \n \n \n \n \n \n \n Flow_0di6qa6\n Flow_0zmsn3x\n \n \n \n ${multiAgreeCount / multiNumOfInstances <= 0.4}\n \n \n \n \n \n ${operationType == \'refuse\'}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n', 0, 1440952710487609344, 1440954920348946432, NULL, '2021-09-24 10:17:32', 1440966324770574336, '2021-09-23 17:16:59', 1440911410581213417); +INSERT INTO `zz_flow_entry` VALUES (1440972435892473856, '多实例加签', 'flowConSign', 1440940473421139968, 1440973324426416128, '2021-09-23 17:36:27', 1, '\n\n \n \n Flow_111kyps\n \n \n \n \n \n \n \n \n \n Flow_111kyps\n Flow_009p7hy\n Flow_0ct2yid\n \n \n \n \n \n \n \n \n \n Flow_0ct2yid\n Flow_052kvzh\n \n ${nrOfInstances == nrOfCompletedInstances}\n \n \n \n \n \n \n \n \n \n \n \n Flow_052kvzh\n Flow_1ng5qp7\n Flow_009p7hy\n \n \n \n Flow_1ng5qp7\n \n \n \n \n \n ${operationType == \'agree\'}\n \n \n \n \n \n ${operationType == \'refuse\'}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n', 0, 1440945149889744896, 1440945411354267648, NULL, '2021-09-23 17:36:21', 1440911410581213417, '2021-09-23 17:32:55', 1440911410581213417); +INSERT INTO `zz_flow_entry` VALUES (1440973419167354880, '转办流程', 'flowTranslate', 1440940473421139968, 1440973782771568640, '2021-09-23 17:38:16', 1, '\n\n \n \n Flow_08lgvo0\n \n \n \n \n \n \n \n \n Flow_08lgvo0\n Flow_0n45f5j\n \n \n \n \n \n \n \n \n \n \n Flow_0n45f5j\n Flow_1s8i9er\n \n \n \n Flow_1s8i9er\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n', 0, 1440945149889744896, 1440945411354267648, NULL, '2021-09-23 17:38:00', 1440911410581213417, '2021-09-23 17:36:50', 1440911410581213417); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_flow_entry_publish +-- ---------------------------- +DROP TABLE IF EXISTS `zz_flow_entry_publish`; +CREATE TABLE `zz_flow_entry_publish` ( + `entry_publish_id` bigint(20) NOT NULL COMMENT '主键Id', + `entry_id` bigint(20) NOT NULL COMMENT '流程Id', + `process_definition_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '流程引擎的定义Id', + `deploy_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '流程引擎的部署Id', + `publish_version` int(11) NOT NULL COMMENT '发布版本', + `active_status` bit(1) NOT NULL COMMENT '激活状态', + `main_version` bit(1) NOT NULL COMMENT '是否为主版本', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `publish_time` datetime NOT NULL COMMENT '发布时间', + `init_task_info` text CHARACTER SET utf8mb4 COMMENT '第一个非开始节点任务的附加信息', + PRIMARY KEY (`entry_publish_id`) USING BTREE, + UNIQUE KEY `idx_process_definition_id` (`process_definition_id`) USING BTREE, + KEY `idx_entry_id` (`entry_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_flow_entry_publish +-- ---------------------------- +BEGIN; +INSERT INTO `zz_flow_entry_publish` VALUES (1440966810131238912, 1440962968085860352, 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', '1a075ec8-1c4e-11ec-94ee-5ef70686b817', 1, b'1', b'1', 1440911410581213417, '2021-09-23 17:10:34', '{\"assignee\":\"${startUserName}\",\"formId\":1440945411354267648,\"groupType\":\"DEPT\",\"operationList\":[{\"showOrder\":\"0\",\"id\":\"1632387369558\",\"label\":\"提交\",\"type\":\"agree\"}],\"readOnly\":false,\"taskKey\":\"Activity_0sc2yuf\",\"taskType\":1}'); +INSERT INTO `zz_flow_entry_publish` VALUES (1440968302972112896, 1440966906914803712, 'flowSubmit:1:efe9db3f-1c4e-11ec-94ee-5ef70686b817', 'efd6c86c-1c4e-11ec-94ee-5ef70686b817', 1, b'1', b'0', 1440911410581213417, '2021-09-23 17:16:30', '{\"assignee\":\"${startUserName}\",\"formId\":1440947675041107968,\"groupType\":\"DEPT\",\"operationList\":[{\"showOrder\":\"0\",\"id\":\"1632388352676\",\"label\":\"提交\",\"type\":\"agree\"}],\"readOnly\":false,\"taskKey\":\"Activity_03kjurt\",\"taskType\":1}'); +INSERT INTO `zz_flow_entry_publish` VALUES (1440972214223507456, 1440968423508021248, 'flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', '1ba32d20-1c51-11ec-94ee-5ef70686b817', 1, b'1', b'0', 1440911410581213417, '2021-09-23 17:32:02', '{\"formId\":1440954920348946432,\"groupType\":\"DEPT\",\"operationList\":[{\"showOrder\":\"0\",\"id\":\"1632388965712\",\"label\":\"提交\",\"type\":\"agree\"}],\"readOnly\":false,\"taskKey\":\"Activity_0nyla1r\",\"taskType\":1}'); +INSERT INTO `zz_flow_entry_publish` VALUES (1440972224344363008, 1440966906914803712, 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '1d1dbf34-1c51-11ec-94ee-5ef70686b817', 2, b'1', b'1', 1440911410581213417, '2021-09-23 17:32:05', '{\"assignee\":\"${startUserName}\",\"formId\":1440947675041107968,\"groupType\":\"DEPT\",\"operationList\":[{\"showOrder\":\"0\",\"id\":\"1632388352676\",\"label\":\"提交\",\"type\":\"agree\"}],\"readOnly\":false,\"taskKey\":\"Activity_03kjurt\",\"taskType\":1}'); +INSERT INTO `zz_flow_entry_publish` VALUES (1440973324426416128, 1440972435892473856, 'flowConSign:1:b981c1fb-1c51-11ec-94ee-5ef70686b817', 'b97761b8-1c51-11ec-94ee-5ef70686b817', 1, b'1', b'1', 1440911410581213417, '2021-09-23 17:36:27', '{\"assignee\":\"${startUserName}\",\"formId\":1440945411354267648,\"groupType\":\"DEPT\",\"operationList\":[{\"showOrder\":\"0\",\"id\":\"1632389626319\",\"label\":\"提交\",\"type\":\"multi_sign\"},{\"showOrder\":\"1\",\"id\":\"1632389633373\",\"label\":\"加签\",\"type\":\"multi_consign\"}],\"readOnly\":false,\"taskKey\":\"Activity_1xk7j4n\",\"taskType\":1}'); +INSERT INTO `zz_flow_entry_publish` VALUES (1440973782771568640, 1440973419167354880, 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'fa9b683c-1c51-11ec-94ee-5ef70686b817', 1, b'1', b'1', 1440911410581213417, '2021-09-23 17:38:16', '{\"assignee\":\"${startUserName}\",\"formId\":1440945411354267648,\"groupType\":\"DEPT\",\"operationList\":[{\"showOrder\":\"0\",\"id\":\"1632389836108\",\"label\":\"提交\",\"type\":\"agree\"}],\"readOnly\":false,\"taskKey\":\"Activity_08p9kng\",\"taskType\":1}'); +INSERT INTO `zz_flow_entry_publish` VALUES (1441214529919782912, 1440968423508021248, 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '9d23d445-1cd7-11ec-acd8-3ae4f1d3c3af', 2, b'1', b'0', 1440911410581213417, '2021-09-24 09:34:55', '{\"assignee\":\"${startUserName}\",\"formId\":1440954920348946432,\"groupType\":\"DEPT\",\"operationList\":[{\"showOrder\":\"0\",\"id\":\"1632388965712\",\"label\":\"提交\",\"type\":\"agree\"}],\"readOnly\":false,\"taskKey\":\"Activity_0nyla1r\",\"taskType\":1}'); +INSERT INTO `zz_flow_entry_publish` VALUES (1441216695006924800, 1440968423508021248, 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 'd273a35d-1cd8-11ec-acd8-3ae4f1d3c3af', 3, b'1', b'1', 1440911410581213417, '2021-09-24 09:43:31', '{\"assignee\":\"${startUserName}\",\"formId\":1440954920348946432,\"groupType\":\"DEPT\",\"operationList\":[{\"showOrder\":\"0\",\"id\":\"1632388965712\",\"label\":\"提交\",\"type\":\"agree\"}],\"readOnly\":false,\"taskKey\":\"Activity_0nyla1r\",\"taskType\":1}'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_flow_entry_publish_variable +-- ---------------------------- +DROP TABLE IF EXISTS `zz_flow_entry_publish_variable`; +CREATE TABLE `zz_flow_entry_publish_variable` ( + `variable_id` bigint(20) NOT NULL COMMENT '主键Id', + `entry_publish_id` bigint(20) NOT NULL COMMENT '流程Id', + `variable_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '变量名', + `show_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '显示名', + `variable_type` int(11) NOT NULL COMMENT '变量类型', + `bind_datasource_id` bigint(20) DEFAULT NULL COMMENT '绑定数据源Id', + `bind_relation_id` bigint(20) DEFAULT NULL COMMENT '绑定数据源关联Id', + `bind_column_id` bigint(20) DEFAULT NULL COMMENT '绑定字段Id', + `builtin` bit(1) NOT NULL COMMENT '是否内置', + PRIMARY KEY (`variable_id`) USING BTREE, + KEY `idx_entry_publish_id` (`entry_publish_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_flow_entry_publish_variable +-- ---------------------------- +BEGIN; +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440966810181570560, 1440966810131238912, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440966810181570561, 1440966810131238912, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440968302993084416, 1440968302972112896, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440968302993084417, 1440968302972112896, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440968302993084418, 1440968302972112896, 'totalAmount', '报销金额', 1, 1440946127531675648, NULL, 1440946127493926912, b'0'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440972214244478976, 1440972214223507456, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440972214244478977, 1440972214223507456, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440972224365334528, 1440972224344363008, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440972224365334529, 1440972224344363008, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440972224365334530, 1440972224344363008, 'totalAmount', '报销金额', 1, 1440946127531675648, NULL, 1440946127493926912, b'0'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440973324443193344, 1440973324426416128, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440973324443193345, 1440973324426416128, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440973782788345856, 1440973782771568640, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1440973782788345857, 1440973782771568640, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1441214529953337344, 1441214529919782912, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1441214529953337345, 1441214529919782912, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1441216695027896320, 1441216695006924800, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1'); +INSERT INTO `zz_flow_entry_publish_variable` VALUES (1441216695027896321, 1441216695006924800, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_flow_entry_variable +-- ---------------------------- +DROP TABLE IF EXISTS `zz_flow_entry_variable`; +CREATE TABLE `zz_flow_entry_variable` ( + `variable_id` bigint(20) NOT NULL COMMENT '主键Id', + `entry_id` bigint(20) NOT NULL COMMENT '流程Id', + `variable_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '变量名', + `show_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '显示名', + `variable_type` int(11) NOT NULL COMMENT '变量类型', + `bind_datasource_id` bigint(20) DEFAULT NULL COMMENT '绑定数据源Id', + `bind_relation_id` bigint(20) DEFAULT NULL COMMENT '绑定数据源关联Id', + `bind_column_id` bigint(20) DEFAULT NULL COMMENT '绑定字段Id', + `builtin` bit(1) NOT NULL COMMENT '是否内置', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`variable_id`) USING BTREE, + UNIQUE KEY `uk_entry_id_variable_name` (`entry_id`,`variable_name`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_flow_entry_variable +-- ---------------------------- +BEGIN; +INSERT INTO `zz_flow_entry_variable` VALUES (1440962968090054657, 1440962968085860352, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1', '2021-09-23 16:55:18'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440962968094248961, 1440962968085860352, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1', '2021-09-23 16:55:18'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440966906918998017, 1440966906914803712, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1', '2021-09-23 17:10:57'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440966906927386625, 1440966906914803712, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1', '2021-09-23 17:10:57'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440967581673459712, 1440966906914803712, 'totalAmount', '报销金额', 1, 1440946127531675648, NULL, 1440946127493926912, b'0', '2021-09-23 17:13:38'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440968423512215553, 1440968423508021248, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1', '2021-09-23 17:16:59'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440968423516409857, 1440968423508021248, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1', '2021-09-23 17:16:59'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440972435900862465, 1440972435892473856, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1', '2021-09-23 17:32:55'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440972435905056768, 1440972435892473856, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1', '2021-09-23 17:32:55'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440973419171549185, 1440973419167354880, 'operationType', '审批类型', 1, NULL, NULL, NULL, b'1', '2021-09-23 17:36:50'); +INSERT INTO `zz_flow_entry_variable` VALUES (1440973419175743489, 1440973419167354880, 'startUserName', '流程启动用户', 0, NULL, NULL, NULL, b'1', '2021-09-23 17:36:50'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_flow_task_comment +-- ---------------------------- +DROP TABLE IF EXISTS `zz_flow_task_comment`; +CREATE TABLE `zz_flow_task_comment` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `process_instance_id` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '流程实例Id', + `task_id` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '任务Id', + `task_key` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '任务标识', + `task_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '任务名称', + `approval_type` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '审批类型', + `comment` varchar(1024) COLLATE utf8_bin DEFAULT NULL COMMENT '批注内容', + `delegate_assignee` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '委托指定人,比如加签、转办等', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_username` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '创建者用户名', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_process_instance_id` (`process_instance_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Records of zz_flow_task_comment +-- ---------------------------- +BEGIN; +INSERT INTO `zz_flow_task_comment` VALUES (1441213241249239040, 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7b1c912-1cd6-11ec-acd8-3ae4f1d3c3af', 'Activity_0sc2yuf', '请假录入', 'agree', NULL, NULL, 1440966324770574336, '员工D', '2021-09-24 09:29:48'); +INSERT INTO `zz_flow_task_comment` VALUES (1441213342894002176, 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'e7b80aa9-1cd6-11ec-acd8-3ae4f1d3c3af', 'Activity_1jw5u20', '部门领导审批', 'agree', '同意', NULL, 1440966073686953984, '天津总监', '2021-09-24 09:30:12'); +INSERT INTO `zz_flow_task_comment` VALUES (1441213560184115200, 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 'f62d36b1-1cd6-11ec-acd8-3ae4f1d3c3af', 'Activity_0olxatv', 'HR审批', 'agree', '同意', NULL, 1440965465605148672, '员工A', '2021-09-24 09:31:04'); +INSERT INTO `zz_flow_task_comment` VALUES (1441213876594020352, '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '42019911-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_03kjurt', '报销单录入', 'agree', NULL, NULL, 1440966324770574336, '员工D', '2021-09-24 09:32:19'); +INSERT INTO `zz_flow_task_comment` VALUES (1441213922165133312, '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '42054298-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_0ywxfwu', '部门领导审批', 'agree', '同意', NULL, 1440966073686953984, '天津总监', '2021-09-24 09:32:30'); +INSERT INTO `zz_flow_task_comment` VALUES (1441214057024589824, '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', '487ef9a2-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_0qay48u', '总经理审批', 'agree', '好的', NULL, 1440969706411397120, '总部领导', '2021-09-24 09:33:02'); +INSERT INTO `zz_flow_task_comment` VALUES (1441214335085973504, '719d8e5a-1cd7-11ec-acd8-3ae4f1d3c3af', '719d8e62-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_0nyla1r', '合同录入', 'stop', '配置错误', NULL, 1440966324770574336, '员工D', '2021-09-24 09:34:09'); +INSERT INTO `zz_flow_task_comment` VALUES (1441215377718644736, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '1754a6f2-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_0nyla1r', '合同录入', 'agree', NULL, NULL, 1440966324770574336, '员工D', '2021-09-24 09:38:17'); +INSERT INTO `zz_flow_task_comment` VALUES (1441215450896666624, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '1757db49-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1ucrh52', '业务部领导审批', 'agree', '同意', NULL, 1440966073686953984, '天津总监', '2021-09-24 09:38:35'); +INSERT INTO `zz_flow_task_comment` VALUES (1441215523189690368, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '21b97ae8-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_0tm3mph', '造价部审批', 'agree', '同意', NULL, 1440911410581213417, '管理员', '2021-09-24 09:38:52'); +INSERT INTO `zz_flow_task_comment` VALUES (1441215553006997504, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '21b953d4-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_138m4nn', '工程部审批', 'agree', '同意', NULL, 1440911410581213417, '管理员', '2021-09-24 09:38:59'); +INSERT INTO `zz_flow_task_comment` VALUES (1441215775858757632, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '3040cf64-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1yuuyie', '财务部审批', 'agree', '没问题', NULL, 1440966073686953984, '天津总监', '2021-09-24 09:39:52'); +INSERT INTO `zz_flow_task_comment` VALUES (1441216028087422976, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '4fec915c-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1eewt01', '法务部审批', 'multi_sign', '用户 [leaderLaw] 会签 [[\"userB\",\"userC\",\"leaderLaw\"]]。', NULL, 1440965808049098752, '法务经理', '2021-09-24 09:40:52'); +INSERT INTO `zz_flow_task_comment` VALUES (1441216073780170752, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '4fec915c-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1eewt01', '法务部审批', 'multi_consign', '用户 [leaderLaw] 加签 [[\"admin\"]]。', NULL, 1440965808049098752, '法务经理', '2021-09-24 09:41:03'); +INSERT INTO `zz_flow_task_comment` VALUES (1441216212972343296, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c18ac0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '法务部会签', 'multi_agree', '同意', NULL, 1440965808049098752, '法务经理', '2021-09-24 09:41:36'); +INSERT INTO `zz_flow_task_comment` VALUES (1441216292819308544, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c163a6-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '法务部会签', 'multi_refuse', '不同意', NULL, 1440965586715676672, '员工B', '2021-09-24 09:41:55'); +INSERT INTO `zz_flow_task_comment` VALUES (1441216373144424448, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '73c18abb-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '法务部会签', 'multi_agree', '同意', NULL, 1440965697961201664, '员工C', '2021-09-24 09:42:15'); +INSERT INTO `zz_flow_task_comment` VALUES (1441216770470842368, '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', '7a4309f7-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '法务部会签', 'stop', '多实例条件配置错误', NULL, 1440911410581213417, '管理员', '2021-09-24 09:43:49'); +INSERT INTO `zz_flow_task_comment` VALUES (1441217206766538752, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b41a38d-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_0nyla1r', '合同录入', 'agree', NULL, NULL, 1440966324770574336, '员工D', '2021-09-24 09:45:33'); +INSERT INTO `zz_flow_task_comment` VALUES (1441217290182856704, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '1b4488c4-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_1ucrh52', '业务部领导审批', 'agree', '同意', NULL, 1440966073686953984, '天津总监', '2021-09-24 09:45:53'); +INSERT INTO `zz_flow_task_comment` VALUES (1441217345438617600, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '271ebea3-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_0tm3mph', '造价部审批', 'agree', '同意', NULL, 1440911410581213417, '管理员', '2021-09-24 09:46:06'); +INSERT INTO `zz_flow_task_comment` VALUES (1441217371766263808, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '271e978f-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_138m4nn', '工程部审批', 'agree', '同意', NULL, 1440911410581213417, '管理员', '2021-09-24 09:46:13'); +INSERT INTO `zz_flow_task_comment` VALUES (1441217738105163776, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '32b7097e-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_1yuuyie', '财务部审批', 'agree', '同意', NULL, 1440966186522120192, '天津经理', '2021-09-24 09:47:40'); +INSERT INTO `zz_flow_task_comment` VALUES (1441217836524507136, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '66c6d396-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_1eewt01', '法务部审批', 'multi_sign', '用户 [leaderLaw] 会签 [[\"leaderLaw\",\"userC\"]]。', NULL, 1440965808049098752, '法务经理', '2021-09-24 09:48:03'); +INSERT INTO `zz_flow_task_comment` VALUES (1441217872834596864, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c12a5e-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '法务部会签', 'multi_agree', '同意', NULL, 1440965808049098752, '法务经理', '2021-09-24 09:48:12'); +INSERT INTO `zz_flow_task_comment` VALUES (1441217994800762880, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '66c6d396-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_1eewt01', '法务部审批', 'multi_consign', '用户 [leaderLaw] 加签 [[\"userB\"]]。', NULL, 1440965808049098752, '法务经理', '2021-09-24 09:48:41'); +INSERT INTO `zz_flow_task_comment` VALUES (1441218049788088320, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '8b4134ba-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '法务部会签', 'multi_agree', '拒绝', NULL, 1440965586715676672, '员工B', '2021-09-24 09:48:54'); +INSERT INTO `zz_flow_task_comment` VALUES (1441218134890516480, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '74c15172-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '法务部会签', 'multi_agree', 't同意', NULL, 1440965697961201664, '员工C', '2021-09-24 09:49:15'); +INSERT INTO `zz_flow_task_comment` VALUES (1441218265987682304, '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', '9f286bc3-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_1h3pnxy', '总经理审批', 'agree', '同意', NULL, 1440969706411397120, '总部领导', '2021-09-24 09:49:46'); +INSERT INTO `zz_flow_task_comment` VALUES (1441218427363528704, 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b70062-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_08p9kng', '录入', 'agree', NULL, NULL, 1440911410581213417, '管理员', '2021-09-24 09:50:24'); +INSERT INTO `zz_flow_task_comment` VALUES (1441218497429377024, 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_12olr01', '转办', 'transfer', '交给你了', 'leaderHR', 1440911410581213417, '管理员', '2021-09-24 09:50:41'); +INSERT INTO `zz_flow_task_comment` VALUES (1441218606418366464, 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 'c8b9bf89-1cd9-11ec-acd8-3ae4f1d3c3af', 'Activity_12olr01', '转办', 'agree', '同意', NULL, 1440965344985354240, '人事经理', '2021-09-24 09:51:07'); +INSERT INTO `zz_flow_task_comment` VALUES (1441312737664700416, '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '22f9b37c-1d0e-11ec-8336-3ae4f1d3c3af', 'Activity_03kjurt', '报销单录入', 'agree', NULL, NULL, 1440966324770574336, '员工D', '2021-09-24 16:05:10'); +INSERT INTO `zz_flow_task_comment` VALUES (1441324108838080512, '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', '23032963-1d0e-11ec-8336-3ae4f1d3c3af', 'Activity_0ywxfwu', '部门领导审批', 'agree', '同意', NULL, 1440966073686953984, '天津总监', '2021-09-24 16:50:21'); +INSERT INTO `zz_flow_task_comment` VALUES (1441340309681213440, '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', '7138fd96-1d1d-11ec-8336-3ae4f1d3c3af', 'Activity_03kjurt', '报销单录入', 'agree', NULL, NULL, 1440966324770574336, '员工D', '2021-09-24 17:54:43'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_flow_task_ext +-- ---------------------------- +DROP TABLE IF EXISTS `zz_flow_task_ext`; +CREATE TABLE `zz_flow_task_ext` ( + `process_definition_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '流程引擎的定义Id', + `task_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '流程引擎任务Id', + `operation_list_json` longtext COLLATE utf8mb4_bin COMMENT '操作列表JSON', + `variable_list_json` longtext COLLATE utf8mb4_bin COMMENT '变量列表JSON', + `assignee_list_json` text COLLATE utf8mb4_bin COMMENT '存储多实例的assigneeList的JSON', + `group_type` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '分组类型', + PRIMARY KEY (`process_definition_id`,`task_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_flow_task_ext +-- ---------------------------- +BEGIN; +INSERT INTO `zz_flow_task_ext` VALUES ('flowConSign:1:b981c1fb-1c51-11ec-94ee-5ef70686b817', 'Activity_006g6qo', '[{\"showOrder\":\"0\",\"id\":\"1632389733600\",\"label\":\"同意\",\"type\":\"multi_agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowConSign:1:b981c1fb-1c51-11ec-94ee-5ef70686b817', 'Activity_0p7omdm', '[{\"showOrder\":\"0\",\"id\":\"1632389682895\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632389686939\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowConSign:1:b981c1fb-1c51-11ec-94ee-5ef70686b817', 'Activity_1xk7j4n', '[{\"showOrder\":\"0\",\"id\":\"1632389626319\",\"label\":\"提交\",\"type\":\"multi_sign\"},{\"showOrder\":\"1\",\"id\":\"1632389633373\",\"label\":\"加签\",\"type\":\"multi_consign\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', 'Activity_098ncvw', '[{\"showOrder\":\"0\",\"id\":\"1632389190662\",\"label\":\"同意\",\"type\":\"multi_agree\"},{\"showOrder\":\"1\",\"id\":\"1632389197406\",\"label\":\"拒绝\",\"type\":\"multi_refuse\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', 'Activity_0nyla1r', '[{\"showOrder\":\"0\",\"id\":\"1632388965712\",\"label\":\"提交\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', 'Activity_0tm3mph', '[{\"showOrder\":\"0\",\"id\":\"1632388982377\",\"label\":\"同意\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', 'Activity_138m4nn', '[{\"showOrder\":\"0\",\"id\":\"1632388978101\",\"label\":\"同意\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', 'Activity_1eewt01', '[{\"showOrder\":\"0\",\"id\":\"1632389337024\",\"label\":\"会签\",\"type\":\"multi_sign\"},{\"showOrder\":\"1\",\"id\":\"1632389341901\",\"label\":\"加签\",\"type\":\"multi_consign\"}]', NULL, NULL, 'POST'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', 'Activity_1h3pnxy', '[{\"showOrder\":\"0\",\"id\":\"1632389449508\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632389452850\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', 'Activity_1ucrh52', '[{\"showOrder\":\"0\",\"id\":\"1632388972455\",\"label\":\"同意\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT_POST_LEADER'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:1:1bbc0c53-1c51-11ec-94ee-5ef70686b817', 'Activity_1yuuyie', '[{\"showOrder\":\"0\",\"id\":\"1632389037814\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632389042489\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'POST'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '[{\"showOrder\":\"0\",\"id\":\"1632389190662\",\"label\":\"同意\",\"type\":\"multi_agree\"},{\"showOrder\":\"1\",\"id\":\"1632389197406\",\"label\":\"拒绝\",\"type\":\"multi_refuse\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_0nyla1r', '[{\"showOrder\":\"0\",\"id\":\"1632388965712\",\"label\":\"提交\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_0tm3mph', '[{\"showOrder\":\"0\",\"id\":\"1632388982377\",\"label\":\"同意\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_138m4nn', '[{\"showOrder\":\"0\",\"id\":\"1632388978101\",\"label\":\"同意\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_1eewt01', '[{\"showOrder\":\"0\",\"id\":\"1632389337024\",\"label\":\"会签\",\"type\":\"multi_sign\"},{\"showOrder\":\"1\",\"id\":\"1632389341901\",\"label\":\"加签\",\"type\":\"multi_consign\"}]', NULL, NULL, 'POST'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_1h3pnxy', '[{\"showOrder\":\"0\",\"id\":\"1632389449508\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632389452850\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_1ucrh52', '[{\"showOrder\":\"0\",\"id\":\"1632388972455\",\"label\":\"同意\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT_POST_LEADER'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', 'Activity_1yuuyie', '[{\"showOrder\":\"0\",\"id\":\"1632389037814\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632389042489\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'POST'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_098ncvw', '[{\"showOrder\":\"0\",\"id\":\"1632389190662\",\"label\":\"同意\",\"type\":\"multi_agree\"},{\"showOrder\":\"1\",\"id\":\"1632389197406\",\"label\":\"拒绝\",\"type\":\"multi_refuse\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_0nyla1r', '[{\"showOrder\":\"0\",\"id\":\"1632388965712\",\"label\":\"提交\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_0tm3mph', '[{\"showOrder\":\"0\",\"id\":\"1632388982377\",\"label\":\"同意\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_138m4nn', '[{\"showOrder\":\"0\",\"id\":\"1632388978101\",\"label\":\"同意\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1eewt01', '[{\"showOrder\":\"0\",\"id\":\"1632389337024\",\"label\":\"会签\",\"type\":\"multi_sign\"},{\"showOrder\":\"1\",\"id\":\"1632389341901\",\"label\":\"加签\",\"type\":\"multi_consign\"}]', NULL, NULL, 'POST'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1h3pnxy', '[{\"showOrder\":\"0\",\"id\":\"1632389449508\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632389452850\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1ucrh52', '[{\"showOrder\":\"0\",\"id\":\"1632388972455\",\"label\":\"同意\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT_POST_LEADER'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', 'Activity_1yuuyie', '[{\"showOrder\":\"0\",\"id\":\"1632389037814\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632389042489\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'POST'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'Activity_0olxatv', '[{\"showOrder\":\"0\",\"id\":\"1632388147727\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632388151069\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'POST'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'Activity_0sc2yuf', '[{\"showOrder\":\"0\",\"id\":\"1632387369558\",\"label\":\"提交\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'Activity_1jw5u20', '[{\"showOrder\":\"0\",\"id\":\"1632387389734\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632387393116\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'DEPT_POST_LEADER'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowSubmit:1:efe9db3f-1c4e-11ec-94ee-5ef70686b817', 'Activity_03kjurt', '[{\"showOrder\":\"0\",\"id\":\"1632388352676\",\"label\":\"提交\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowSubmit:1:efe9db3f-1c4e-11ec-94ee-5ef70686b817', 'Activity_0qay48u', '[{\"showOrder\":\"0\",\"id\":\"1632388536771\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632388540081\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowSubmit:1:efe9db3f-1c4e-11ec-94ee-5ef70686b817', 'Activity_0ywxfwu', '[{\"showOrder\":\"0\",\"id\":\"1632388372003\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632388375866\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', '[{\"variableType\":1,\"showName\":\"报销金额\",\"variableName\":\"totalAmount\",\"bindColumnId\":1440946127493926912,\"createTime\":1632388418000,\"builtin\":false,\"bindDatasourceId\":1440946127531675648,\"variableId\":1440967581673459712,\"entryId\":1440966906914803712}]', NULL, 'DEPT_POST_LEADER'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', 'Activity_03kjurt', '[{\"showOrder\":\"0\",\"id\":\"1632388352676\",\"label\":\"提交\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', 'Activity_0qay48u', '[{\"showOrder\":\"0\",\"id\":\"1632388536771\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632388540081\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', 'Activity_0ywxfwu', '[{\"showOrder\":\"0\",\"id\":\"1632388372003\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632388375866\",\"label\":\"拒绝\",\"type\":\"refuse\"}]', '[{\"variableType\":1,\"showName\":\"报销金额\",\"variableName\":\"totalAmount\",\"bindColumnId\":1440946127493926912,\"createTime\":1632388418000,\"builtin\":false,\"bindDatasourceId\":1440946127531675648,\"variableId\":1440967581673459712,\"entryId\":1440966906914803712}]', NULL, 'DEPT_POST_LEADER'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'Activity_08p9kng', '[{\"showOrder\":\"0\",\"id\":\"1632389836108\",\"label\":\"提交\",\"type\":\"agree\"}]', NULL, NULL, 'DEPT'); +INSERT INTO `zz_flow_task_ext` VALUES ('flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'Activity_12olr01', '[{\"showOrder\":\"0\",\"id\":\"1632389848554\",\"label\":\"同意\",\"type\":\"agree\"},{\"showOrder\":\"1\",\"id\":\"1632389853959\",\"label\":\"转办\",\"type\":\"transfer\"}]', NULL, NULL, 'DEPT'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_flow_work_order +-- ---------------------------- +DROP TABLE IF EXISTS `zz_flow_work_order`; +CREATE TABLE `zz_flow_work_order` ( + `work_order_id` bigint(20) NOT NULL COMMENT '主键Id', + `process_definition_key` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '流程定义标识', + `process_definition_name` varchar(200) CHARACTER SET utf8mb4 NOT NULL COMMENT '流程名称', + `process_definition_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '流程引擎的定义Id', + `process_instance_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '流程实例Id', + `online_table_id` bigint(20) DEFAULT NULL COMMENT '在线表单的主表Id', + `business_key` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '业务主键值', + `task_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '未完成的任务Id', + `task_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '未完成的任务名称', + `task_definition_key` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '未完成的任务标识', + `flow_status` int(11) NOT NULL DEFAULT '0' COMMENT '流程状态', + `submit_username` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '提交用户登录名称', + `dept_id` bigint(20) NOT NULL COMMENT '提交用户所在部门Id', + `update_time` datetime NOT NULL COMMENT '更新时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`work_order_id`) USING BTREE, + UNIQUE KEY `uk_process_instance_id` (`process_instance_id`) USING BTREE, + KEY `idx_process_definition_key` (`process_definition_key`) USING BTREE, + KEY `idx_create_user_id` (`create_user_id`) USING BTREE, + KEY `idx_create_time` (`create_time`) USING BTREE, + KEY `idx_dept_id` (`dept_id`) USING BTREE, + KEY `idx_business_key` (`business_key`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_flow_work_order +-- ---------------------------- +BEGIN; +INSERT INTO `zz_flow_work_order` VALUES (1441213241270210560, 'flowLeave', '请假申请', 'flowLeave:1:1bc2a35b-1c4e-11ec-94ee-5ef70686b817', 'e7ac71d9-1cd6-11ec-acd8-3ae4f1d3c3af', 1440945228079960064, '1441213240326492160', NULL, NULL, NULL, 3, 'userD', 1440963698460987392, '2021-09-24 09:31:04', 1440965465605148672, '2021-09-24 09:29:48', 1440966324770574336, 1); +INSERT INTO `zz_flow_work_order` VALUES (1441213876598214656, 'flowSubmit', '报销申请', 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '420171f8-1cd7-11ec-acd8-3ae4f1d3c3af', 1440946127460372480, '1441213876367527936', NULL, NULL, NULL, 3, 'userD', 1440963698460987392, '2021-09-24 09:33:02', 1440969706411397120, '2021-09-24 09:32:19', 1440966324770574336, 1); +INSERT INTO `zz_flow_work_order` VALUES (1441215377722839040, 'flowContract', '合同审批', 'flowContract:2:9edd1d08-1cd7-11ec-acd8-3ae4f1d3c3af', '17547fd9-1cd8-11ec-acd8-3ae4f1d3c3af', 1440952815294877696, '1441215377508929536', NULL, NULL, NULL, 4, 'userD', 1440963698460987392, '2021-09-24 09:43:49', 1440911410581213417, '2021-09-24 09:38:17', 1440966324770574336, 1); +INSERT INTO `zz_flow_work_order` VALUES (1441217206770733056, 'flowContract', '合同审批', 'flowContract:3:d28aadd0-1cd8-11ec-acd8-3ae4f1d3c3af', '1b41a384-1cd9-11ec-acd8-3ae4f1d3c3af', 1440952815294877696, '1441217206602960896', NULL, NULL, NULL, 3, 'userD', 1440963698460987392, '2021-09-24 09:49:46', 1440969706411397120, '2021-09-24 09:45:33', 1440966324770574336, 1); +INSERT INTO `zz_flow_work_order` VALUES (1441218427367723008, 'flowTranslate', '转办流程', 'flowTranslate:1:faa41acf-1c51-11ec-94ee-5ef70686b817', 'c8b7005a-1cd9-11ec-acd8-3ae4f1d3c3af', 1440945228079960064, '1441218427220922368', NULL, NULL, NULL, 3, 'admin', 1440911410581213416, '2021-09-24 09:51:07', 1440965344985354240, '2021-09-24 09:50:24', 1440911410581213417, 1); +INSERT INTO `zz_flow_work_order` VALUES (1441312737689866240, 'flowSubmit', '报销申请', 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '22f398f3-1d0e-11ec-8336-3ae4f1d3c3af', 1440946127460372480, '1441312736167333888', NULL, NULL, NULL, 3, 'userD', 1440963698460987392, '2021-09-24 16:50:21', 1440966073686953984, '2021-09-24 16:05:10', 1440966324770574336, 1); +INSERT INTO `zz_flow_work_order` VALUES (1441340309685407744, 'flowSubmit', '报销申请', 'flowSubmit:2:1d2bc8f7-1c51-11ec-94ee-5ef70686b817', '7138d67d-1d1d-11ec-8336-3ae4f1d3c3af', 1440946127460372480, '1441340309442138112', NULL, NULL, NULL, 0, 'userD', 1440963698460987392, '2021-09-24 17:54:43', 1440966324770574336, '2021-09-24 17:54:43', 1440966324770574336, 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_column +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_column`; +CREATE TABLE `zz_online_column` ( + `column_id` bigint(20) NOT NULL COMMENT '主键Id', + `column_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '字段名', + `table_id` bigint(20) NOT NULL COMMENT '数据表Id', + `column_type` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '数据表中的字段类型', + `full_column_type` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '数据表中的完整字段类型(包括了精度和刻度)', + `primary_key` bit(1) NOT NULL COMMENT '是否为主键', + `auto_increment` bit(1) NOT NULL COMMENT '是否是自增主键(0: 不是 1: 是)', + `nullable` bit(1) NOT NULL COMMENT '是否可以为空 (0: 不可以为空 1: 可以为空)', + `column_default` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '缺省值', + `column_show_order` int(11) NOT NULL COMMENT '字段在数据表中的显示位置', + `column_comment` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '数据表中的字段注释', + `object_field_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '对象映射字段名称', + `object_field_type` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '对象映射字段类型', + `filter_type` int(11) NOT NULL DEFAULT '1' COMMENT '字段过滤类型', + `parent_key` bit(1) NOT NULL COMMENT '是否是主键的父Id', + `dept_filter` bit(1) NOT NULL COMMENT '是否部门过滤字段', + `user_filter` bit(1) NOT NULL COMMENT '是否用户过滤字段', + `field_kind` int(11) DEFAULT NULL COMMENT '字段类别', + `max_file_count` int(11) DEFAULT NULL COMMENT '包含的文件文件数量,0表示无限制', + `dict_id` bigint(20) DEFAULT NULL COMMENT '字典Id', + `update_time` datetime NOT NULL COMMENT '更新时间', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`column_id`), + KEY `idx_table_id` (`table_id`) USING BTREE, + KEY `idx_dict_id` (`dict_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_column +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_column` VALUES (1440945228088348672, 'id', 1440945228079960064, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'id', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:44:49', '2021-09-23 15:44:49'); +INSERT INTO `zz_online_column` VALUES (1440945228092542976, 'user_id', 1440945228079960064, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 2, '请假用户', 'userId', 'Long', 0, b'0', b'0', b'0', 21, NULL, 1440944417170001920, '2021-09-24 09:29:41', '2021-09-23 15:44:49'); +INSERT INTO `zz_online_column` VALUES (1440945228100931584, 'leave_reason', 1440945228079960064, 'varchar', 'varchar(512)', b'0', b'0', b'0', NULL, 3, '请假原因', 'leaveReason', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:44:49', '2021-09-23 15:44:49'); +INSERT INTO `zz_online_column` VALUES (1440945228105125888, 'leave_type', 1440945228079960064, 'int', 'int(11)', b'0', b'0', b'0', NULL, 4, '请假类型', 'leaveType', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, 1440943031288074240, '2021-09-23 15:45:01', '2021-09-23 15:44:49'); +INSERT INTO `zz_online_column` VALUES (1440945228113514496, 'leave_begin_time', 1440945228079960064, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 5, '请假开始时间', 'leaveBeginTime', 'Date', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:44:49', '2021-09-23 15:44:49'); +INSERT INTO `zz_online_column` VALUES (1440945228117708800, 'leave_end_time', 1440945228079960064, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 6, '请假结束时间', 'leaveEndTime', 'Date', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:44:49', '2021-09-23 15:44:49'); +INSERT INTO `zz_online_column` VALUES (1440945228126097408, 'apply_time', 1440945228079960064, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 7, '申请时间', 'applyTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 15:45:06', '2021-09-23 15:44:49'); +INSERT INTO `zz_online_column` VALUES (1440946127468761088, 'id', 1440946127460372480, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'id', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:48:23', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440946127481344000, 'submit_name', 1440946127460372480, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 2, '报销名称', 'submitName', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:48:23', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440946127489732608, 'submit_kind', 1440946127460372480, 'int', 'int(11)', b'0', b'0', b'0', NULL, 3, '报销类别', 'submitKind', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, 1440943168626364416, '2021-09-23 15:49:11', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440946127493926912, 'total_amount', 1440946127460372480, 'int', 'int(11)', b'0', b'0', b'0', NULL, 4, '报销金额', 'totalAmount', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:49:52', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440946127498121216, 'description', 1440946127460372480, 'varchar', 'varchar(512)', b'0', b'0', b'0', NULL, 5, '报销描述', 'description', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:48:23', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440946127506509824, 'memo', 1440946127460372480, 'varchar', 'varchar(512)', b'0', b'0', b'1', NULL, 6, '备注', 'memo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:48:23', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440946127510704128, 'update_user_id', 1440946127460372480, 'bigint', 'bigint(20)', b'0', b'0', b'1', NULL, 7, '修改人', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 15:50:04', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440946127514898432, 'update_time', 1440946127460372480, 'datetime', 'datetime', b'0', b'0', b'1', NULL, 8, '修改时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 15:50:08', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440946127523287040, 'create_user_id', 1440946127460372480, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 9, '创建人', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 15:50:12', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440946127527481344, 'create_time', 1440946127460372480, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 10, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 15:50:16', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_column` VALUES (1440947089222668288, 'id', 1440947089218473984, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'id', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:52:12', '2021-09-23 15:52:12'); +INSERT INTO `zz_online_column` VALUES (1440947089231056896, 'submit_id', 1440947089218473984, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 2, '报销单据Id', 'submitId', 'Long', 1, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:57:41', '2021-09-23 15:52:12'); +INSERT INTO `zz_online_column` VALUES (1440947089235251200, 'expense_type', 1440947089218473984, 'int', 'int(11)', b'0', b'0', b'0', NULL, 3, '费用类型', 'expenseType', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, 1440943309924077568, '2021-09-23 15:53:15', '2021-09-23 15:52:12'); +INSERT INTO `zz_online_column` VALUES (1440947089243639808, 'expense_time', 1440947089218473984, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 4, '发生日期', 'expenseTime', 'Date', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:52:12', '2021-09-23 15:52:12'); +INSERT INTO `zz_online_column` VALUES (1440947089252028416, 'amount', 1440947089218473984, 'int', 'int(11)', b'0', b'0', b'0', NULL, 5, '金额', 'amount', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:52:12', '2021-09-23 15:52:12'); +INSERT INTO `zz_online_column` VALUES (1440947089260417024, 'image_url', 1440947089218473984, 'varchar', 'varchar(512)', b'0', b'0', b'1', NULL, 6, '报销凭证', 'imageUrl', 'String', 0, b'0', b'0', b'0', 2, 1, NULL, '2021-09-23 15:53:53', '2021-09-23 15:52:12'); +INSERT INTO `zz_online_column` VALUES (1440947089264611328, 'description', 1440947089218473984, 'varchar', 'varchar(255)', b'0', b'0', b'1', NULL, 7, '费用描述', 'description', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 15:52:12', '2021-09-23 15:52:12'); +INSERT INTO `zz_online_column` VALUES (1440952815303266304, 'contract_id', 1440952815294877696, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'contractId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:14:57', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815307460608, 'first_party_id', 1440952815294877696, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 2, '甲方企业', 'firstPartyId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, 1440943452526219264, '2021-09-23 16:16:50', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815311654912, 'second_party_id', 1440952815294877696, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 3, '乙方企业', 'secondPartyId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, 1440943955939168256, '2021-09-23 16:16:59', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815315849216, 'contract_type', 1440952815294877696, 'int', 'int(11)', b'0', b'0', b'0', NULL, 4, '合同类型', 'contractType', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, 1440944300799037440, '2021-09-23 16:17:03', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815320043520, 'due_date', 1440952815294877696, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 5, '到期日期', 'dueDate', 'Date', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:14:57', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815324237824, 'sales_id', 1440952815294877696, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 6, '业务员', 'salesId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, 1440944417170001920, '2021-09-23 16:17:10', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815332626432, 'commission_rate', 1440952815294877696, 'int', 'int(11)', b'0', b'0', b'0', NULL, 7, '提成比例(%)', 'commissionRate', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:17:38', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815336820736, 'attachment', 1440952815294877696, 'varchar', 'varchar(512)', b'0', b'0', b'1', NULL, 8, '合同附件', 'attachment', 'String', 0, b'0', b'0', b'0', 1, 1, NULL, '2021-09-23 16:17:46', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815341015040, 'security_attachment', 1440952815294877696, 'varchar', 'varchar(512)', b'0', b'0', b'1', NULL, 9, '保密协议', 'securityAttachment', 'String', 0, b'0', b'0', b'0', 1, 1, NULL, '2021-09-23 16:17:53', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815345209344, 'intellectual_property_attachment', 1440952815294877696, 'varchar', 'varchar(512)', b'0', b'0', b'1', NULL, 10, '知识产权协议', 'intellectualPropertyAttachment', 'String', 0, b'0', b'0', b'0', 1, 1, NULL, '2021-09-23 16:18:00', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815349403648, 'other_attachment', 1440952815294877696, 'varchar', 'varchar(512)', b'0', b'0', b'1', NULL, 11, '其他附件', 'otherAttachment', 'String', 0, b'0', b'0', b'0', 1, 1, NULL, '2021-09-23 16:18:05', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815353597952, 'create_user_id', 1440952815294877696, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 12, '创建者', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 16:18:09', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815357792256, 'create_time', 1440952815294877696, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 13, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 16:18:15', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815361986560, 'update_user_id', 1440952815294877696, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 14, '更新者', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 16:18:19', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815366180864, 'update_time', 1440952815294877696, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 15, '最后更新时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 16:18:24', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952815370375168, 'deleted_flag', 1440952815294877696, 'int', 'int(11)', b'0', b'0', b'0', '0', 16, '删除标记(1: 正常 -1: 已删除)', 'deletedFlag', 'Integer', 0, b'0', b'0', b'0', 31, NULL, NULL, '2021-09-23 16:18:28', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_column` VALUES (1440952921037475840, 'first_party_id', 1440952921024892928, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'firstPartyId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:23', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921041670144, 'company_name', 1440952921024892928, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 2, '公司名称', 'companyName', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:23', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921050058752, 'legal_person', 1440952921024892928, 'varchar', 'varchar(64)', b'0', b'0', b'0', NULL, 3, '公司法人', 'legalPerson', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:18:38', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921054253056, 'legal_person_id', 1440952921024892928, 'char', 'char(18)', b'0', b'0', b'0', NULL, 4, '法人身份证号', 'legalPersonId', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:23', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921058447360, 'registry_address', 1440952921024892928, 'varchar', 'varchar(512)', b'0', b'0', b'0', NULL, 5, '注册地址', 'registryAddress', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:23', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921066835968, 'contact_info', 1440952921024892928, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 6, '联系方式', 'contactInfo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:23', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921079418880, 'business_scope', 1440952921024892928, 'varchar', 'varchar(4000)', b'0', b'0', b'0', NULL, 7, '经营范围', 'businessScope', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:23', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921087807488, 'memo', 1440952921024892928, 'varchar', 'varchar(1024)', b'0', b'0', b'1', NULL, 8, '备注', 'memo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:23', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921092001792, 'create_user_id', 1440952921024892928, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 9, '创建者', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 16:18:48', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921100390400, 'create_time', 1440952921024892928, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 10, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 16:18:51', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921104584704, 'update_user_id', 1440952921024892928, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 11, '更新者', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 16:18:54', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921108779008, 'update_time', 1440952921024892928, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 12, '最后更新时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 16:19:00', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952921112973312, 'deleted_flag', 1440952921024892928, 'int', 'int(11)', b'0', b'0', b'0', '0', 13, '删除标记(1: 正常 -1: 已删除)', 'deletedFlag', 'Integer', 0, b'0', b'0', b'0', 31, NULL, NULL, '2021-09-23 16:19:04', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_column` VALUES (1440952988393803776, 'second_party_id', 1440952988389609472, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'secondPartyId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:39', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988406386688, 'company_name', 1440952988389609472, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 2, '公司名称', 'companyName', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:39', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988456718336, 'legal_person', 1440952988389609472, 'varchar', 'varchar(64)', b'0', b'0', b'0', NULL, 3, '公司法人', 'legalPerson', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:19:12', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988469301248, 'legal_person_id', 1440952988389609472, 'char', 'char(18)', b'0', b'0', b'0', NULL, 4, '法人身份证号', 'legalPersonId', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:39', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988473495552, 'registry_address', 1440952988389609472, 'varchar', 'varchar(512)', b'0', b'0', b'0', NULL, 5, '注册地址', 'registryAddress', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:39', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988486078464, 'contact_info', 1440952988389609472, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 6, '联系方式', 'contactInfo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:39', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988494467072, 'business_scope', 1440952988389609472, 'varchar', 'varchar(4000)', b'0', b'0', b'0', NULL, 7, '经营范围', 'businessScope', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:39', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988498661376, 'memo', 1440952988389609472, 'varchar', 'varchar(1024)', b'0', b'0', b'1', NULL, 8, '备注', 'memo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:15:39', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988502855680, 'create_user_id', 1440952988389609472, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 9, '创建者', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 16:19:17', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988507049984, 'create_time', 1440952988389609472, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 10, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 16:19:21', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988515438592, 'update_user_id', 1440952988389609472, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 11, '更新者', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 16:19:24', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988519632896, 'update_time', 1440952988389609472, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 12, '最后更新时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 16:19:28', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440952988528021504, 'deleted_flag', 1440952988389609472, 'int', 'int(11)', b'0', b'0', b'0', '0', 13, '删除标记(1: 正常 -1: 已删除)', 'deletedFlag', 'Integer', 0, b'0', b'0', b'0', 31, NULL, NULL, '2021-09-23 16:19:33', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_column` VALUES (1440953088910299136, 'contract_detail_id', 1440953088901910528, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'contractDetailId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:16:03', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088918687744, 'contract_id', 1440953088901910528, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 2, '合同Id', 'contractId', 'Long', 1, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:42:59', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088922882048, 'product_id', 1440953088901910528, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 3, '合同产品', 'productId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, 1440944049128214528, '2021-09-23 16:20:03', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088927076352, 'total_count', 1440953088901910528, 'int', 'int(11)', b'0', b'0', b'0', NULL, 4, '产品数量', 'totalCount', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:20:10', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088935464960, 'total_amount', 1440953088901910528, 'int', 'int(11)', b'0', b'0', b'0', NULL, 5, '产品总价', 'totalAmount', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:20:56', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088939659264, 'meno', 1440953088901910528, 'varchar', 'varchar(1024)', b'0', b'0', b'1', NULL, 6, '备注', 'meno', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:16:03', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088948047872, 'create_user_id', 1440953088901910528, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 7, '创建者', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 16:21:00', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088952242176, 'create_time', 1440953088901910528, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 8, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 16:21:04', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088960630784, 'update_user_id', 1440953088901910528, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 9, '更新者', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 16:21:07', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088964825088, 'update_time', 1440953088901910528, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 10, '最后更新时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 16:21:12', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953088973213696, 'deleted_flag', 1440953088901910528, 'int', 'int(11)', b'0', b'0', b'0', '0', 11, '删除标记(1: 正常 -1: 已删除)', 'deletedFlag', 'Integer', 0, b'0', b'0', b'0', 31, NULL, NULL, '2021-09-23 16:21:15', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_column` VALUES (1440953170518872064, 'pay_detail_id', 1440953170514677760, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'payDetailId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:16:22', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170531454976, 'contract_id', 1440953170514677760, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 2, '合同Id', 'contractId', 'Long', 1, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:43:04', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170535649280, 'pay_date', 1440953170514677760, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 3, '付款日期', 'payDate', 'Date', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:16:22', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170539843584, 'pay_type', 1440953170514677760, 'int', 'int(11)', b'0', b'0', b'0', NULL, 4, '付款类型', 'payType', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, 1440944184381935616, '2021-09-23 16:21:27', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170548232192, 'percentage', 1440953170514677760, 'int', 'int(11)', b'0', b'0', b'0', NULL, 5, '百分比', 'percentage', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:16:22', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170552426496, 'memo', 1440953170514677760, 'varchar', 'varchar(1024)', b'0', b'0', b'1', NULL, 6, '备注', 'memo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:16:22', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170560815104, 'create_user_id', 1440953170514677760, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 7, '创建者', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 16:21:43', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170569203712, 'create_time', 1440953170514677760, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 8, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 16:21:46', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170573398016, 'update_user_id', 1440953170514677760, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 9, '更新者', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 16:21:49', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170581786624, 'update_time', 1440953170514677760, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 10, '最后更新时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 16:21:52', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953170585980928, 'deleted_flag', 1440953170514677760, 'int', 'int(11)', b'0', b'0', b'0', '0', 11, '删除标记(1: 正常 -1: 已删除)', 'deletedFlag', 'Integer', 0, b'0', b'0', b'0', 31, NULL, NULL, '2021-09-23 16:21:55', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_column` VALUES (1440953245668216832, 'delivery_id', 1440953245664022528, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'deliveryId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:16:40', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245676605440, 'contract_id', 1440953245664022528, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 2, '合同Id', 'contractId', 'Long', 1, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:43:09', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245684994048, 'delivery_date', 1440953245664022528, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 3, '交付日期', 'deliveryDate', 'Date', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:16:40', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245697576960, 'product_id', 1440953245664022528, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 4, '交付产品', 'productId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, 1440944049128214528, '2021-09-23 16:22:18', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245705965568, 'total_count', 1440953245664022528, 'int', 'int(11)', b'0', b'0', b'0', NULL, 5, '交付数量', 'totalCount', 'Integer', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:22:21', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245718548480, 'memo', 1440953245664022528, 'varchar', 'varchar(1024)', b'0', b'0', b'1', NULL, 6, '备注', 'memo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:16:40', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245722742784, 'create_user_id', 1440953245664022528, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 7, '创建者', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 16:22:45', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245726937088, 'create_time', 1440953245664022528, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 8, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 16:22:48', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245731131392, 'update_user_id', 1440953245664022528, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 9, '更新者', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 16:22:52', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245735325696, 'update_time', 1440953245664022528, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 10, '最后更新时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 16:22:56', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440953245743714304, 'deleted_flag', 1440953245664022528, 'int', 'int(11)', b'0', b'0', b'0', '0', 11, '删除标记(1: 正常 -1: 已删除)', 'deletedFlag', 'Integer', 0, b'0', b'0', b'0', 31, NULL, NULL, '2021-09-23 16:22:59', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_column` VALUES (1440958971132252160, 'first_party_id', 1440958971128057856, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'firstPartyId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:39:25', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971140640768, 'company_name', 1440958971128057856, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 2, '公司名称', 'companyName', 'String', 3, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:41:25', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971144835072, 'legal_person', 1440958971128057856, 'varchar', 'varchar(64)', b'0', b'0', b'0', NULL, 3, '公司法人', 'legalPerson', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:39:32', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971149029376, 'legal_person_id', 1440958971128057856, 'char', 'char(18)', b'0', b'0', b'0', NULL, 4, '法人身份证号', 'legalPersonId', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:39:25', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971153223680, 'registry_address', 1440958971128057856, 'varchar', 'varchar(512)', b'0', b'0', b'0', NULL, 5, '注册地址', 'registryAddress', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:39:25', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971157417984, 'contact_info', 1440958971128057856, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 6, '联系方式', 'contactInfo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:39:25', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971161612288, 'business_scope', 1440958971128057856, 'varchar', 'varchar(4000)', b'0', b'0', b'0', NULL, 7, '经营范围', 'businessScope', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:39:25', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971165806592, 'memo', 1440958971128057856, 'varchar', 'varchar(1024)', b'0', b'0', b'1', NULL, 8, '备注', 'memo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:39:25', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971170000896, 'create_user_id', 1440958971128057856, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 9, '创建者', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 16:39:40', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971174195200, 'create_time', 1440958971128057856, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 10, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 16:39:43', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971178389504, 'update_user_id', 1440958971128057856, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 11, '更新者', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 16:39:46', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971182583808, 'update_time', 1440958971128057856, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 12, '最后更新时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 16:39:53', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440958971186778112, 'deleted_flag', 1440958971128057856, 'int', 'int(11)', b'0', b'0', b'0', '0', 13, '删除标记(1: 正常 -1: 已删除)', 'deletedFlag', 'Integer', 0, b'0', b'0', b'0', 31, NULL, NULL, '2021-09-23 16:39:58', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_column` VALUES (1440961208285925376, 'second_party_id', 1440961208273342464, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'secondPartyId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:48:18', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208294313984, 'company_name', 1440961208273342464, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 2, '公司名称', 'companyName', 'String', 3, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:48:23', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208298508288, 'legal_person', 1440961208273342464, 'varchar', 'varchar(64)', b'0', b'0', b'0', NULL, 3, '公司法人', 'legalPerson', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:48:28', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208302702592, 'legal_person_id', 1440961208273342464, 'char', 'char(18)', b'0', b'0', b'0', NULL, 4, '法人身份证号', 'legalPersonId', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:48:18', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208306896896, 'registry_address', 1440961208273342464, 'varchar', 'varchar(512)', b'0', b'0', b'0', NULL, 5, '注册地址', 'registryAddress', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:48:18', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208315285504, 'contact_info', 1440961208273342464, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 6, '联系方式', 'contactInfo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:48:18', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208319479808, 'business_scope', 1440961208273342464, 'varchar', 'varchar(4000)', b'0', b'0', b'0', NULL, 7, '经营范围', 'businessScope', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:48:18', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208323674112, 'memo', 1440961208273342464, 'varchar', 'varchar(1024)', b'0', b'0', b'1', NULL, 8, '备注', 'memo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:48:18', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208327868416, 'create_user_id', 1440961208273342464, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 9, '创建者', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 16:48:36', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208332062720, 'create_time', 1440961208273342464, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 10, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 16:48:40', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208336257024, 'update_user_id', 1440961208273342464, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 11, '更新者', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 16:48:44', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208340451328, 'update_time', 1440961208273342464, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 12, '最后更新时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 16:48:49', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440961208344645632, 'deleted_flag', 1440961208273342464, 'int', 'int(11)', b'0', b'0', b'0', '0', 13, '删除标记(1: 正常 -1: 已删除)', 'deletedFlag', 'Integer', 0, b'0', b'0', b'0', 31, NULL, NULL, '2021-09-23 16:48:55', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_column` VALUES (1440962162720772096, 'product_id', 1440962162712383488, 'bigint', 'bigint(20)', b'1', b'0', b'0', NULL, 1, '主键Id', 'productId', 'Long', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:52:06', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162729160704, 'product_name', 1440962162712383488, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 2, '产品名称', 'productName', 'String', 3, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:52:10', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162733355008, 'product_spec', 1440962162712383488, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 3, '规格', 'productSpec', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:52:06', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162737549312, 'type', 1440962162712383488, 'varchar', 'varchar(255)', b'0', b'0', b'0', NULL, 4, '型号', 'type', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:52:06', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162741743616, 'cost_price', 1440962162712383488, 'int', 'int(11)', b'0', b'0', b'0', NULL, 5, '产品价格', 'costPrice', 'Integer', 2, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:53:05', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162745937920, 'memo', 1440962162712383488, 'varchar', 'varchar(1024)', b'0', b'0', b'1', NULL, 6, '备注', 'memo', 'String', 0, b'0', b'0', b'0', NULL, NULL, NULL, '2021-09-23 16:52:06', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162750132224, 'create_user_id', 1440962162712383488, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 7, '创建者', 'createUserId', 'Long', 0, b'0', b'0', b'0', 21, NULL, NULL, '2021-09-23 16:52:20', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162754326528, 'create_time', 1440962162712383488, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 8, '创建时间', 'createTime', 'Date', 0, b'0', b'0', b'0', 20, NULL, NULL, '2021-09-23 16:52:23', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162762715136, 'update_user_id', 1440962162712383488, 'bigint', 'bigint(20)', b'0', b'0', b'0', NULL, 9, '更新者', 'updateUserId', 'Long', 0, b'0', b'0', b'0', 23, NULL, NULL, '2021-09-23 16:52:27', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162766909440, 'update_time', 1440962162712383488, 'datetime', 'datetime', b'0', b'0', b'0', NULL, 10, '最后更新时间', 'updateTime', 'Date', 0, b'0', b'0', b'0', 22, NULL, NULL, '2021-09-23 16:52:31', '2021-09-23 16:52:06'); +INSERT INTO `zz_online_column` VALUES (1440962162771103744, 'deleted_flag', 1440962162712383488, 'int', 'int(11)', b'0', b'0', b'0', '0', 11, '删除标记(1: 正常 -1: 已删除)', 'deletedFlag', 'Integer', 0, b'0', b'0', b'0', 31, NULL, NULL, '2021-09-23 16:52:34', '2021-09-23 16:52:06'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_column_rule +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_column_rule`; +CREATE TABLE `zz_online_column_rule` ( + `column_id` bigint(20) NOT NULL COMMENT '字段Id', + `rule_id` bigint(20) NOT NULL COMMENT '规则Id', + `prop_data_json` text COLLATE utf8mb4_bin COMMENT '规则属性数据', + PRIMARY KEY (`column_id`,`rule_id`) USING BTREE, + KEY `idx_rule_id` (`rule_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_column_rule +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_column_rule` VALUES (1440946127493926912, 2, '{\"message\":\"报销金额必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440946127493926912, 4, '{\"message\":\"报销金额必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440946261518716928, 2, '{\"message\":\"报销金额必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440946261518716928, 4, '{\"message\":\"报销金额必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440947089252028416, 2, '{\"message\":\"报销金额必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440947089252028416, 4, '{\"message\":\"报销金额必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440949025019793408, 2, '{\"message\":\"提成比例必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440949025019793408, 4, '{\"message\":\"提成比例必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440949181786099712, 6, '{\"message\":\"请输入正确的手机号码\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440949481989214208, 1, '{\"message\":\"产品数量必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440949481989214208, 4, '{\"message\":\"产品数量必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440949481993408512, 2, '{\"message\":\"产品总价必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440949481993408512, 4, '{\"message\":\"产品总价必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440949804128538624, 2, '{\"message\":\"交付商品数量必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440949804128538624, 4, '{\"message\":\"交付商品数量必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440952815332626432, 2, '{\"message\":\"提成比例必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440952815332626432, 4, '{\"message\":\"提成比例必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440953088927076352, 2, '{\"message\":\"产品数量必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440953088927076352, 4, '{\"message\":\"产品数量必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440953088935464960, 2, '{\"message\":\"产品总价必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440953088935464960, 4, '{\"message\":\"产品总价必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440953245705965568, 2, '{\"message\":\"交付数量必须大于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440953245705965568, 4, '{\"message\":\"交付数量必须大于0\",\"min\":0}'); +INSERT INTO `zz_online_column_rule` VALUES (1440962162741743616, 2, '{\"message\":\"产品价格不能小于0\"}'); +INSERT INTO `zz_online_column_rule` VALUES (1440962162741743616, 4, '{\"message\":\"产品价格不能小于0\",\"min\":0}'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_datasource +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_datasource`; +CREATE TABLE `zz_online_datasource` ( + `datasource_id` bigint(20) NOT NULL COMMENT '主键Id', + `datasource_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '数据源名称', + `variable_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '数据源变量名', + `dblink_id` bigint(20) NOT NULL COMMENT '数据库链接Id', + `master_table_id` bigint(20) NOT NULL COMMENT '主表Id', + `update_time` datetime NOT NULL COMMENT '更新时间', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`datasource_id`), + UNIQUE KEY `idx_variable_name` (`variable_name`) USING BTREE, + KEY `idx_master_table_id` (`master_table_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_datasource +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_datasource` VALUES (1440945228130291712, '请假申请', 'dsFlowLeave', 1, 1440945228079960064, '2021-09-23 15:44:49', '2021-09-23 15:44:49'); +INSERT INTO `zz_online_datasource` VALUES (1440946127531675648, '报销申请', 'dsFlowSubmit', 1, 1440946127460372480, '2021-09-23 15:48:23', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_datasource` VALUES (1440952815374569472, '合同审批', 'dsFlowContract', 1, 1440952815294877696, '2021-09-23 16:14:57', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_datasource` VALUES (1440958971190972416, '甲方管理', 'dsFirstParty', 1, 1440958971128057856, '2021-09-23 16:39:25', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_datasource` VALUES (1440961208344645633, '乙方管理', 'dsSecondParty', 1, 1440961208273342464, '2021-09-23 16:48:18', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_datasource` VALUES (1440962162771103745, '产品管理', 'dsProduct', 1, 1440962162712383488, '2021-09-23 16:52:06', '2021-09-23 16:52:06'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_datasource_relation +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_datasource_relation`; +CREATE TABLE `zz_online_datasource_relation` ( + `relation_id` bigint(20) NOT NULL COMMENT '主键Id', + `relation_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '关联名称', + `variable_name` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '变量名', + `datasource_id` bigint(20) NOT NULL COMMENT '主数据源Id', + `relation_type` int(11) NOT NULL COMMENT '关联类型', + `master_column_id` bigint(20) NOT NULL COMMENT '主表关联字段Id', + `slave_table_id` bigint(20) NOT NULL COMMENT '从表Id', + `slave_column_id` bigint(20) NOT NULL COMMENT '从表关联字段Id', + `cascade_delete` bit(1) NOT NULL COMMENT '删除主表的时候是否级联删除一对一和一对多的从表数据,多对多只是删除关联,不受到这个标记的影响。', + `left_join` bit(1) NOT NULL COMMENT '是否左连接', + `update_time` datetime NOT NULL COMMENT '更新时间', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`relation_id`) USING BTREE, + KEY `idx_datasource_id` (`datasource_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_datasource_relation +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_datasource_relation` VALUES (1440947089268805632, '报销详情', 'id_zz_test_flow_submit_detail_submit_idRelation', 1440946127531675648, 1, 1440946127468761088, 1440947089218473984, 1440947089231056896, b'1', b'1', '2021-09-23 15:52:12', '2021-09-23 15:52:12'); +INSERT INTO `zz_online_datasource_relation` VALUES (1440952921117167616, '甲方企业', 'first_party_id_zz_test_flow_first_party_first_party_idRelation', 1440952815374569472, 0, 1440952815307460608, 1440952921024892928, 1440952921037475840, b'0', b'1', '2021-09-23 16:15:23', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_datasource_relation` VALUES (1440952988536410112, '乙方企业', 'second_party_id_zz_test_flow_second_party_second_party_idRelation', 1440952815374569472, 0, 1440952815311654912, 1440952988389609472, 1440952988393803776, b'0', b'1', '2021-09-23 16:15:39', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_datasource_relation` VALUES (1440953088977408000, '合同详情', 'contract_id_zz_test_flow_contract_detail_contract_idRelation', 1440952815374569472, 1, 1440952815303266304, 1440953088901910528, 1440953088918687744, b'1', b'1', '2021-09-23 16:16:03', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_datasource_relation` VALUES (1440953170590175232, '付款详情', 'contract_id_zz_test_flow_pay_detail_contract_idRelation', 1440952815374569472, 1, 1440952815303266304, 1440953170514677760, 1440953170531454976, b'1', b'1', '2021-09-23 16:16:22', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_datasource_relation` VALUES (1440953245747908608, '交付详情', 'contract_id_zz_test_flow_delivery_detail_contract_idRelation', 1440952815374569472, 1, 1440952815303266304, 1440953245664022528, 1440953245676605440, b'1', b'1', '2021-09-23 16:16:40', '2021-09-23 16:16:40'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_datasource_table +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_datasource_table`; +CREATE TABLE `zz_online_datasource_table` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `datasource_id` bigint(20) NOT NULL COMMENT '数据源Id', + `relation_id` bigint(20) DEFAULT NULL COMMENT '数据源关联Id', + `table_id` bigint(20) NOT NULL COMMENT '数据表Id', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_relation_id` (`relation_id`) USING BTREE, + KEY `idx_datasource_id` (`datasource_id`) USING BTREE, + KEY `idx_table_id` (`table_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_datasource_table +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_datasource_table` VALUES (1440945228134486016, 1440945228130291712, NULL, 1440945228079960064); +INSERT INTO `zz_online_datasource_table` VALUES (1440946127535869952, 1440946127531675648, NULL, 1440946127460372480); +INSERT INTO `zz_online_datasource_table` VALUES (1440947089272999936, 1440946127531675648, 1440947089268805632, 1440947089218473984); +INSERT INTO `zz_online_datasource_table` VALUES (1440952815378763776, 1440952815374569472, NULL, 1440952815294877696); +INSERT INTO `zz_online_datasource_table` VALUES (1440952921121361920, 1440952815374569472, 1440952921117167616, 1440952921024892928); +INSERT INTO `zz_online_datasource_table` VALUES (1440952988540604416, 1440952815374569472, 1440952988536410112, 1440952988389609472); +INSERT INTO `zz_online_datasource_table` VALUES (1440953088981602304, 1440952815374569472, 1440953088977408000, 1440953088901910528); +INSERT INTO `zz_online_datasource_table` VALUES (1440953170594369536, 1440952815374569472, 1440953170590175232, 1440953170514677760); +INSERT INTO `zz_online_datasource_table` VALUES (1440953245752102912, 1440952815374569472, 1440953245747908608, 1440953245664022528); +INSERT INTO `zz_online_datasource_table` VALUES (1440958971195166720, 1440958971190972416, NULL, 1440958971128057856); +INSERT INTO `zz_online_datasource_table` VALUES (1440961208348839936, 1440961208344645633, NULL, 1440961208273342464); +INSERT INTO `zz_online_datasource_table` VALUES (1440962162775298048, 1440962162771103745, NULL, 1440962162712383488); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_dblink +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_dblink`; +CREATE TABLE `zz_online_dblink` ( + `dblink_id` bigint(20) NOT NULL COMMENT '主键Id', + `dblink_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '链接中文名称', + `variable_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '链接英文名称', + `dblink_desc` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '链接描述', + `dblink_config_constant` int(255) NOT NULL COMMENT '数据源配置常量', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`dblink_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_dblink +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_dblink` VALUES (1, 'first', 'first', '第一个链接', 0, '2021-09-23 00:00:00'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_dict +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_dict`; +CREATE TABLE `zz_online_dict` ( + `dict_id` bigint(20) NOT NULL COMMENT '主键Id', + `dict_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '字典名称', + `dict_type` int(11) NOT NULL COMMENT '字典类型', + `dblink_id` bigint(20) DEFAULT NULL COMMENT '数据库链接Id', + `table_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字典表名称', + `key_column_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字典表键字段名称', + `parent_key_column_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字典表父键字段名称', + `value_column_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字典值字段名称', + `deleted_column_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '逻辑删除字段', + `user_filter_column_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户过滤滤字段名称', + `dept_filter_column_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'dept_filter_column_name', + `tenant_filter_column_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '租户过滤字段名称', + `tree_flag` bit(1) NOT NULL COMMENT '是否树形标记', + `dict_list_url` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '获取字典列表数据的url', + `dict_ids_url` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '根据主键id批量获取字典数据的url', + `dict_data_json` text COLLATE utf8mb4_bin COMMENT '字典的JSON数据', + `update_time` datetime NOT NULL COMMENT '更新时间', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`dict_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_dict +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_dict` VALUES (1440943031288074240, '请假类型', 15, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, b'0', NULL, NULL, '{\"dictData\":[{\"type\":\"Integer\",\"id\":1,\"name\":\"年假\"},{\"type\":\"Integer\",\"id\":2,\"name\":\"事假\"},{\"type\":\"Integer\",\"id\":3,\"name\":\"婚假\"}],\"paramList\":[]}', '2021-09-23 15:36:05', '2021-09-23 15:36:05'); +INSERT INTO `zz_online_dict` VALUES (1440943168626364416, '报销类别', 15, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, b'0', NULL, NULL, '{\"dictData\":[{\"type\":\"Integer\",\"id\":1,\"name\":\"差旅报销\"},{\"type\":\"Integer\",\"id\":2,\"name\":\"日常报销\"}],\"paramList\":[]}', '2021-09-23 15:36:37', '2021-09-23 15:36:37'); +INSERT INTO `zz_online_dict` VALUES (1440943309924077568, '费用类别', 15, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, b'0', NULL, NULL, '{\"dictData\":[{\"type\":\"Integer\",\"id\":1,\"name\":\"食宿费用\"},{\"type\":\"Integer\",\"id\":2,\"name\":\"交通费用\"}],\"paramList\":[]}', '2021-09-23 15:37:11', '2021-09-23 15:37:11'); +INSERT INTO `zz_online_dict` VALUES (1440943452526219264, '甲方企业', 1, 1, 'zz_test_flow_first_party', 'first_party_id', NULL, 'company_name', 'deleted_flag', NULL, NULL, NULL, b'0', NULL, NULL, '{\"paramList\":[]}', '2021-09-23 15:37:45', '2021-09-23 15:37:45'); +INSERT INTO `zz_online_dict` VALUES (1440943955939168256, '乙方企业', 1, 1, 'zz_test_flow_second_party', 'second_party_id', NULL, 'company_name', 'deleted_flag', NULL, NULL, NULL, b'0', NULL, NULL, '{\"paramList\":[]}', '2021-09-23 15:39:45', '2021-09-23 15:39:45'); +INSERT INTO `zz_online_dict` VALUES (1440944049128214528, '商品字典', 1, 1, 'zz_test_flow_product', 'product_id', NULL, 'product_name', 'deleted_flag', NULL, NULL, NULL, b'0', NULL, NULL, '{\"paramList\":[]}', '2021-09-23 15:40:07', '2021-09-23 15:40:07'); +INSERT INTO `zz_online_dict` VALUES (1440944184381935616, '付款类型', 15, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, b'0', NULL, NULL, '{\"dictData\":[{\"type\":\"Integer\",\"id\":1,\"name\":\"预付款\"},{\"type\":\"Integer\",\"id\":2,\"name\":\"分期款\"},{\"type\":\"Integer\",\"id\":3,\"name\":\"项目尾款\"}],\"paramList\":[]}', '2021-09-23 15:40:40', '2021-09-23 15:40:40'); +INSERT INTO `zz_online_dict` VALUES (1440944300799037440, '合同类型', 15, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, b'0', NULL, NULL, '{\"dictData\":[{\"type\":\"Integer\",\"id\":1,\"name\":\"生产合同\"},{\"type\":\"Integer\",\"id\":2,\"name\":\"代工合同\"}],\"paramList\":[]}', '2021-09-23 15:41:07', '2021-09-23 15:41:07'); +INSERT INTO `zz_online_dict` VALUES (1440944417170001920, '用户字典', 1, 1, 'zz_sys_user', 'user_id', NULL, 'show_name', 'deleted_flag', NULL, NULL, NULL, b'0', NULL, NULL, '{\"paramList\":[]}', '2021-09-23 15:41:35', '2021-09-23 15:41:35'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_form +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_form`; +CREATE TABLE `zz_online_form` ( + `form_id` bigint(20) NOT NULL COMMENT '主键Id', + `page_id` bigint(20) NOT NULL COMMENT '页面id', + `form_code` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '表单编码', + `form_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '表单名称', + `form_kind` int(11) NOT NULL COMMENT '表单类别', + `form_type` int(11) NOT NULL COMMENT '表单类型', + `master_table_id` bigint(20) NOT NULL COMMENT '表单主表id', + `widget_json` mediumtext COLLATE utf8mb4_bin COMMENT '表单组件JSON', + `params_json` text COLLATE utf8mb4_bin COMMENT '表单参数JSON', + `update_time` datetime NOT NULL COMMENT '更新时间', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`form_id`) USING BTREE, + UNIQUE KEY `uk_page_id_form_code` (`page_id`,`form_code`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_form +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_form` VALUES (1440945411354267648, 1440945149889744896, 'formFlowLeave', '请假申请', 5, 10, 1440945228079960064, '{\"formConfig\":{\"formKind\":5,\"formType\":10,\"gutter\":20,\"labelWidth\":120,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":10,\"span\":24,\"placeholder\":\"\",\"id\":1632383156919,\"datasourceId\":\"1440945228130291712\",\"tableId\":\"1440945228079960064\",\"columnId\":\"1440945228105125888\",\"columnName\":\"leave_type\",\"showName\":\"请假类型\",\"variableName\":\"leaveType\",\"dictParamList\":[],\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":20,\"span\":24,\"placeholder\":\"\",\"type\":\"date\",\"format\":\"yyyy-MM-dd\",\"valueFormat\":\"yyyy-MM-dd\",\"readOnly\":false,\"disabled\":false,\"id\":1632383163405,\"datasourceId\":\"1440945228130291712\",\"tableId\":\"1440945228079960064\",\"columnId\":\"1440945228113514496\",\"columnName\":\"leave_begin_time\",\"showName\":\"开始时间\",\"variableName\":\"leaveBeginTime\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":20,\"span\":24,\"placeholder\":\"\",\"type\":\"date\",\"format\":\"yyyy-MM-dd\",\"valueFormat\":\"yyyy-MM-dd\",\"readOnly\":false,\"disabled\":false,\"id\":1632383171595,\"datasourceId\":\"1440945228130291712\",\"tableId\":\"1440945228079960064\",\"columnId\":\"1440945228117708800\",\"columnName\":\"leave_end_time\",\"showName\":\"结束时间\",\"variableName\":\"leaveEndTime\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632383177429,\"datasourceId\":\"1440945228130291712\",\"tableId\":\"1440945228079960064\",\"columnId\":\"1440945228100931584\",\"columnName\":\"leave_reason\",\"showName\":\"请假原因\",\"variableName\":\"leaveReason\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440945228088348672\",\"columnName\":\"id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 15:44:49\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"id\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440945228079960064\",\"updateTime\":\"2021-09-23 15:44:49\",\"userFilter\":false}]', '2021-09-23 15:46:50', '2021-09-23 15:45:32'); +INSERT INTO `zz_online_form` VALUES (1440945468593934336, 1440945149889744896, 'formOrderLeave', '请假工单', 5, 11, 1440945228079960064, '{\"formConfig\":{\"formKind\":5,\"formType\":11,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}],\"tableWidget\":{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440945228092542976\",\"tableId\":\"1440945228079960064\",\"showName\":\"请假用户\",\"showOrder\":1,\"sortable\":false},{\"columnId\":\"1440945228105125888\",\"tableId\":\"1440945228079960064\",\"showName\":\"请假类型\",\"showOrder\":2,\"sortable\":false},{\"columnId\":\"1440945228113514496\",\"tableId\":\"1440945228079960064\",\"showName\":\"开始时间\",\"showOrder\":3,\"sortable\":false},{\"columnId\":\"1440945228117708800\",\"tableId\":\"1440945228079960064\",\"showName\":\"结束时间\",\"showOrder\":4,\"sortable\":false}],\"operationList\":[],\"queryParamList\":[],\"tableId\":\"1440945228079960064\",\"variableName\":\"formOrderLeave\",\"showName\":\"请假工单\",\"hasError\":false,\"datasourceId\":\"1440945228130291712\"}},\"widgetList\":[]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440945228088348672\",\"columnName\":\"id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 15:44:49\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"id\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440945228079960064\",\"updateTime\":\"2021-09-23 15:44:49\",\"userFilter\":false}]', '2021-09-23 17:56:51', '2021-09-23 15:45:46'); +INSERT INTO `zz_online_form` VALUES (1440947675041107968, 1440946020174270464, 'formFlowSubmit', '报销申请', 5, 10, 1440946127460372480, '{\"formConfig\":{\"formKind\":5,\"formType\":10,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632383719604,\"datasourceId\":\"1440946127531675648\",\"tableId\":\"1440946127460372480\",\"columnId\":\"1440946127481344000\",\"columnName\":\"submit_name\",\"showName\":\"报销名称\",\"variableName\":\"submitName\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632383720428,\"datasourceId\":\"1440946127531675648\",\"tableId\":\"1440946127460372480\",\"columnId\":\"1440946127489732608\",\"columnName\":\"submit_kind\",\"showName\":\"报销类别\",\"variableName\":\"submitKind\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":3,\"span\":12,\"defaultValue\":0,\"min\":0,\"step\":1,\"precision\":2,\"controlVisible\":1,\"controlPosition\":0,\"readOnly\":false,\"disabled\":false,\"id\":1632383724574,\"datasourceId\":\"1440946127531675648\",\"tableId\":\"1440946127460372480\",\"columnId\":\"1440946127493926912\",\"columnName\":\"total_amount\",\"showName\":\"报销金额\",\"variableName\":\"totalAmount\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632383744379,\"datasourceId\":\"1440946127531675648\",\"tableId\":\"1440946127460372480\",\"columnId\":\"1440946127498121216\",\"columnName\":\"description\",\"showName\":\"报销描述\",\"variableName\":\"description\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632383752809,\"datasourceId\":\"1440946127531675648\",\"tableId\":\"1440946127460372480\",\"columnId\":\"1440946127506509824\",\"columnName\":\"memo\",\"showName\":\"备注\",\"variableName\":\"memo\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440947089235251200\",\"tableId\":\"1440947089218473984\",\"showName\":\"费用类型\",\"showOrder\":1,\"sortable\":false,\"relationId\":\"1440947089268805632\",\"dataFieldName\":null},{\"columnId\":\"1440947089252028416\",\"tableId\":\"1440947089218473984\",\"showName\":\"金额\",\"showOrder\":2,\"sortable\":false,\"relationId\":\"1440947089268805632\",\"dataFieldName\":null},{\"columnId\":\"1440947089260417024\",\"tableId\":\"1440947089218473984\",\"showName\":\"报销凭证\",\"showOrder\":3,\"sortable\":false,\"relationId\":\"1440947089268805632\",\"dataFieldName\":null},{\"columnId\":\"1440947089264611328\",\"tableId\":\"1440947089218473984\",\"showName\":\"费用描述\",\"showOrder\":4,\"sortable\":false,\"relationId\":\"1440947089268805632\",\"dataFieldName\":null}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":true,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false,\"formId\":\"1440947791881834496\"},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\",\"formId\":\"1440947791881834496\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[{\"tableId\":\"1440947089218473984\",\"columnId\":\"1440947089231056896\",\"paramValueType\":0,\"paramValue\":\"id\"}],\"id\":1632383762135,\"relationId\":\"1440947089268805632\",\"tableId\":\"1440947089218473984\",\"columnName\":\"id_zz_test_flow_submit_detail_submit_idRelation\",\"showName\":\"报销详情\",\"variableName\":\"id_zz_test_flow_submit_detail_submit_idRelation\",\"dictParamList\":null,\"hasError\":false}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440946127468761088\",\"columnName\":\"id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 15:48:23\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"id\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440946127460372480\",\"updateTime\":\"2021-09-23 15:48:23\",\"userFilter\":false}]', '2021-09-23 15:58:07', '2021-09-23 15:54:32'); +INSERT INTO `zz_online_form` VALUES (1440947791881834496, 1440946020174270464, 'formEditFlowSubmitDetail', '编辑报销详情', 1, 5, 1440947089218473984, '{\"formConfig\":{\"formKind\":1,\"formType\":5,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":10,\"span\":24,\"placeholder\":\"\",\"id\":1632383900080,\"datasourceId\":\"1440946127531675648\",\"relationId\":\"1440947089268805632\",\"tableId\":\"1440947089218473984\",\"columnId\":\"1440947089235251200\",\"columnName\":\"expense_type\",\"showName\":\"费用类型\",\"variableName\":\"expenseType\",\"dictParamList\":[],\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":20,\"span\":24,\"placeholder\":\"\",\"type\":\"date\",\"format\":\"yyyy-MM-dd\",\"valueFormat\":\"yyyy-MM-dd\",\"readOnly\":false,\"disabled\":false,\"id\":1632383900902,\"datasourceId\":\"1440946127531675648\",\"relationId\":\"1440947089268805632\",\"tableId\":\"1440947089218473984\",\"columnId\":\"1440947089243639808\",\"columnName\":\"expense_time\",\"showName\":\"发生日期\",\"variableName\":\"expenseTime\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":3,\"span\":24,\"defaultValue\":0,\"min\":0,\"step\":1,\"precision\":2,\"controlVisible\":1,\"controlPosition\":0,\"readOnly\":false,\"disabled\":false,\"id\":1632383906027,\"datasourceId\":\"1440946127531675648\",\"relationId\":\"1440947089268805632\",\"tableId\":\"1440947089218473984\",\"columnId\":\"1440947089252028416\",\"columnName\":\"amount\",\"showName\":\"金额\",\"variableName\":\"amount\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":4,\"readOnly\":false,\"disabled\":false,\"id\":1632383907850,\"datasourceId\":\"1440946127531675648\",\"relationId\":\"1440947089268805632\",\"tableId\":\"1440947089218473984\",\"columnId\":\"1440947089264611328\",\"columnName\":\"description\",\"showName\":\"费用描述\",\"variableName\":\"description\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":31,\"span\":24,\"isImage\":true,\"fileFieldName\":\"uploadFile\",\"actionUrl\":\"/admin/flow/flowOnlineOperation/upload\",\"downloadUrl\":\"/admin/flow/flowOnlineOperation/download\",\"id\":1632383908452,\"datasourceId\":\"1440946127531675648\",\"relationId\":\"1440947089268805632\",\"tableId\":\"1440947089218473984\",\"columnId\":\"1440947089260417024\",\"columnName\":\"image_url\",\"showName\":\"报销凭证\",\"variableName\":\"imageUrl\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440947089222668288\",\"columnName\":\"id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 15:52:12\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"id\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440947089218473984\",\"updateTime\":\"2021-09-23 15:52:12\",\"userFilter\":false}]', '2021-09-23 15:59:08', '2021-09-23 15:55:00'); +INSERT INTO `zz_online_form` VALUES (1440954920348946432, 1440952710487609344, 'formFlowContract', '合同审批', 5, 10, 1440952815294877696, '{\"formConfig\":{\"formKind\":5,\"formType\":10,\"gutter\":20,\"labelWidth\":120,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"contract_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632385543720,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815307460608\",\"columnName\":\"first_party_id\",\"showName\":\"甲方企业\",\"variableName\":\"firstPartyId\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632385544316,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815311654912\",\"columnName\":\"second_party_id\",\"showName\":\"乙方企业\",\"variableName\":\"secondPartyId\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632385545012,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815315849216\",\"columnName\":\"contract_type\",\"showName\":\"合同类型\",\"variableName\":\"contractType\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632385545729,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815324237824\",\"columnName\":\"sales_id\",\"showName\":\"业务员\",\"variableName\":\"salesId\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":20,\"span\":12,\"placeholder\":\"\",\"type\":\"date\",\"format\":\"yyyy-MM-dd\",\"valueFormat\":\"yyyy-MM-dd\",\"readOnly\":false,\"disabled\":false,\"id\":1632385550074,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815320043520\",\"columnName\":\"due_date\",\"showName\":\"到期日期\",\"variableName\":\"dueDate\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":3,\"span\":12,\"defaultValue\":0,\"min\":0,\"step\":1,\"precision\":2,\"controlVisible\":1,\"controlPosition\":0,\"readOnly\":false,\"disabled\":false,\"id\":1632385552142,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815332626432\",\"columnName\":\"commission_rate\",\"showName\":\"提成比例\",\"variableName\":\"commissionRate\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":31,\"span\":12,\"isImage\":false,\"fileFieldName\":\"uploadFile\",\"actionUrl\":\"/admin/flow/flowOnlineOperation/upload\",\"downloadUrl\":\"/admin/flow/flowOnlineOperation/download\",\"id\":1632385586521,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815336820736\",\"columnName\":\"attachment\",\"showName\":\"合同附件\",\"variableName\":\"attachment\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":31,\"span\":12,\"isImage\":false,\"fileFieldName\":\"uploadFile\",\"actionUrl\":\"/admin/flow/flowOnlineOperation/upload\",\"downloadUrl\":\"/admin/flow/flowOnlineOperation/download\",\"id\":1632385587136,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815341015040\",\"columnName\":\"security_attachment\",\"showName\":\"保密协议\",\"variableName\":\"securityAttachment\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":31,\"span\":12,\"isImage\":false,\"fileFieldName\":\"uploadFile\",\"actionUrl\":\"/admin/flow/flowOnlineOperation/upload\",\"downloadUrl\":\"/admin/flow/flowOnlineOperation/download\",\"id\":1632385587746,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815345209344\",\"columnName\":\"intellectual_property_attachment\",\"showName\":\"知识产权协议\",\"variableName\":\"intellectualPropertyAttachment\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":31,\"span\":12,\"isImage\":false,\"fileFieldName\":\"uploadFile\",\"actionUrl\":\"/admin/flow/flowOnlineOperation/upload\",\"downloadUrl\":\"/admin/flow/flowOnlineOperation/download\",\"id\":1632385589128,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815349403648\",\"columnName\":\"other_attachment\",\"showName\":\"其他附件\",\"variableName\":\"otherAttachment\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":1,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440953088922882048\",\"tableId\":\"1440953088901910528\",\"showName\":\"合同产品\",\"showOrder\":1,\"sortable\":false,\"relationId\":\"1440953088977408000\",\"dataFieldName\":null},{\"columnId\":\"1440953088927076352\",\"tableId\":\"1440953088901910528\",\"showName\":\"产品数量\",\"showOrder\":2,\"sortable\":false,\"relationId\":\"1440953088977408000\",\"dataFieldName\":null},{\"columnId\":\"1440953088935464960\",\"tableId\":\"1440953088901910528\",\"showName\":\"产品总价\",\"showOrder\":3,\"sortable\":false,\"relationId\":\"1440953088977408000\",\"dataFieldName\":null},{\"columnId\":\"1440953088939659264\",\"tableId\":\"1440953088901910528\",\"showName\":\"备注\",\"showOrder\":4,\"sortable\":false,\"relationId\":\"1440953088977408000\",\"dataFieldName\":null}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":true,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false,\"formId\":\"1440955295755931648\"},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\",\"formId\":\"1440955295755931648\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[{\"tableId\":\"1440953088901910528\",\"columnId\":\"1440953088918687744\",\"paramValueType\":1,\"paramValue\":\"1440952815303266304\"}],\"id\":1632385613866,\"relationId\":\"1440953088977408000\",\"tableId\":\"1440953088901910528\",\"columnName\":\"contract_id_zz_test_flow_contract_detail_contract_idRelation\",\"showName\":\"合同详情\",\"variableName\":\"contract_id_zz_test_flow_contract_detail_contract_idRelation\",\"dictParamList\":null,\"hasError\":false},{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":1,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440953245684994048\",\"tableId\":\"1440953245664022528\",\"showName\":\"交付日期\",\"showOrder\":1,\"sortable\":false,\"relationId\":\"1440953245747908608\",\"dataFieldName\":null},{\"columnId\":\"1440953245697576960\",\"tableId\":\"1440953245664022528\",\"showName\":\"交付产品\",\"showOrder\":2,\"sortable\":false,\"relationId\":\"1440953245747908608\",\"dataFieldName\":null},{\"columnId\":\"1440953245705965568\",\"tableId\":\"1440953245664022528\",\"showName\":\"交付数量\",\"showOrder\":3,\"sortable\":false,\"relationId\":\"1440953245747908608\",\"dataFieldName\":null},{\"columnId\":\"1440953245718548480\",\"tableId\":\"1440953245664022528\",\"showName\":\"备注\",\"showOrder\":4,\"sortable\":false,\"relationId\":\"1440953245747908608\",\"dataFieldName\":null}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":true,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false,\"formId\":\"1440955424638504960\"},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\",\"formId\":\"1440955424638504960\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[{\"tableId\":\"1440953245664022528\",\"columnId\":\"1440953245676605440\",\"paramValueType\":1,\"paramValue\":\"1440952815303266304\"}],\"id\":1632385617093,\"relationId\":\"1440953245747908608\",\"tableId\":\"1440953245664022528\",\"columnName\":\"contract_id_zz_test_flow_delivery_detail_contract_idRelation\",\"showName\":\"交付详情\",\"variableName\":\"contract_id_zz_test_flow_delivery_detail_contract_idRelation\",\"dictParamList\":null,\"hasError\":false},{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440953170535649280\",\"tableId\":\"1440953170514677760\",\"showName\":\"付款日期\",\"showOrder\":1,\"sortable\":false,\"relationId\":\"1440953170590175232\",\"dataFieldName\":null},{\"columnId\":\"1440953170539843584\",\"tableId\":\"1440953170514677760\",\"showName\":\"付款类型\",\"showOrder\":2,\"sortable\":false,\"relationId\":\"1440953170590175232\",\"dataFieldName\":null},{\"columnId\":\"1440953170548232192\",\"tableId\":\"1440953170514677760\",\"showName\":\"付款比例(%)\",\"showOrder\":3,\"sortable\":false,\"relationId\":\"1440953170590175232\",\"dataFieldName\":null},{\"columnId\":\"1440953170552426496\",\"tableId\":\"1440953170514677760\",\"showName\":\"备注\",\"showOrder\":4,\"sortable\":false,\"relationId\":\"1440953170590175232\",\"dataFieldName\":null}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":true,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false,\"formId\":\"1440955361006718976\"},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\",\"formId\":\"1440955361006718976\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[{\"tableId\":\"1440953170514677760\",\"columnId\":\"1440953170531454976\",\"paramValueType\":1,\"paramValue\":\"1440952815303266304\"}],\"id\":1632385617965,\"relationId\":\"1440953170590175232\",\"tableId\":\"1440953170514677760\",\"columnName\":\"contract_id_zz_test_flow_pay_detail_contract_idRelation\",\"showName\":\"付款详情\",\"variableName\":\"contract_id_zz_test_flow_pay_detail_contract_idRelation\",\"dictParamList\":null,\"hasError\":false}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440952815303266304\",\"columnName\":\"contract_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:14:57\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"contractId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440952815294877696\",\"updateTime\":\"2021-09-23 16:14:57\",\"userFilter\":false}]', '2021-09-24 09:36:35', '2021-09-23 16:23:19'); +INSERT INTO `zz_online_form` VALUES (1440955001093492736, 1440952710487609344, 'formFlowContractLaw', '法务信息', 5, 10, 1440952815294877696, '{\"formConfig\":{\"formKind\":5,\"formType\":10,\"gutter\":20,\"labelWidth\":120,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"contract_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":2,\"widgetType\":40,\"span\":24,\"position\":\"center\",\"id\":1632385804854,\"columnName\":\"divider\",\"showName\":\"甲方信息\",\"variableName\":\"divider\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632385840611,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440952921117167616\",\"tableId\":\"1440952921024892928\",\"columnId\":\"1440952921041670144\",\"columnName\":\"company_name\",\"showName\":\"公司名称\",\"variableName\":\"companyName\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632385850871,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440952921117167616\",\"tableId\":\"1440952921024892928\",\"columnId\":\"1440952921066835968\",\"columnName\":\"contact_info\",\"showName\":\"联系方式\",\"variableName\":\"contactInfo\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632385854474,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440952921117167616\",\"tableId\":\"1440952921024892928\",\"columnId\":\"1440952921058447360\",\"columnName\":\"registry_address\",\"showName\":\"注册地址\",\"variableName\":\"registryAddress\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632385855796,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440952921117167616\",\"tableId\":\"1440952921024892928\",\"columnId\":\"1440952921079418880\",\"columnName\":\"business_scope\",\"showName\":\"经营范围\",\"variableName\":\"businessScope\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":2,\"widgetType\":40,\"span\":24,\"position\":\"center\",\"id\":1632385870258,\"columnName\":\"divider\",\"showName\":\"乙方信息\",\"variableName\":\"divider1\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632385881057,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440952988536410112\",\"tableId\":\"1440952988389609472\",\"columnId\":\"1440952988406386688\",\"columnName\":\"company_name\",\"showName\":\"公司名称\",\"variableName\":\"companyName1\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632385882845,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440952988536410112\",\"tableId\":\"1440952988389609472\",\"columnId\":\"1440952988486078464\",\"columnName\":\"contact_info\",\"showName\":\"联系方式\",\"variableName\":\"contactInfo1\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632385886068,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440952988536410112\",\"tableId\":\"1440952988389609472\",\"columnId\":\"1440952988473495552\",\"columnName\":\"registry_address\",\"showName\":\"注册地址\",\"variableName\":\"registryAddress1\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632385886979,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440952988536410112\",\"tableId\":\"1440952988389609472\",\"columnId\":\"1440952988494467072\",\"columnName\":\"business_scope\",\"showName\":\"经营范围\",\"variableName\":\"businessScope1\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":2,\"widgetType\":40,\"span\":24,\"position\":\"center\",\"id\":1632385900924,\"columnName\":\"divider\",\"showName\":\"合同信息\",\"variableName\":\"divider2\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632385921859,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815315849216\",\"columnName\":\"contract_type\",\"showName\":\"合同类型\",\"variableName\":\"contractType\",\"readOnly\":true,\"dictParamList\":[],\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":20,\"span\":12,\"placeholder\":\"\",\"type\":\"date\",\"format\":\"yyyy-MM-dd\",\"valueFormat\":\"yyyy-MM-dd\",\"readOnly\":true,\"disabled\":false,\"id\":1632385943091,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815320043520\",\"columnName\":\"due_date\",\"showName\":\"到期日期\",\"variableName\":\"dueDate\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":31,\"span\":12,\"isImage\":false,\"fileFieldName\":\"uploadFile\",\"actionUrl\":\"/admin/flow/flowOnlineOperation/upload\",\"downloadUrl\":\"/admin/flow/flowOnlineOperation/download\",\"id\":1632385951296,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815336820736\",\"columnName\":\"attachment\",\"showName\":\"合同附件\",\"variableName\":\"attachment\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":31,\"span\":12,\"isImage\":false,\"fileFieldName\":\"uploadFile\",\"actionUrl\":\"/admin/flow/flowOnlineOperation/upload\",\"downloadUrl\":\"/admin/flow/flowOnlineOperation/download\",\"id\":1632385954049,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815341015040\",\"columnName\":\"security_attachment\",\"showName\":\"保密协议\",\"variableName\":\"securityAttachment\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":31,\"span\":12,\"isImage\":false,\"fileFieldName\":\"uploadFile\",\"actionUrl\":\"/admin/flow/flowOnlineOperation/upload\",\"downloadUrl\":\"/admin/flow/flowOnlineOperation/download\",\"id\":1632385954722,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815345209344\",\"columnName\":\"intellectual_property_attachment\",\"showName\":\"知识产权协议\",\"variableName\":\"intellectualPropertyAttachment\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":31,\"span\":12,\"isImage\":false,\"fileFieldName\":\"uploadFile\",\"actionUrl\":\"/admin/flow/flowOnlineOperation/upload\",\"downloadUrl\":\"/admin/flow/flowOnlineOperation/download\",\"id\":1632385955926,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815349403648\",\"columnName\":\"other_attachment\",\"showName\":\"其他附件\",\"variableName\":\"otherAttachment\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440952815303266304\",\"columnName\":\"contract_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:14:57\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"contractId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440952815294877696\",\"updateTime\":\"2021-09-23 16:14:57\",\"userFilter\":false}]', '2021-09-23 16:32:45', '2021-09-23 16:23:39'); +INSERT INTO `zz_online_form` VALUES (1440955127790833664, 1440952710487609344, 'formFlowContractPay', '付款详情', 5, 10, 1440952815294877696, '{\"formConfig\":{\"formKind\":5,\"formType\":10,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"contract_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632385985050,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815307460608\",\"columnName\":\"first_party_id\",\"showName\":\"甲方企业\",\"variableName\":\"firstPartyId\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632385985722,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815311654912\",\"columnName\":\"second_party_id\",\"showName\":\"乙方企业\",\"variableName\":\"secondPartyId\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632385986562,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815315849216\",\"columnName\":\"contract_type\",\"showName\":\"合同类型\",\"variableName\":\"contractType\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632385987354,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815324237824\",\"columnName\":\"sales_id\",\"showName\":\"业务员\",\"variableName\":\"salesId\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":20,\"span\":12,\"placeholder\":\"\",\"type\":\"date\",\"format\":\"yyyy-MM-dd\",\"valueFormat\":\"yyyy-MM-dd\",\"readOnly\":false,\"disabled\":false,\"id\":1632385998420,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815320043520\",\"columnName\":\"due_date\",\"showName\":\"到期日期\",\"variableName\":\"dueDate\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440953170535649280\",\"tableId\":\"1440953170514677760\",\"showName\":\"付款日期\",\"showOrder\":1,\"sortable\":false,\"relationId\":\"1440953170590175232\",\"dataFieldName\":null},{\"columnId\":\"1440953170539843584\",\"tableId\":\"1440953170514677760\",\"showName\":\"付款类型\",\"showOrder\":2,\"sortable\":false,\"relationId\":\"1440953170590175232\",\"dataFieldName\":null},{\"columnId\":\"1440953170548232192\",\"tableId\":\"1440953170514677760\",\"showName\":\"付款比例(%)\",\"showOrder\":3,\"sortable\":false,\"relationId\":\"1440953170590175232\",\"dataFieldName\":null},{\"columnId\":\"1440953170552426496\",\"tableId\":\"1440953170514677760\",\"showName\":\"备注\",\"showOrder\":4,\"sortable\":false,\"relationId\":\"1440953170590175232\",\"dataFieldName\":null}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":false,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":false,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":false,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[{\"tableId\":\"1440953170514677760\",\"columnId\":\"1440953170531454976\",\"paramValueType\":1,\"paramValue\":\"1440952815303266304\"}],\"id\":1632386005350,\"relationId\":\"1440953170590175232\",\"tableId\":\"1440953170514677760\",\"columnName\":\"contract_id_zz_test_flow_pay_detail_contract_idRelation\",\"showName\":\"付款详情\",\"variableName\":\"contract_id_zz_test_flow_pay_detail_contract_idRelation\",\"dictParamList\":null,\"hasError\":false}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440952815303266304\",\"columnName\":\"contract_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:14:57\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"contractId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440952815294877696\",\"updateTime\":\"2021-09-23 16:14:57\",\"userFilter\":false}]', '2021-09-23 16:45:43', '2021-09-23 16:24:09'); +INSERT INTO `zz_online_form` VALUES (1440955194991972352, 1440952710487609344, 'formFlowContractDetail', '合同详情', 5, 10, 1440952815294877696, '{\"formConfig\":{\"formKind\":5,\"formType\":10,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"contract_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632386076617,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815307460608\",\"columnName\":\"first_party_id\",\"showName\":\"甲方企业\",\"variableName\":\"firstPartyId\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632386077249,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815311654912\",\"columnName\":\"second_party_id\",\"showName\":\"乙方企业\",\"variableName\":\"secondPartyId\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632386077906,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815315849216\",\"columnName\":\"contract_type\",\"showName\":\"合同类型\",\"variableName\":\"contractType\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":12,\"placeholder\":\"\",\"id\":1632386078973,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815324237824\",\"columnName\":\"sales_id\",\"showName\":\"业务员\",\"variableName\":\"salesId\",\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":20,\"span\":12,\"placeholder\":\"\",\"type\":\"date\",\"format\":\"yyyy-MM-dd\",\"valueFormat\":\"yyyy-MM-dd\",\"readOnly\":false,\"disabled\":false,\"id\":1632386079478,\"datasourceId\":\"1440952815374569472\",\"tableId\":\"1440952815294877696\",\"columnId\":\"1440952815320043520\",\"columnName\":\"due_date\",\"showName\":\"到期日期\",\"variableName\":\"dueDate\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440953088922882048\",\"tableId\":\"1440953088901910528\",\"showName\":\"合同产品\",\"showOrder\":1,\"sortable\":false,\"relationId\":\"1440953088977408000\",\"dataFieldName\":null},{\"columnId\":\"1440953088927076352\",\"tableId\":\"1440953088901910528\",\"showName\":\"产品数量\",\"showOrder\":2,\"sortable\":false,\"relationId\":\"1440953088977408000\",\"dataFieldName\":null},{\"columnId\":\"1440953088935464960\",\"tableId\":\"1440953088901910528\",\"showName\":\"产品总价\",\"showOrder\":3,\"sortable\":false,\"relationId\":\"1440953088977408000\",\"dataFieldName\":null},{\"columnId\":\"1440953088939659264\",\"tableId\":\"1440953088901910528\",\"showName\":\"备注\",\"showOrder\":4,\"sortable\":false,\"relationId\":\"1440953088977408000\",\"dataFieldName\":null}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":false,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":false,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":false,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[{\"tableId\":\"1440953088901910528\",\"columnId\":\"1440953088918687744\",\"paramValueType\":1,\"paramValue\":\"1440952815303266304\"}],\"id\":1632386082967,\"relationId\":\"1440953088977408000\",\"tableId\":\"1440953088901910528\",\"columnName\":\"contract_id_zz_test_flow_contract_detail_contract_idRelation\",\"showName\":\"合同详情\",\"variableName\":\"contract_id_zz_test_flow_contract_detail_contract_idRelation\",\"dictParamList\":null,\"hasError\":false},{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440953245684994048\",\"tableId\":\"1440953245664022528\",\"showName\":\"交付日期\",\"showOrder\":1,\"sortable\":false,\"relationId\":\"1440953245747908608\",\"dataFieldName\":null},{\"columnId\":\"1440953245697576960\",\"tableId\":\"1440953245664022528\",\"showName\":\"交付产品\",\"showOrder\":2,\"sortable\":false,\"relationId\":\"1440953245747908608\",\"dataFieldName\":null},{\"columnId\":\"1440953245705965568\",\"tableId\":\"1440953245664022528\",\"showName\":\"交付数量\",\"showOrder\":3,\"sortable\":false,\"relationId\":\"1440953245747908608\",\"dataFieldName\":null},{\"columnId\":\"1440953245718548480\",\"tableId\":\"1440953245664022528\",\"showName\":\"备注\",\"showOrder\":4,\"sortable\":false,\"relationId\":\"1440953245747908608\",\"dataFieldName\":null}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":false,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":false,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":false,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[{\"tableId\":\"1440953245664022528\",\"columnId\":\"1440953245676605440\",\"paramValueType\":1,\"paramValue\":\"1440952815303266304\"}],\"id\":1632386085719,\"relationId\":\"1440953245747908608\",\"tableId\":\"1440953245664022528\",\"columnName\":\"contract_id_zz_test_flow_delivery_detail_contract_idRelation\",\"showName\":\"交付详情\",\"variableName\":\"contract_id_zz_test_flow_delivery_detail_contract_idRelation\",\"dictParamList\":null,\"hasError\":false}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440952815303266304\",\"columnName\":\"contract_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:14:57\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"contractId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440952815294877696\",\"updateTime\":\"2021-09-23 16:14:57\",\"userFilter\":false}]', '2021-09-23 16:46:06', '2021-09-23 16:24:25'); +INSERT INTO `zz_online_form` VALUES (1440955295755931648, 1440952710487609344, 'formEditProduct', '编辑商品信息', 1, 5, 1440953088901910528, '{\"formConfig\":{\"formKind\":1,\"formType\":5,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"contract_detail_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":10,\"span\":24,\"placeholder\":\"\",\"id\":1632386167477,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953088977408000\",\"tableId\":\"1440953088901910528\",\"columnId\":\"1440953088922882048\",\"columnName\":\"product_id\",\"showName\":\"合同产品\",\"variableName\":\"productId\",\"dictParamList\":[],\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":3,\"span\":24,\"defaultValue\":0,\"min\":0,\"step\":1,\"precision\":0,\"controlVisible\":1,\"controlPosition\":0,\"readOnly\":false,\"disabled\":false,\"id\":1632386168097,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953088977408000\",\"tableId\":\"1440953088901910528\",\"columnId\":\"1440953088927076352\",\"columnName\":\"total_count\",\"showName\":\"产品数量\",\"variableName\":\"totalCount\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":3,\"span\":24,\"defaultValue\":0,\"min\":0,\"step\":1,\"precision\":2,\"controlVisible\":1,\"controlPosition\":0,\"readOnly\":false,\"disabled\":false,\"id\":1632386168937,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953088977408000\",\"tableId\":\"1440953088901910528\",\"columnId\":\"1440953088935464960\",\"columnName\":\"total_amount\",\"showName\":\"产品总价\",\"variableName\":\"totalAmount\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":4,\"readOnly\":false,\"disabled\":false,\"id\":1632386170038,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953088977408000\",\"tableId\":\"1440953088901910528\",\"columnId\":\"1440953088939659264\",\"columnName\":\"meno\",\"showName\":\"备注\",\"variableName\":\"meno\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440953088910299136\",\"columnName\":\"contract_detail_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:16:03\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"contractDetailId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440953088901910528\",\"updateTime\":\"2021-09-23 16:16:03\",\"userFilter\":false}]', '2021-09-23 16:40:38', '2021-09-23 16:24:49'); +INSERT INTO `zz_online_form` VALUES (1440955361006718976, 1440952710487609344, 'formEditPay', '编辑付款信息', 1, 5, 1440953170514677760, '{\"formConfig\":{\"formKind\":1,\"formType\":5,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"pay_detail_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":10,\"span\":24,\"placeholder\":\"\",\"id\":1632386206508,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953170590175232\",\"tableId\":\"1440953170514677760\",\"columnId\":\"1440953170539843584\",\"columnName\":\"pay_type\",\"showName\":\"付款类型\",\"variableName\":\"payType\",\"dictParamList\":[],\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":20,\"span\":24,\"placeholder\":\"\",\"type\":\"date\",\"format\":\"yyyy-MM-dd\",\"valueFormat\":\"yyyy-MM-dd\",\"readOnly\":false,\"disabled\":false,\"id\":1632386207312,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953170590175232\",\"tableId\":\"1440953170514677760\",\"columnId\":\"1440953170535649280\",\"columnName\":\"pay_date\",\"showName\":\"付款日期\",\"variableName\":\"payDate\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":3,\"span\":24,\"defaultValue\":0,\"min\":0,\"max\":100,\"step\":1,\"precision\":2,\"controlVisible\":1,\"controlPosition\":0,\"readOnly\":false,\"disabled\":false,\"id\":1632386208455,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953170590175232\",\"tableId\":\"1440953170514677760\",\"columnId\":\"1440953170548232192\",\"columnName\":\"percentage\",\"showName\":\"百分比\",\"variableName\":\"percentage\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386209209,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953170590175232\",\"tableId\":\"1440953170514677760\",\"columnId\":\"1440953170552426496\",\"columnName\":\"memo\",\"showName\":\"备注\",\"variableName\":\"memo\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440953170518872064\",\"columnName\":\"pay_detail_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:16:22\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"payDetailId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440953170514677760\",\"updateTime\":\"2021-09-23 16:16:22\",\"userFilter\":false}]', '2021-09-23 16:40:43', '2021-09-23 16:25:04'); +INSERT INTO `zz_online_form` VALUES (1440955424638504960, 1440952710487609344, 'formEditDelivery', '编辑交付信息', 1, 5, 1440953245664022528, '{\"formConfig\":{\"formKind\":1,\"formType\":5,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"delivery_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":20,\"span\":24,\"placeholder\":\"\",\"type\":\"date\",\"format\":\"yyyy-MM-dd\",\"valueFormat\":\"yyyy-MM-dd\",\"readOnly\":false,\"disabled\":false,\"id\":1632386237515,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953245747908608\",\"tableId\":\"1440953245664022528\",\"columnId\":\"1440953245684994048\",\"columnName\":\"delivery_date\",\"showName\":\"交付日期\",\"variableName\":\"deliveryDate\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":10,\"span\":24,\"placeholder\":\"\",\"id\":1632386238087,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953245747908608\",\"tableId\":\"1440953245664022528\",\"columnId\":\"1440953245697576960\",\"columnName\":\"product_id\",\"showName\":\"交付产品\",\"variableName\":\"productId\",\"dictParamList\":[],\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":3,\"span\":24,\"defaultValue\":0,\"min\":0,\"step\":1,\"precision\":0,\"controlVisible\":1,\"controlPosition\":0,\"readOnly\":false,\"disabled\":false,\"id\":1632386238799,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953245747908608\",\"tableId\":\"1440953245664022528\",\"columnId\":\"1440953245705965568\",\"columnName\":\"total_count\",\"showName\":\"交付数量\",\"variableName\":\"totalCount\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":4,\"readOnly\":false,\"disabled\":false,\"id\":1632386239345,\"datasourceId\":\"1440952815374569472\",\"relationId\":\"1440953245747908608\",\"tableId\":\"1440953245664022528\",\"columnId\":\"1440953245718548480\",\"columnName\":\"memo\",\"showName\":\"备注\",\"variableName\":\"memo\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440953245668216832\",\"columnName\":\"delivery_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:16:40\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"deliveryId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440953245664022528\",\"updateTime\":\"2021-09-23 16:16:40\",\"userFilter\":false}]', '2021-09-23 16:40:49', '2021-09-23 16:25:20'); +INSERT INTO `zz_online_form` VALUES (1440955483438452736, 1440952710487609344, 'formOrderContract', '合同工单', 5, 11, 1440952815294877696, '{\"formConfig\":{\"formKind\":5,\"formType\":11,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"contract_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}],\"tableWidget\":{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440952815307460608\",\"tableId\":\"1440952815294877696\",\"showName\":\"甲方企业\",\"showOrder\":1,\"sortable\":false},{\"columnId\":\"1440952815311654912\",\"tableId\":\"1440952815294877696\",\"showName\":\"乙方企业\",\"showOrder\":2,\"sortable\":false},{\"columnId\":\"1440952815315849216\",\"tableId\":\"1440952815294877696\",\"showName\":\"合同类型\",\"showOrder\":3,\"sortable\":false},{\"columnId\":\"1440952815320043520\",\"tableId\":\"1440952815294877696\",\"showName\":\"到期日期\",\"showOrder\":4,\"sortable\":false},{\"columnId\":\"1440952815324237824\",\"tableId\":\"1440952815294877696\",\"showName\":\"业务员\",\"showOrder\":5,\"sortable\":false}],\"operationList\":[],\"queryParamList\":[],\"tableId\":\"1440952815294877696\",\"variableName\":\"formOrderContract\",\"showName\":\"合同工单\",\"hasError\":false,\"datasourceId\":\"1440952815374569472\"}},\"widgetList\":[]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440952815303266304\",\"columnName\":\"contract_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:14:57\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"contractId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440952815294877696\",\"updateTime\":\"2021-09-23 16:14:57\",\"userFilter\":false}]', '2021-09-23 16:38:33', '2021-09-23 16:25:34'); +INSERT INTO `zz_online_form` VALUES (1440959226632474624, 1440958861153406976, 'formFirstParty', '甲方企业管理', 5, 1, 1440958971128057856, '{\"formConfig\":{\"formKind\":5,\"formType\":1,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[],\"tableWidget\":{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440958971140640768\",\"tableId\":\"1440958971128057856\",\"showName\":\"公司名称\",\"showOrder\":1,\"sortable\":false},{\"columnId\":\"1440958971144835072\",\"tableId\":\"1440958971128057856\",\"showName\":\"公司法人\",\"showOrder\":2,\"sortable\":false},{\"columnId\":\"1440958971157417984\",\"tableId\":\"1440958971128057856\",\"showName\":\"联系方式\",\"showOrder\":3,\"sortable\":false},{\"columnId\":\"1440958971153223680\",\"tableId\":\"1440958971128057856\",\"showName\":\"注册地址\",\"showOrder\":4,\"sortable\":false}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":true,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false,\"formId\":\"1440959420396736512\"},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\",\"formId\":\"1440959420396736512\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[],\"tableId\":\"1440958971128057856\",\"variableName\":\"formFirstParty\",\"showName\":\"甲方企业管理\",\"datasourceId\":\"1440958971190972416\",\"hasError\":false}},\"widgetList\":[{\"widgetKind\":0,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386494962,\"datasourceId\":\"1440958971190972416\",\"tableId\":\"1440958971128057856\",\"columnId\":\"1440958971140640768\",\"columnName\":\"company_name\",\"showName\":\"公司名称\",\"variableName\":\"companyName\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]}]}', '[{\"autoIncrement\":false,\"columnComment\":\"公司名称\",\"columnId\":\"1440958971140640768\",\"columnName\":\"company_name\",\"columnShowOrder\":2,\"columnType\":\"varchar\",\"createTime\":\"2021-09-23 16:39:25\",\"deptFilter\":false,\"filterType\":3,\"fullColumnType\":\"varchar(255)\",\"nullable\":false,\"objectFieldName\":\"companyName\",\"objectFieldType\":\"String\",\"parentKey\":false,\"primaryKey\":false,\"tableId\":\"1440958971128057856\",\"updateTime\":\"2021-09-23 16:41:25\",\"userFilter\":false}]', '2021-09-23 16:42:32', '2021-09-23 16:40:26'); +INSERT INTO `zz_online_form` VALUES (1440959420396736512, 1440958861153406976, 'formViewFirstParty', '编辑甲方企业', 1, 5, 1440958971128057856, '{\"formConfig\":{\"formKind\":1,\"formType\":5,\"gutter\":20,\"labelWidth\":120,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"first_party_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386807099,\"datasourceId\":\"1440958971190972416\",\"tableId\":\"1440958971128057856\",\"columnId\":\"1440958971140640768\",\"columnName\":\"company_name\",\"showName\":\"公司名称\",\"variableName\":\"companyName\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386808030,\"datasourceId\":\"1440958971190972416\",\"tableId\":\"1440958971128057856\",\"columnId\":\"1440958971144835072\",\"columnName\":\"legal_person\",\"showName\":\"公司法人\",\"variableName\":\"legalPerson\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386809518,\"datasourceId\":\"1440958971190972416\",\"tableId\":\"1440958971128057856\",\"columnId\":\"1440958971149029376\",\"columnName\":\"legal_person_id\",\"showName\":\"法人身份证号\",\"variableName\":\"legalPersonId\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386811364,\"datasourceId\":\"1440958971190972416\",\"tableId\":\"1440958971128057856\",\"columnId\":\"1440958971157417984\",\"columnName\":\"contact_info\",\"showName\":\"联系方式\",\"variableName\":\"contactInfo\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386814864,\"datasourceId\":\"1440958971190972416\",\"tableId\":\"1440958971128057856\",\"columnId\":\"1440958971153223680\",\"columnName\":\"registry_address\",\"showName\":\"注册地址\",\"variableName\":\"registryAddress\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386817801,\"datasourceId\":\"1440958971190972416\",\"tableId\":\"1440958971128057856\",\"columnId\":\"1440958971161612288\",\"columnName\":\"business_scope\",\"showName\":\"经营范围\",\"variableName\":\"businessScope\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386819192,\"datasourceId\":\"1440958971190972416\",\"tableId\":\"1440958971128057856\",\"columnId\":\"1440958971165806592\",\"columnName\":\"memo\",\"showName\":\"备注\",\"variableName\":\"memo\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440958971132252160\",\"columnName\":\"first_party_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:39:25\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"firstPartyId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440958971128057856\",\"updateTime\":\"2021-09-23 16:39:25\",\"userFilter\":false}]', '2021-09-23 16:47:25', '2021-09-23 16:41:12'); +INSERT INTO `zz_online_form` VALUES (1440961456601305088, 1440961119001776128, 'formSecondParty', '乙方管理', 5, 1, 1440961208273342464, '{\"formConfig\":{\"formKind\":5,\"formType\":1,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[],\"tableWidget\":{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440961208294313984\",\"tableId\":\"1440961208273342464\",\"showName\":\"公司名称\",\"showOrder\":1,\"sortable\":false,\"dataFieldName\":\"company_name\"},{\"columnId\":\"1440961208298508288\",\"tableId\":\"1440961208273342464\",\"showName\":\"公司法人\",\"showOrder\":2,\"sortable\":false,\"dataFieldName\":\"legal_person\"},{\"columnId\":\"1440961208315285504\",\"tableId\":\"1440961208273342464\",\"showName\":\"联系方式\",\"showOrder\":3,\"sortable\":false,\"dataFieldName\":\"contact_info\"},{\"columnId\":\"1440961208306896896\",\"tableId\":\"1440961208273342464\",\"showName\":\"注册地址\",\"showOrder\":4,\"sortable\":false,\"dataFieldName\":\"registry_address\"}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":true,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false,\"formId\":\"1440961779596267520\"},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\",\"formId\":\"1440961779596267520\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[],\"tableId\":\"1440961208273342464\",\"variableName\":\"formSecondParty\",\"showName\":\"乙方管理\",\"datasourceId\":\"1440961208344645633\",\"hasError\":false}},\"widgetList\":[{\"widgetKind\":0,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632386975051,\"datasourceId\":\"1440961208344645633\",\"tableId\":\"1440961208273342464\",\"columnId\":\"1440961208294313984\",\"columnName\":\"company_name\",\"showName\":\"公司名称\",\"variableName\":\"companyName\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[],\"hasError\":false}]}', '[{\"autoIncrement\":false,\"columnComment\":\"公司名称\",\"columnId\":\"1440961208294313984\",\"columnName\":\"company_name\",\"columnShowOrder\":2,\"columnType\":\"varchar\",\"createTime\":\"2021-09-23 16:48:18\",\"deptFilter\":false,\"filterType\":3,\"fullColumnType\":\"varchar(255)\",\"nullable\":false,\"objectFieldName\":\"companyName\",\"objectFieldType\":\"String\",\"parentKey\":false,\"primaryKey\":false,\"tableId\":\"1440961208273342464\",\"updateTime\":\"2021-09-23 16:48:23\",\"userFilter\":false}]', '2021-09-23 16:50:51', '2021-09-23 16:49:18'); +INSERT INTO `zz_online_form` VALUES (1440961779596267520, 1440961119001776128, 'formViewSecondParty', '编辑乙方信息', 1, 5, 1440961208273342464, '{\"formConfig\":{\"formKind\":1,\"formType\":5,\"gutter\":20,\"labelWidth\":120,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[{\"columnName\":\"second_party_id\",\"primaryKey\":true,\"slaveClumn\":false,\"builtin\":true}]},\"widgetList\":[{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632387055657,\"datasourceId\":\"1440961208344645633\",\"tableId\":\"1440961208273342464\",\"columnId\":\"1440961208294313984\",\"columnName\":\"company_name\",\"showName\":\"公司名称\",\"variableName\":\"companyName\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632387056269,\"datasourceId\":\"1440961208344645633\",\"tableId\":\"1440961208273342464\",\"columnId\":\"1440961208298508288\",\"columnName\":\"legal_person\",\"showName\":\"公司法人\",\"variableName\":\"legalPerson\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632387056789,\"datasourceId\":\"1440961208344645633\",\"tableId\":\"1440961208273342464\",\"columnId\":\"1440961208302702592\",\"columnName\":\"legal_person_id\",\"showName\":\"法人身份证号\",\"variableName\":\"legalPersonId\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632387059360,\"datasourceId\":\"1440961208344645633\",\"tableId\":\"1440961208273342464\",\"columnId\":\"1440961208315285504\",\"columnName\":\"contact_info\",\"showName\":\"联系方式\",\"variableName\":\"contactInfo\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632387060899,\"datasourceId\":\"1440961208344645633\",\"tableId\":\"1440961208273342464\",\"columnId\":\"1440961208306896896\",\"columnName\":\"registry_address\",\"showName\":\"注册地址\",\"variableName\":\"registryAddress\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":4,\"readOnly\":false,\"disabled\":false,\"id\":1632387061874,\"datasourceId\":\"1440961208344645633\",\"tableId\":\"1440961208273342464\",\"columnId\":\"1440961208319479808\",\"columnName\":\"business_scope\",\"showName\":\"经营范围\",\"variableName\":\"businessScope\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":1,\"widgetType\":1,\"span\":24,\"type\":\"textarea\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":4,\"readOnly\":false,\"disabled\":false,\"id\":1632387062646,\"datasourceId\":\"1440961208344645633\",\"tableId\":\"1440961208273342464\",\"columnId\":\"1440961208323674112\",\"columnName\":\"memo\",\"showName\":\"备注\",\"variableName\":\"memo\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]}]}', '[{\"autoIncrement\":false,\"columnComment\":\"主键Id\",\"columnId\":\"1440961208285925376\",\"columnName\":\"second_party_id\",\"columnShowOrder\":1,\"columnType\":\"bigint\",\"createTime\":\"2021-09-23 16:48:18\",\"deptFilter\":false,\"filterType\":0,\"fullColumnType\":\"bigint(20)\",\"nullable\":false,\"objectFieldName\":\"secondPartyId\",\"objectFieldType\":\"Long\",\"parentKey\":false,\"primaryKey\":true,\"tableId\":\"1440961208273342464\",\"updateTime\":\"2021-09-23 16:48:18\",\"userFilter\":false}]', '2021-09-23 16:51:20', '2021-09-23 16:50:35'); +INSERT INTO `zz_online_form` VALUES (1440962496864194560, 1440962061336055808, 'formProduct', '产品管理', 5, 1, 1440962162712383488, '{\"formConfig\":{\"formKind\":5,\"formType\":1,\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"paramList\":[],\"tableWidget\":{\"widgetKind\":2,\"widgetType\":100,\"span\":24,\"supportBottom\":0,\"tableInfo\":{\"paged\":true,\"optionColumnWidth\":150},\"titleColor\":\"#409EFF\",\"tableColumnList\":[{\"columnId\":\"1440962162729160704\",\"tableId\":\"1440962162712383488\",\"showName\":\"产品名称\",\"showOrder\":1,\"sortable\":false},{\"columnId\":\"1440962162733355008\",\"tableId\":\"1440962162712383488\",\"showName\":\"规格\",\"showOrder\":2,\"sortable\":false},{\"columnId\":\"1440962162741743616\",\"tableId\":\"1440962162712383488\",\"showName\":\"产品价格\",\"showOrder\":3,\"sortable\":false},{\"columnId\":\"1440962162745937920\",\"tableId\":\"1440962162712383488\",\"showName\":\"备注\",\"showOrder\":4,\"sortable\":false}],\"operationList\":[{\"id\":1,\"type\":0,\"name\":\"新建\",\"enabled\":true,\"builtin\":true,\"rowOperation\":false,\"btnType\":\"primary\",\"plain\":false,\"formId\":\"1440962547132928000\"},{\"id\":2,\"type\":1,\"name\":\"编辑\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn success\",\"formId\":\"1440962547132928000\"},{\"id\":3,\"type\":2,\"name\":\"删除\",\"enabled\":true,\"builtin\":true,\"rowOperation\":true,\"btnClass\":\"table-btn delete\"}],\"queryParamList\":[],\"tableId\":\"1440962162712383488\",\"variableName\":\"formProduct\",\"showName\":\"产品管理\",\"datasourceId\":\"1440962162771103745\",\"hasError\":false}},\"widgetList\":[{\"widgetKind\":0,\"widgetType\":1,\"span\":12,\"type\":\"text\",\"placeholder\":\"\",\"defaultValue\":\"\",\"minRows\":2,\"maxRows\":2,\"readOnly\":false,\"disabled\":false,\"id\":1632387220352,\"datasourceId\":\"1440962162771103745\",\"tableId\":\"1440962162712383488\",\"columnId\":\"1440962162729160704\",\"columnName\":\"product_name\",\"showName\":\"产品名称\",\"variableName\":\"productName\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]},{\"widgetKind\":0,\"widgetType\":4,\"readOnly\":false,\"disabled\":false,\"id\":1632387221253,\"datasourceId\":\"1440962162771103745\",\"tableId\":\"1440962162712383488\",\"columnId\":\"1440962162741743616\",\"columnName\":\"cost_price\",\"showName\":\"产品价格\",\"variableName\":\"costPrice\",\"dictParamList\":null,\"queryParamList\":[],\"tableColumnList\":[]}]}', '[{\"autoIncrement\":false,\"columnComment\":\"产品名称\",\"columnId\":\"1440962162729160704\",\"columnName\":\"product_name\",\"columnShowOrder\":2,\"columnType\":\"varchar\",\"createTime\":\"2021-09-23 16:52:06\",\"deptFilter\":false,\"filterType\":3,\"fullColumnType\":\"varchar(255)\",\"nullable\":false,\"objectFieldName\":\"productName\",\"objectFieldType\":\"String\",\"parentKey\":false,\"primaryKey\":false,\"tableId\":\"1440962162712383488\",\"updateTime\":\"2021-09-23 16:52:10\",\"userFilter\":false},{\"autoIncrement\":false,\"columnComment\":\"产品价格\",\"columnId\":\"1440962162741743616\",\"columnName\":\"cost_price\",\"columnShowOrder\":5,\"columnType\":\"int\",\"createTime\":\"2021-09-23 16:52:06\",\"deptFilter\":false,\"filterType\":2,\"fullColumnType\":\"int(11)\",\"nullable\":false,\"objectFieldName\":\"costPrice\",\"objectFieldType\":\"Integer\",\"parentKey\":false,\"primaryKey\":false,\"tableId\":\"1440962162712383488\",\"updateTime\":\"2021-09-23 16:53:05\",\"userFilter\":false}]', '2021-09-23 16:54:15', '2021-09-23 16:53:26'); +INSERT INTO `zz_online_form` VALUES (1440962547132928000, 1440962061336055808, 'formEditProduct', '编辑产品', 1, 5, 1440962162712383488, '{\"formConfig\":{\"gutter\":20,\"labelWidth\":100,\"labelPosition\":\"right\",\"width\":800,\"widgetList\":[],\"paramList\":[]},\"widgetList\":[]}', '[]', '2021-09-23 16:53:38', '2021-09-23 16:53:38'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_form_datasource +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_form_datasource`; +CREATE TABLE `zz_online_form_datasource` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `form_id` bigint(20) NOT NULL COMMENT '表单Id', + `datasource_id` bigint(20) NOT NULL COMMENT '数据源Id', + PRIMARY KEY (`id`), + KEY `idx_form_id` (`form_id`) USING BTREE, + KEY `idx_datasource_id` (`datasource_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_form_datasource +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_form_datasource` VALUES (1440945738333818880, 1440945411354267648, 1440945228130291712); +INSERT INTO `zz_online_form_datasource` VALUES (1440948576577392640, 1440947675041107968, 1440946127531675648); +INSERT INTO `zz_online_form_datasource` VALUES (1440948832954224640, 1440947791881834496, 1440946127531675648); +INSERT INTO `zz_online_form_datasource` VALUES (1440957294211764224, 1440955001093492736, 1440952815374569472); +INSERT INTO `zz_online_form_datasource` VALUES (1440958752122474496, 1440955483438452736, 1440952815374569472); +INSERT INTO `zz_online_form_datasource` VALUES (1440959275592585216, 1440955295755931648, 1440952815374569472); +INSERT INTO `zz_online_form_datasource` VALUES (1440959299529478144, 1440955361006718976, 1440952815374569472); +INSERT INTO `zz_online_form_datasource` VALUES (1440959323269238784, 1440955424638504960, 1440952815374569472); +INSERT INTO `zz_online_form_datasource` VALUES (1440959757073518592, 1440959226632474624, 1440958971190972416); +INSERT INTO `zz_online_form_datasource` VALUES (1440960555518005248, 1440955127790833664, 1440952815374569472); +INSERT INTO `zz_online_form_datasource` VALUES (1440960654734266368, 1440955194991972352, 1440952815374569472); +INSERT INTO `zz_online_form_datasource` VALUES (1440960985459331072, 1440959420396736512, 1440958971190972416); +INSERT INTO `zz_online_form_datasource` VALUES (1440961848324132864, 1440961456601305088, 1440961208344645633); +INSERT INTO `zz_online_form_datasource` VALUES (1440961970739089408, 1440961779596267520, 1440961208344645633); +INSERT INTO `zz_online_form_datasource` VALUES (1440962547137122304, 1440962547132928000, 1440962162771103745); +INSERT INTO `zz_online_form_datasource` VALUES (1440962702619971584, 1440962496864194560, 1440962162771103745); +INSERT INTO `zz_online_form_datasource` VALUES (1440978457667309568, 1440945468593934336, 1440945228130291712); +INSERT INTO `zz_online_form_datasource` VALUES (1441214948859449344, 1440954920348946432, 1440952815374569472); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_page +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_page`; +CREATE TABLE `zz_online_page` ( + `page_id` bigint(20) NOT NULL COMMENT '主键Id', + `page_code` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '页面编码', + `page_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '页面名称', + `page_type` int(11) NOT NULL COMMENT '页面类型', + `status` int(11) NOT NULL COMMENT '页面编辑状态', + `published` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否发布', + `update_time` datetime NOT NULL COMMENT '更新时间', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`page_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_page +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_page` VALUES (1440945149889744896, 'pageFlowLeave', '请假申请', 10, 2, b'1', '2021-09-23 15:45:08', '2021-09-23 15:44:30'); +INSERT INTO `zz_online_page` VALUES (1440946020174270464, 'pageSubmit', '报销申请', 10, 2, b'1', '2021-09-23 15:57:43', '2021-09-23 15:47:57'); +INSERT INTO `zz_online_page` VALUES (1440952710487609344, 'pageFlowContract', '合同审批', 10, 2, b'1', '2021-09-23 16:23:02', '2021-09-23 16:14:32'); +INSERT INTO `zz_online_page` VALUES (1440958861153406976, 'formFirstParty', '甲方企业', 1, 2, b'1', '2021-09-23 16:40:03', '2021-09-23 16:38:59'); +INSERT INTO `zz_online_page` VALUES (1440961119001776128, 'pageSecondParty', '乙方企业管理', 1, 2, b'1', '2021-09-23 16:48:58', '2021-09-23 16:47:57'); +INSERT INTO `zz_online_page` VALUES (1440962061336055808, 'pageProduct', '产品管理', 1, 2, b'1', '2021-09-23 16:53:12', '2021-09-23 16:51:42'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_page_datasource +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_page_datasource`; +CREATE TABLE `zz_online_page_datasource` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `page_id` bigint(20) NOT NULL COMMENT '页面主键Id', + `datasource_id` bigint(20) NOT NULL COMMENT '数据源主键Id', + PRIMARY KEY (`id`), + KEY `idx_page_id` (`page_id`) USING BTREE, + KEY `idx_datasource_id` (`datasource_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_page_datasource +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_page_datasource` VALUES (1440945228138680320, 1440945149889744896, 1440945228130291712); +INSERT INTO `zz_online_page_datasource` VALUES (1440946127540064256, 1440946020174270464, 1440946127531675648); +INSERT INTO `zz_online_page_datasource` VALUES (1440952815382958080, 1440952710487609344, 1440952815374569472); +INSERT INTO `zz_online_page_datasource` VALUES (1440958971195166721, 1440958861153406976, 1440958971190972416); +INSERT INTO `zz_online_page_datasource` VALUES (1440961208353034240, 1440961119001776128, 1440961208344645633); +INSERT INTO `zz_online_page_datasource` VALUES (1440962162779492352, 1440962061336055808, 1440962162771103745); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_rule +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_rule`; +CREATE TABLE `zz_online_rule` ( + `rule_id` bigint(20) NOT NULL COMMENT '主键Id', + `rule_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '规则名称', + `rule_type` int(11) NOT NULL COMMENT '规则类型', + `builtin` bit(1) NOT NULL COMMENT '内置规则标记', + `pattern` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '自定义规则的正则表达式', + `update_time` datetime NOT NULL COMMENT '更新时间', + `create_time` datetime NOT NULL COMMENT '创建时间', + `deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记', + PRIMARY KEY (`rule_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_rule +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_rule` VALUES (1, '只允许整数', 1, b'1', NULL, '2021-09-23 00:00:00', '2021-09-23 00:00:00', 1); +INSERT INTO `zz_online_rule` VALUES (2, '只允许数字', 2, b'1', NULL, '2021-09-23 00:00:00', '2021-09-23 00:00:00', 1); +INSERT INTO `zz_online_rule` VALUES (3, '只允许英文字符', 3, b'1', NULL, '2021-09-23 00:00:00', '2021-09-23 00:00:00', 1); +INSERT INTO `zz_online_rule` VALUES (4, '范围验证', 4, b'1', NULL, '2021-09-23 00:00:00', '2021-09-23 00:00:00', 1); +INSERT INTO `zz_online_rule` VALUES (5, '邮箱格式验证', 5, b'1', NULL, '2021-09-23 00:00:00', '2021-09-23 00:00:00', 1); +INSERT INTO `zz_online_rule` VALUES (6, '手机格式验证', 6, b'1', NULL, '2021-09-23 00:00:00', '2021-09-23 00:00:00', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_table +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_table`; +CREATE TABLE `zz_online_table` ( + `table_id` bigint(20) NOT NULL COMMENT '主键Id', + `table_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '表名称', + `model_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '实体名称', + `dblink_id` bigint(20) NOT NULL COMMENT '数据库链接Id', + `update_time` datetime NOT NULL COMMENT '更新时间', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`table_id`), + KEY `idx_dblink_id` (`dblink_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_table +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_table` VALUES (1440945228079960064, 'zz_test_flow_leave', 'ZzTestFlowLeave', 1, '2021-09-23 15:44:48', '2021-09-23 15:44:48'); +INSERT INTO `zz_online_table` VALUES (1440946127460372480, 'zz_test_flow_submit', 'ZzTestFlowSubmit', 1, '2021-09-23 15:48:23', '2021-09-23 15:48:23'); +INSERT INTO `zz_online_table` VALUES (1440947089218473984, 'zz_test_flow_submit_detail', 'ZzTestFlowSubmitDetail', 1, '2021-09-23 15:52:12', '2021-09-23 15:52:12'); +INSERT INTO `zz_online_table` VALUES (1440952815294877696, 'zz_test_flow_contract', 'ZzTestFlowContract', 1, '2021-09-23 16:14:57', '2021-09-23 16:14:57'); +INSERT INTO `zz_online_table` VALUES (1440952921024892928, 'zz_test_flow_first_party', 'ZzTestFlowFirstParty', 1, '2021-09-23 16:15:23', '2021-09-23 16:15:23'); +INSERT INTO `zz_online_table` VALUES (1440952988389609472, 'zz_test_flow_second_party', 'ZzTestFlowSecondParty', 1, '2021-09-23 16:15:39', '2021-09-23 16:15:39'); +INSERT INTO `zz_online_table` VALUES (1440953088901910528, 'zz_test_flow_contract_detail', 'ZzTestFlowContractDetail', 1, '2021-09-23 16:16:03', '2021-09-23 16:16:03'); +INSERT INTO `zz_online_table` VALUES (1440953170514677760, 'zz_test_flow_pay_detail', 'ZzTestFlowPayDetail', 1, '2021-09-23 16:16:22', '2021-09-23 16:16:22'); +INSERT INTO `zz_online_table` VALUES (1440953245664022528, 'zz_test_flow_delivery_detail', 'ZzTestFlowDeliveryDetail', 1, '2021-09-23 16:16:40', '2021-09-23 16:16:40'); +INSERT INTO `zz_online_table` VALUES (1440958971128057856, 'zz_test_flow_first_party', 'ZzTestFlowFirstParty', 1, '2021-09-23 16:39:25', '2021-09-23 16:39:25'); +INSERT INTO `zz_online_table` VALUES (1440961208273342464, 'zz_test_flow_second_party', 'ZzTestFlowSecondParty', 1, '2021-09-23 16:48:18', '2021-09-23 16:48:18'); +INSERT INTO `zz_online_table` VALUES (1440962162712383488, 'zz_test_flow_product', 'ZzTestFlowProduct', 1, '2021-09-23 16:52:06', '2021-09-23 16:52:06'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_online_virtual_column +-- ---------------------------- +DROP TABLE IF EXISTS `zz_online_virtual_column`; +CREATE TABLE `zz_online_virtual_column` ( + `virtual_column_id` bigint(20) NOT NULL COMMENT '主键Id', + `table_id` bigint(20) NOT NULL COMMENT '所在表Id', + `object_field_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '字段名称', + `object_field_type` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '属性类型', + `column_prompt` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '字段提示名', + `virtual_type` int(11) NOT NULL COMMENT '虚拟字段类型(0: 聚合)', + `datasource_id` bigint(20) NOT NULL COMMENT '关联数据源Id', + `relation_id` bigint(20) DEFAULT NULL COMMENT '关联Id', + `aggregation_table_id` bigint(20) DEFAULT NULL COMMENT '聚合字段所在关联表Id', + `aggregation_column_id` bigint(20) DEFAULT NULL COMMENT '关联表聚合字段Id', + `aggregation_type` int(11) DEFAULT NULL COMMENT '聚合类型(0: sum 1: count 2: avg 3: min 4: max)', + `where_clause_json` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '存储过滤条件的json', + PRIMARY KEY (`virtual_column_id`) USING BTREE, + KEY `idx_database_id` (`datasource_id`) USING BTREE, + KEY `idx_relation_id` (`relation_id`) USING BTREE, + KEY `idx_table_id` (`table_id`) USING BTREE, + KEY `idx_aggregation_column_id` (`aggregation_column_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_online_virtual_column +-- ---------------------------- +BEGIN; +INSERT INTO `zz_online_virtual_column` VALUES (1440947297541165056, 1440946127460372480, 'totalAmount', 'Long', '报销总金额', 0, 1440946127531675648, 1440947089268805632, 1440947089218473984, 1440947089252028416, 0, '[]'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_data_perm +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_data_perm`; +CREATE TABLE `zz_sys_data_perm` ( + `data_perm_id` bigint(20) NOT NULL COMMENT '主键', + `data_perm_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '显示名称', + `rule_type` tinyint(2) NOT NULL COMMENT '数据权限规则类型(0: 全部可见 1: 只看自己 2: 只看本部门 3: 本部门及子部门 4: 多部门及子部门 5: 自定义部门列表)。', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`data_perm_id`) USING BTREE, + KEY `idx_create_time` (`create_time`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='数据权限表'; + +-- ---------------------------- +-- Records of zz_sys_data_perm +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_data_perm` VALUES (1440965237959299072, '查看全部', 0, 1440911410581213417, '2021-09-23 17:04:19', 1440911410581213417, '2021-09-23 17:04:19', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_data_perm_dept +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_data_perm_dept`; +CREATE TABLE `zz_sys_data_perm_dept` ( + `data_perm_id` bigint(20) NOT NULL COMMENT '数据权限Id', + `dept_id` bigint(20) NOT NULL COMMENT '部门Id', + PRIMARY KEY (`data_perm_id`,`dept_id`), + KEY `idx_dept_id` (`dept_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='数据权限和部门关联表'; + +-- ---------------------------- +-- Table structure for zz_sys_data_perm_user +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_data_perm_user`; +CREATE TABLE `zz_sys_data_perm_user` ( + `data_perm_id` bigint(20) NOT NULL COMMENT '数据权限Id', + `user_id` bigint(20) NOT NULL COMMENT '用户Id', + PRIMARY KEY (`data_perm_id`,`user_id`), + KEY `idx_user_id` (`user_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='数据权限和用户关联表'; + +-- ---------------------------- +-- Records of zz_sys_data_perm_user +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_data_perm_user` VALUES (1440965237959299072, 1440965344985354240); +INSERT INTO `zz_sys_data_perm_user` VALUES (1440965237959299072, 1440965465605148672); +INSERT INTO `zz_sys_data_perm_user` VALUES (1440965237959299072, 1440965586715676672); +INSERT INTO `zz_sys_data_perm_user` VALUES (1440965237959299072, 1440965697961201664); +INSERT INTO `zz_sys_data_perm_user` VALUES (1440965237959299072, 1440965808049098752); +INSERT INTO `zz_sys_data_perm_user` VALUES (1440965237959299072, 1440966073686953984); +INSERT INTO `zz_sys_data_perm_user` VALUES (1440965237959299072, 1440966186522120192); +INSERT INTO `zz_sys_data_perm_user` VALUES (1440965237959299072, 1440966324770574336); +INSERT INTO `zz_sys_data_perm_user` VALUES (1440965237959299072, 1440969706411397120); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_dept +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_dept`; +CREATE TABLE `zz_sys_dept` ( + `dept_id` bigint(20) NOT NULL COMMENT '部门Id', + `parent_id` bigint(20) DEFAULT NULL COMMENT '父部门Id', + `dept_name` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '部门名称', + `show_order` int(11) NOT NULL COMMENT '兄弟部分之间的显示顺序,数字越小越靠前', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(1) NOT NULL DEFAULT '0' COMMENT '删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`dept_id`) USING BTREE, + KEY `idx_parent_id` (`parent_id`) USING BTREE, + KEY `idx_show_order` (`show_order`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='部门管理表'; + +-- ---------------------------- +-- Records of zz_sys_dept +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_dept` VALUES (1440911410581213416, NULL, '公司总部', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_dept` VALUES (1440963592970047488, 1440911410581213416, '人事部', 1, 1440911410581213417, '2021-09-23 16:57:47', 1440911410581213417, '2021-09-23 16:57:47', 1); +INSERT INTO `zz_sys_dept` VALUES (1440963642542526464, 1440911410581213416, '法务部', 2, 1440911410581213417, '2021-09-23 16:57:59', 1440911410581213417, '2021-09-23 16:57:59', 1); +INSERT INTO `zz_sys_dept` VALUES (1440963698460987392, NULL, '天津分公司', 2, 1440911410581213417, '2021-09-23 16:58:12', 1440911410581213417, '2021-09-23 16:58:12', 1); +INSERT INTO `zz_sys_dept` VALUES (1440963733084966912, NULL, '北京分公司', 2, 1440911410581213417, '2021-09-23 16:58:20', 1440911410581213417, '2021-09-23 16:58:20', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_dept_post +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_dept_post`; +CREATE TABLE `zz_sys_dept_post` ( + `dept_post_id` bigint(20) NOT NULL COMMENT '主键Id', + `dept_id` bigint(20) NOT NULL COMMENT '部门Id', + `post_id` bigint(20) NOT NULL COMMENT '岗位Id', + `post_show_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '部门岗位显示名称', + PRIMARY KEY (`dept_post_id`) USING BTREE, + KEY `idx_post_id` (`post_id`) USING BTREE, + KEY `idx_dept_id` (`dept_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_sys_dept_post +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_dept_post` VALUES (1440964221780103168, 1440963592970047488, 1440964097913917440, '人事部经理'); +INSERT INTO `zz_sys_dept_post` VALUES (1440964221855600640, 1440963592970047488, 1440964157770829824, '人事专员'); +INSERT INTO `zz_sys_dept_post` VALUES (1440964387979399168, 1440963642542526464, 1440964097913917440, '法务部经理'); +INSERT INTO `zz_sys_dept_post` VALUES (1440964387983593472, 1440963642542526464, 1440964157770829824, '法务专员'); +INSERT INTO `zz_sys_dept_post` VALUES (1440964519391137792, 1440963698460987392, 1440963890539139072, '天津大区总监'); +INSERT INTO `zz_sys_dept_post` VALUES (1440964519395332096, 1440963698460987392, 1440964040611336192, '天津地区经理'); +INSERT INTO `zz_sys_dept_post` VALUES (1440964519399526400, 1440963698460987392, 1440964157770829824, '员工'); +INSERT INTO `zz_sys_dept_post` VALUES (1440964725134331904, 1440963733084966912, 1440963890539139072, '北京大区总监'); +INSERT INTO `zz_sys_dept_post` VALUES (1440964725138526208, 1440963733084966912, 1440964040611336192, '北京地区经理'); +INSERT INTO `zz_sys_dept_post` VALUES (1440964725142720512, 1440963733084966912, 1440964157770829824, '员工'); +INSERT INTO `zz_sys_dept_post` VALUES (1440969551792574464, 1440911410581213416, 1440963890539139072, '总裁'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_dept_relation +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_dept_relation`; +CREATE TABLE `zz_sys_dept_relation` ( + `parent_dept_id` bigint(20) NOT NULL COMMENT '父部门Id', + `dept_id` bigint(20) NOT NULL COMMENT '部门Id', + PRIMARY KEY (`parent_dept_id`,`dept_id`), + KEY `idx_dept_id` (`dept_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='部门关联关系表'; + +-- ---------------------------- +-- Records of zz_sys_dept_relation +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_dept_relation` VALUES (1440911410581213416, 1440911410581213416); +INSERT INTO `zz_sys_dept_relation` VALUES (1440911410581213416, 1440963592970047488); +INSERT INTO `zz_sys_dept_relation` VALUES (1440963592970047488, 1440963592970047488); +INSERT INTO `zz_sys_dept_relation` VALUES (1440911410581213416, 1440963642542526464); +INSERT INTO `zz_sys_dept_relation` VALUES (1440963642542526464, 1440963642542526464); +INSERT INTO `zz_sys_dept_relation` VALUES (1440963698460987392, 1440963698460987392); +INSERT INTO `zz_sys_dept_relation` VALUES (1440963733084966912, 1440963733084966912); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_menu`; +CREATE TABLE `zz_sys_menu` ( + `menu_id` bigint(20) NOT NULL COMMENT '主键Id', + `parent_id` bigint(20) DEFAULT NULL COMMENT '父菜单Id,目录菜单的父菜单为null', + `menu_name` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '菜单显示名称', + `menu_type` int(11) NOT NULL COMMENT '(0: 目录 1: 菜单 2: 按钮 3: UI片段)', + `form_router_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '前端表单路由名称,仅用于menu_type为1的菜单类型', + `online_form_id` bigint(20) DEFAULT NULL COMMENT '在线表单主键Id', + `online_menu_perm_type` int(11) DEFAULT NULL COMMENT '在线表单菜单的权限控制类型', + `online_flow_entry_id` bigint(20) DEFAULT NULL COMMENT '仅用于在线表单的流程Id', + `show_order` int(11) NOT NULL COMMENT '菜单显示顺序 (值越小,排序越靠前)', + `icon` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '菜单图标', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`menu_id`) USING BTREE, + KEY `idx_show_order` (`show_order`) USING BTREE, + KEY `idx_parent_id` (`parent_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='菜单和操作权限管理表'; + +-- ---------------------------- +-- Records of zz_sys_menu +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_menu` VALUES (1392786476428693504, NULL, '在线表单', 0, NULL, NULL, NULL, NULL, 2, 'el-icon-c-scale-to-original', 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 17:42:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1392786549942259712, 1392786476428693504, '字典管理', 1, 'formOnlineDict', NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1392786950682841088, 1392786476428693504, '表单管理', 1, 'formOnlinePage', NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532054578925568, NULL, '系统管理', 0, NULL, NULL, NULL, NULL, 1, 'el-icon-setting', 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 17:41:39', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532055971434496, 1401532054578925568, '用户管理', 1, 'formSysUser', NULL, NULL, NULL, 100, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532055971434497, 1401532054578925568, '部门管理', 1, 'formSysDept', NULL, NULL, NULL, 105, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532055971434498, 1401532054578925568, '角色管理', 1, 'formSysRole', NULL, NULL, NULL, 110, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532055971434499, 1401532054578925568, '数据权限管理', 1, 'formSysDataPerm', NULL, NULL, NULL, 115, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532055971434500, 1401532054578925568, '菜单管理', 1, 'formSysMenu', NULL, NULL, NULL, 120, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532055971434501, 1401532054578925568, '权限字管理', 1, 'formSysPermCode', NULL, NULL, NULL, 125, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532055971434502, 1401532054578925568, '权限管理', 1, 'formSysPerm', NULL, NULL, NULL, 130, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532055971434503, 1401532054578925568, '字典管理', 1, 'formSysDict', NULL, NULL, NULL, 135, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1401532055971434504, 1401532054578925568, '在线用户', 1, 'formSysLoginUser', NULL, NULL, NULL, 145, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418057714138877952, NULL, '流程管理', 0, NULL, NULL, NULL, NULL, 3, 'el-icon-s-operation', 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 17:42:12', 1); +INSERT INTO `zz_sys_menu` VALUES (1418057835631087616, 1418057714138877952, '流程分类', 1, 'formFlowCategory', NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418058049951633408, 1418057835631087616, '新建', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418058115667988480, 1418057835631087616, '编辑', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418058170542067712, 1418057835631087616, '删除', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418058289182150656, 1418057714138877952, '流程设计', 1, 'formFlowEntry', NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418058515099947008, 1418058289182150656, '启动', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418058602723151872, 1418058289182150656, '编辑', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418058744037642240, 1418057714138877952, '流程实例', 1, 'formAllInstance', NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418058844164067328, 1418058744037642240, '终止', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418058907674218496, 1418058744037642240, '删除', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418059005175009280, NULL, '任务管理', 0, NULL, NULL, NULL, NULL, 4, 'el-icon-tickets', 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 17:42:32', 1); +INSERT INTO `zz_sys_menu` VALUES (1418059167532322816, 1418059005175009280, '待办任务', 1, 'formMyTask', NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1418059283920064512, 1418059005175009280, '历史任务', 1, 'formMyHistoryTask', NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1423161217970606080, 1418059005175009280, '已办任务', 1, 'formMyApprovedTask', NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1433040549035642880, 1401532054578925568, '岗位管理', 1, 'formSysPost', NULL, NULL, NULL, 106, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213280, 1401532055971434496, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213281, 1401532055971434496, '新增', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213282, 1401532055971434496, '编辑', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213283, 1401532055971434496, '删除', 3, NULL, NULL, NULL, NULL, 4, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213284, 1401532055971434496, '重置密码', 3, NULL, NULL, NULL, NULL, 5, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213285, 1401532055971434496, '权限详情', 3, NULL, NULL, NULL, NULL, 6, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213294, 1401532055971434497, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213295, 1401532055971434497, '新增', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213296, 1401532055971434497, '编辑', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213297, 1401532055971434497, '删除', 3, NULL, NULL, NULL, NULL, 4, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213298, 1401532055971434497, '设置岗位', 3, NULL, NULL, NULL, NULL, 5, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213299, 1401532055971434497, '查看岗位', 3, NULL, NULL, NULL, NULL, 6, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213308, 1401532055971434498, '角色管理', 2, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213309, 1401532055971434498, '用户授权', 2, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213310, 1440911410581213308, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213311, 1440911410581213308, '新增', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213312, 1440911410581213308, '编辑', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213313, 1440911410581213308, '删除', 3, NULL, NULL, NULL, NULL, 4, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213314, 1440911410581213308, '权限详情', 3, NULL, NULL, NULL, NULL, 5, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213315, 1440911410581213309, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213316, 1440911410581213309, '授权用户', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213317, 1440911410581213309, '移除用户', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213328, 1401532055971434499, '数据权限管理', 2, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213329, 1401532055971434499, '用户授权', 2, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213330, 1440911410581213328, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213331, 1440911410581213328, '新增', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213332, 1440911410581213328, '编辑', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213333, 1440911410581213328, '删除', 3, NULL, NULL, NULL, NULL, 4, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213334, 1440911410581213329, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213335, 1440911410581213329, '授权用户', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213336, 1440911410581213329, '移除用户', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213346, 1401532055971434500, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213347, 1401532055971434500, '新增', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213348, 1401532055971434500, '编辑', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213349, 1401532055971434500, '删除', 3, NULL, NULL, NULL, NULL, 4, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213350, 1401532055971434500, '权限详情', 3, NULL, NULL, NULL, NULL, 5, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213358, 1401532055971434501, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213359, 1401532055971434501, '新增', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213360, 1401532055971434501, '编辑', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213361, 1401532055971434501, '删除', 3, NULL, NULL, NULL, NULL, 4, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213362, 1401532055971434501, '权限详情', 3, NULL, NULL, NULL, NULL, 5, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213370, 1401532055971434502, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213371, 1401532055971434502, '新增模块', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213372, 1401532055971434502, '编辑模块', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213373, 1401532055971434502, '删除模块', 3, NULL, NULL, NULL, NULL, 4, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213374, 1401532055971434502, '新增权限', 3, NULL, NULL, NULL, NULL, 5, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213375, 1401532055971434502, '编辑权限', 3, NULL, NULL, NULL, NULL, 6, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213376, 1401532055971434502, '删除权限', 3, NULL, NULL, NULL, NULL, 7, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213377, 1401532055971434502, '权限详情', 3, NULL, NULL, NULL, NULL, 8, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213388, 1401532055971434503, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213389, 1401532055971434503, '新增', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213390, 1401532055971434503, '编辑', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213391, 1401532055971434503, '删除', 3, NULL, NULL, NULL, NULL, 4, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213392, 1401532055971434503, '同步缓存', 3, NULL, NULL, NULL, NULL, 5, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213400, 1401532055971434504, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213401, 1401532055971434504, '强制下线', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213406, 1433040549035642880, '岗位管理', 2, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213407, 1440911410581213406, '显示', 3, NULL, NULL, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213408, 1440911410581213406, '新增', 3, NULL, NULL, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213409, 1440911410581213406, '编辑', 3, NULL, NULL, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440911410581213410, 1440911410581213406, '删除', 3, NULL, NULL, NULL, NULL, 4, NULL, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440973980537196544, NULL, '业务管理', 0, NULL, NULL, NULL, NULL, 5, 'el-icon-goods', 1440911410581213417, '2021-09-23 17:39:04', 1440911410581213417, '2021-09-23 17:42:45', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974056105971712, 1440973980537196544, '甲方管理', 1, NULL, 1440959226632474624, NULL, NULL, 1, NULL, 1440911410581213417, '2021-09-23 17:39:22', 1440911410581213417, '2021-09-23 17:39:22', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974056110166016, 1440974056105971712, '查看', 3, NULL, 1440959226632474624, 0, NULL, 0, NULL, 1440911410581213417, '2021-09-23 17:39:22', 1440911410581213417, '2021-09-23 17:39:22', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974056114360320, 1440974056105971712, '编辑', 3, NULL, 1440959226632474624, 1, NULL, 1, NULL, 1440911410581213417, '2021-09-23 17:39:22', 1440911410581213417, '2021-09-23 17:39:22', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974134195523584, 1440973980537196544, '乙方管理', 1, NULL, 1440961456601305088, NULL, NULL, 2, NULL, 1440911410581213417, '2021-09-23 17:39:40', 1440911410581213417, '2021-09-23 17:39:40', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974134199717888, 1440974134195523584, '查看', 3, NULL, 1440961456601305088, 0, NULL, 0, NULL, 1440911410581213417, '2021-09-23 17:39:40', 1440911410581213417, '2021-09-23 17:39:40', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974134203912192, 1440974134195523584, '编辑', 3, NULL, 1440961456601305088, 1, NULL, 1, NULL, 1440911410581213417, '2021-09-23 17:39:40', 1440911410581213417, '2021-09-23 17:39:40', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974233613111296, 1440973980537196544, '产品管理', 1, NULL, 1440962496864194560, NULL, NULL, 3, NULL, 1440911410581213417, '2021-09-23 17:40:04', 1440911410581213417, '2021-09-23 17:40:04', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974233617305600, 1440974233613111296, '查看', 3, NULL, 1440962496864194560, 0, NULL, 0, NULL, 1440911410581213417, '2021-09-23 17:40:04', 1440911410581213417, '2021-09-23 17:40:04', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974233621499904, 1440974233613111296, '编辑', 3, NULL, 1440962496864194560, 1, NULL, 1, NULL, 1440911410581213417, '2021-09-23 17:40:04', 1440911410581213417, '2021-09-23 17:40:04', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974310754750464, NULL, '工单管理', 0, NULL, NULL, NULL, NULL, 6, 'el-icon-menu', 1440911410581213417, '2021-09-23 17:40:22', 1440911410581213417, '2021-09-23 17:43:00', 1); +INSERT INTO `zz_sys_menu` VALUES (1440974580402360320, 1440974310754750464, '请假申请', 1, NULL, 1440945468593934336, NULL, 1440962968085860352, 1, NULL, 1440911410581213417, '2021-09-23 17:41:27', 1440911410581213417, '2021-09-23 17:54:31', 1); +INSERT INTO `zz_sys_menu` VALUES (1440978065088843776, 1440974310754750464, '合同工单管理', 1, NULL, 1440955483438452736, NULL, 1440968423508021248, 2, NULL, 1440911410581213417, '2021-09-23 17:55:17', 1440911410581213417, '2021-09-23 17:55:17', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_menu_perm_code +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_menu_perm_code`; +CREATE TABLE `zz_sys_menu_perm_code` ( + `menu_id` bigint(20) NOT NULL COMMENT '关联菜单Id', + `perm_code_id` bigint(20) NOT NULL COMMENT '关联权限字Id', + PRIMARY KEY (`menu_id`,`perm_code_id`) USING BTREE, + KEY `idx_perm_code_id` (`perm_code_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='菜单和权限关系表'; + +-- ---------------------------- +-- Records of zz_sys_menu_perm_code +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_menu_perm_code` VALUES (1392786549942259712, 1400638885750378496); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1392786950682841088, 1400639252747784192); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418057835631087616, 1418046848794365952); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418058049951633408, 1418046986677915648); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418058115667988480, 1418047095188754432); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418058170542067712, 1418047182946177024); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418058289182150656, 1418048205177753600); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418058602723151872, 1418048335343783936); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418058744037642240, 1418049164754817024); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418058844164067328, 1418049287106859008); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418058907674218496, 1418049398776008704); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418059167532322816, 1418050322282057728); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418058515099947008, 1418050797706416128); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1418059283920064512, 1418057346877231104); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1423161217970606080, 1423636498195943424); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1423161217970606080, 1423637544578322432); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213280, 1440911410581213287); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213281, 1440911410581213288); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213282, 1440911410581213289); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213283, 1440911410581213290); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213284, 1440911410581213291); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213285, 1440911410581213292); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213294, 1440911410581213301); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213295, 1440911410581213302); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213296, 1440911410581213303); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213297, 1440911410581213304); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213298, 1440911410581213305); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213299, 1440911410581213306); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213310, 1440911410581213319); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213315, 1440911410581213320); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213311, 1440911410581213321); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213312, 1440911410581213322); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213313, 1440911410581213323); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213314, 1440911410581213324); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213316, 1440911410581213325); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213317, 1440911410581213326); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213330, 1440911410581213338); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213334, 1440911410581213339); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213331, 1440911410581213340); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213332, 1440911410581213341); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213333, 1440911410581213342); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213335, 1440911410581213343); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213336, 1440911410581213344); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213346, 1440911410581213352); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213347, 1440911410581213353); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213348, 1440911410581213354); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213349, 1440911410581213355); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213350, 1440911410581213356); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213358, 1440911410581213364); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213359, 1440911410581213365); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213360, 1440911410581213366); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213361, 1440911410581213367); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213362, 1440911410581213368); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213370, 1440911410581213379); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213371, 1440911410581213380); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213372, 1440911410581213381); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213373, 1440911410581213382); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213374, 1440911410581213383); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213375, 1440911410581213384); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213376, 1440911410581213385); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213377, 1440911410581213386); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1401532055971434503, 1440911410581213394); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213388, 1440911410581213394); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1401532055971434503, 1440911410581213395); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213389, 1440911410581213395); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1401532055971434503, 1440911410581213396); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213390, 1440911410581213396); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1401532055971434503, 1440911410581213397); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213391, 1440911410581213397); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1401532055971434503, 1440911410581213398); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213392, 1440911410581213398); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213400, 1440911410581213403); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213401, 1440911410581213404); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213407, 1440911410581213412); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213408, 1440911410581213413); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213409, 1440911410581213414); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440911410581213410, 1440911410581213415); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440974580402360320, 1440976898661289984); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440978065088843776, 1440976998183735296); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440974580402360320, 1440977405874278400); +INSERT INTO `zz_sys_menu_perm_code` VALUES (1440978065088843776, 1440977767599443968); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_perm +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_perm`; +CREATE TABLE `zz_sys_perm` ( + `perm_id` bigint(20) NOT NULL COMMENT '权限id', + `module_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '权限所在的权限模块id', + `perm_name` varchar(64) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '权限名称', + `url` varchar(128) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '关联的url', + `show_order` int(11) NOT NULL DEFAULT '0' COMMENT '权限在当前模块下的顺序,由小到大', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`perm_id`) USING BTREE, + KEY `idx_show_order` (`show_order`) USING BTREE, + KEY `idx_module_id` (`module_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统权限表'; + +-- ---------------------------- +-- Records of zz_sys_perm +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_perm` VALUES (1400626748101496832, 1400625224646397952, '显示列表', '/admin/online/onlineDblink/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400626963806162944, 1400625224646397952, '数据表列表', '/admin/online/onlineDblink/listDblinkTables', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400627109692444672, 1400625224646397952, '数据表字段列表', '/admin/online/onlineDblink/listDblinkTableColumns', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400632108514283520, 1400625585851469824, '显示列表', '/admin/online/onlineDict/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400632216169484288, 1400625585851469824, '详情', '/admin/online/onlineDict/view', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400632326538399744, 1400625585851469824, '新增', '/admin/online/onlineDict/add', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400632438635368448, 1400625585851469824, '编辑', '/admin/online/onlineDict/update', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400632511620452352, 1400625585851469824, '删除', '/admin/online/onlineDict/delete', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400632924021198848, 1400625800033603584, '显示列表', '/admin/online/onlineTable/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400632978937221120, 1400625800033603584, '详情', '/admin/online/onlineTable/view', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633026181861376, 1400625800033603584, '新增', '/admin/online/onlineTable/add', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633077717274624, 1400625800033603584, '编辑', '/admin/online/onlineTable/update', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633129688895488, 1400625800033603584, '删除', '/admin/online/onlineTable/delete', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633375525441536, 1400625906245963776, '显示列表', '/admin/online/onlineColumn/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633437093629952, 1400625906245963776, '详情', '/admin/online/onlineColumn/view', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633529678696448, 1400625906245963776, '新增', '/admin/online/onlineColumn/add', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633568027217920, 1400625906245963776, '编辑', '/admin/online/onlineColumn/update', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633612201627648, 1400625906245963776, '删除', '/admin/online/onlineColumn/delete', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633713376628736, 1400625906245963776, '刷新字段', '/admin/online/onlineColumn/refresh', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633798403559424, 1400625906245963776, '字段验证规则列表', '/admin/online/onlineColumn/listOnlineColumnRule', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400633922085195776, 1400625906245963776, '未使用字段验证规则列表', '/admin/online/onlineColumn/listNotInOnlineColumnRule', 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400634012745076736, 1400625906245963776, '添加字段验证规则', '/admin/online/onlineColumn/addOnlineColumnRule', 9, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400634100498305024, 1400625906245963776, '删除字段验证规则', '/admin/online/onlineColumn/deleteOnlineColumnRule', 10, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400634280308117504, 1400625906245963776, '编辑字段验证规则', '/admin/online/onlineColumn/updateOnlineColumnRule', 11, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400634354593435648, 1400625906245963776, '字段验证规则详情', '/admin/online/onlineColumn/viewOnlineColumnRule', 12, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400634559896227840, 1400626018774945792, '显示列表', '/admin/online/onlineRule/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400634613151305728, 1400626018774945792, '详情', '/admin/online/onlineRule/view', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400634651944423424, 1400626018774945792, '新增', '/admin/online/onlineRule/add', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400634693472227328, 1400626018774945792, '编辑', '/admin/online/onlineRule/update', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400634735549485056, 1400626018774945792, '删除', '/admin/online/onlineRule/delete', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635131969933312, 1400625338886656000, '显示列表', '/admin/online/onlinePage/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635267726970880, 1400625338886656000, '页面以及表单列表', '/admin/online/onlinePage/listAllPageAndForm', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635341274091520, 1400625338886656000, '详情', '/admin/online/onlinePage/view', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635378506928128, 1400625338886656000, '新增', '/admin/online/onlinePage/add', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635426808532992, 1400625338886656000, '编辑', '/admin/online/onlinePage/update', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635527698321408, 1400625338886656000, '更新启用状态', '/admin/online/onlinePage/updatePublished', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635581532213248, 1400625338886656000, '删除', '/admin/online/onlinePage/delete', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635661106548736, 1400625338886656000, '页面数据源列表', '/admin/online/onlinePage/listOnlinePageDatasource', 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635757332271104, 1400625338886656000, '未使用页面数据源列表', '/admin/online/onlinePage/listNotInOnlinePageDatasource', 9, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635827347787776, 1400625338886656000, '添加页面数据源', '/admin/online/onlinePage/addOnlinePageDatasource', 10, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635896461529088, 1400625338886656000, '删除页面数据源', '/admin/online/onlinePage/deleteOnlinePageDatasource', 11, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400635963469729792, 1400625338886656000, '编辑页面数据源', '/admin/online/onlinePage/updateOnlinePageDatasource', 12, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636031752998912, 1400625338886656000, '页面数据源详情', '/admin/online/onlinePage/viewOnlinePageDatasource', 13, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636182936686592, 1400626192725315584, '显示列表', '/admin/online/onlineDatasource/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636217728438272, 1400626192725315584, '详情', '/admin/online/onlineDatasource/view', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636258107002880, 1400626192725315584, '新增', '/admin/online/onlineDatasource/add', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636301480300544, 1400626192725315584, '编辑', '/admin/online/onlineDatasource/update', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636338838966272, 1400626192725315584, '删除', '/admin/online/onlineDatasource/delete', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636501900922880, 1400626237478539264, '显示列表', '/admin/online/onlineDatasourceRelation/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636535371468800, 1400626237478539264, '详情', '/admin/online/onlineDatasourceRelation/view', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636571165659136, 1400626237478539264, '新增', '/admin/online/onlineDatasourceRelation/add', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636610403373056, 1400626237478539264, '编辑', '/admin/online/onlineDatasourceRelation/update', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400636656679129088, 1400626237478539264, '删除', '/admin/online/onlineDatasourceRelation/delete', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400637740705386496, 1400626463740268544, '显示列表', '/admin/online/onlineForm/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400637775962705920, 1400626463740268544, '详情', '/admin/online/onlineForm/view', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400637822737584128, 1400626463740268544, '新增', '/admin/online/onlineForm/add', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400637858414333952, 1400626463740268544, '编辑', '/admin/online/onlineForm/update', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400637895328403456, 1400626463740268544, '删除', '/admin/online/onlineForm/delete', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1400637970863624192, 1400626463740268544, '渲染信息', '/admin/online/onlineForm/render', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1413405061278601216, 1413404952566435840, '显示列表', '/admin/online/onlineVirtualColumn/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1413405166471745536, 1413404952566435840, '详情', '/admin/online/onlineVirtualColumn/view', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1413405224021790720, 1413404952566435840, '新增', '/admin/online/onlineVirtualColumn/add', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1413405313788284928, 1413404952566435840, '编辑', '/admin/online/onlineVirtualColumn/update', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1413405352866615296, 1413404952566435840, '删除', '/admin/online/onlineVirtualColumn/delete', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418030338508066816, 1418029566533832704, '显示列表', '/admin/flow/flowCategory/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418030386436378624, 1418029566533832704, '新增', '/admin/flow/flowCategory/add', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418030437971791872, 1418029566533832704, '编辑', '/admin/flow/flowCategory/update', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418030477918343168, 1418029566533832704, '删除', '/admin/flow/flowCategory/delete', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418030533757112320, 1418029566533832704, '详情', '/admin/flow/flowCategory/view', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031006660694016, 1418029615040958464, '显示列表', '/admin/flow/flowEntry/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031078391681024, 1418029615040958464, '新增', '/admin/flow/flowEntry/add', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031120481521664, 1418029615040958464, '编辑', '/admin/flow/flowEntry/update', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031174604820480, 1418029615040958464, '删除', '/admin/flow/flowEntry/delete', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031219706171392, 1418029615040958464, '详情', '/admin/flow/flowEntry/view', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031304779239424, 1418029615040958464, '发布', '/admin/flow/flowEntry/publish', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031515207471104, 1418029615040958464, '流程版本列表', '/admin/flow/flowEntry/listFlowEntryPublish', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031648351457280, 1418029615040958464, '设置主版本', '/admin/flow/flowEntry/updateMainVersion', 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031712788549632, 1418029615040958464, '挂起', '/admin/flow/flowEntry/suspendFlowEntryPublish', 9, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418031801271586816, 1418029615040958464, '激活', '/admin/flow/flowEntry/activateFlowEntryPublish', 10, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418032222232907776, 1418031999276290048, '显示列表', '/admin/flow/flowEntryVariable/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418032258429751296, 1418031999276290048, '新增', '/admin/flow/flowEntryVariable/add', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418032300414734336, 1418031999276290048, '编辑', '/admin/flow/flowEntryVariable/update', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418032344064856064, 1418031999276290048, '删除', '/admin/flow/flowEntryVariable/delete', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418032382409183232, 1418031999276290048, '详情', '/admin/flow/flowEntryVariable/view', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418033804987076608, 1418030256765276160, '流程实例列表', '/admin/flow/flowOperation/listAllHistoricProcessInstance', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418033889183535104, 1418030256765276160, '我的历史流程', '/admin/flow/flowOperation/listHistoricProcessInstance', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418034243434450944, 1418030256765276160, '历史流程数据', '/admin/flow/flowOnlineOperation/viewHistoricProcessInstance', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418035997727264768, 1418030256765276160, '历史流程信息', '/admin/flow/flowOperation/viewInitialHistoricTaskInfo', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418040510253109248, 1418030256765276160, '终止流程', '/admin/flow/flowOperation/stopProcessInstance', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418040574245605376, 1418030256765276160, '删除流程', '/admin/flow/flowOperation/deleteProcessInstance', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418051334564745216, 1418051228918616064, '仅启动流程', '/admin/flow/flowOperation/startOnly', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418051485324808192, 1418051228918616064, '获取启动信息', '/admin/flow/flowOperation/viewInitialTaskInfo', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418051693639110656, 1418051634793025536, '流程审批', '/admin/flow/flowOperation/viewRuntimeTaskInfo', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418054128097038336, 1418051634793025536, '在办流程数据', '/admin/flow/flowOnlineOperation/viewUserTask', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418054519798894592, 1418054414190514176, '获取流程图', '/admin/flow/flowOperation/viewProcessBpmn', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418054618176294912, 1418054414190514176, '审批历史记录列表', '/admin/flow/flowOperation/listFlowTaskComment', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418054792965525504, 1418054414190514176, '流程审批状态', '/admin/flow/flowOperation/viewHighlightFlowData', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418055060981551104, 1418051634793025536, '提交审批数据', '/admin/flow/flowOnlineOperation/submitUserTask', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418056212146032640, 1418051634793025536, '待办任务列表', '/admin/flow/flowOperation/listRuntimeTask', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418056212146032641, 1418051634793025536, '待办任务数量', '/admin/flow/flowOperation/countRuntimeTask', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418079603167072256, 1418054414190514176, '文件上传', '/admin/flow/flowOnlineOperation/upload', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1418079670594703360, 1418054414190514176, '文件下载', '/admin/flow/flowOnlineOperation/download', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1423635764486344704, 1423635643371622400, '已办任务列表', '/admin/flow/flowOperation/listHistoricTask', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1423635851312631808, 1423635643371622400, '已办任务信息', '/admin/flow/flowOperation/viewHistoricTaskInfo', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1423636091033882624, 1423635643371622400, '加签', '/admin/flow/flowOperation/submitConsign', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1423984506028691456, 1418030256765276160, '撤销工单', '/admin/flow/flowOperation/cancelWorkOrder', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213185, 1440911410581213184, '新增', '/admin/upms/sysDept/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213186, 1440911410581213184, '编辑', '/admin/upms/sysDept/update', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213187, 1440911410581213184, '删除', '/admin/upms/sysDept/delete', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213188, 1440911410581213184, '显示列表', '/admin/upms/sysDept/list', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213189, 1440911410581213184, '导出', '/admin/upms/sysDept/export', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213190, 1440911410581213184, '详情', '/admin/upms/sysDept/view', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213191, 1440911410581213184, '打印', '/admin/upms/sysDept/print', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213192, 1440911410581213184, '新增部门岗位', '/admin/upms/sysDept/addSysDeptPost', 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213193, 1440911410581213184, '编辑部门岗位', '/admin/upms/sysDept/updateSysDeptPost', 9, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213194, 1440911410581213184, '移除部门岗位', '/admin/upms/sysDept/deleteSysDeptPost', 10, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213195, 1440911410581213184, '列表显示部门岗位', '/admin/upms/sysDept/listSysDeptPost', 11, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213196, 1440911410581213184, '列表显示未关联部门岗位', '/admin/upms/sysDept/listNotInSysDeptPost', 12, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213197, 1440911410581213184, '详情显示部门岗位', '/admin/upms/sysDept/viewSysDeptPost', 13, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213199, 1440911410581213198, '新增', '/admin/upms/sysUser/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213200, 1440911410581213198, '编辑', '/admin/upms/sysUser/update', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213201, 1440911410581213198, '删除', '/admin/upms/sysUser/delete', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213202, 1440911410581213198, '显示列表', '/admin/upms/sysUser/list', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213203, 1440911410581213198, '导出', '/admin/upms/sysUser/export', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213204, 1440911410581213198, '详情', '/admin/upms/sysUser/view', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213205, 1440911410581213198, '打印', '/admin/upms/sysUser/print', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213206, 1440911410581213198, '重置密码', '/admin/upms/sysUser/resetPassword', 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213207, 1440911410581213198, '用户权限资源分配详情', '/admin/upms/sysUser/listSysPermWithDetail', 9, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213208, 1440911410581213198, '用户权限字分配详情', '/admin/upms/sysUser/listSysPermCodeWithDetail', 10, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213209, 1440911410581213198, '用户菜单分配详情', '/admin/upms/sysUser/listSysMenuWithDetail', 11, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213211, 1440911410581213210, '新增', '/admin/upms/sysRole/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213212, 1440911410581213210, '编辑', '/admin/upms/sysRole/update', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213213, 1440911410581213210, '删除', '/admin/upms/sysRole/delete', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213214, 1440911410581213210, '显示列表', '/admin/upms/sysRole/list', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213215, 1440911410581213210, '详情', '/admin/upms/sysRole/view', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213216, 1440911410581213210, '授权用户', '/admin/upms/sysRole/addUserRole', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213217, 1440911410581213210, '移除用户', '/admin/upms/sysRole/deleteUserRole', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213218, 1440911410581213210, '角色用户列表', '/admin/upms/sysRole/listUserRole', 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213219, 1440911410581213210, '角色未添加用户列表', '/admin/upms/sysRole/listNotInUserRole', 9, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213220, 1440911410581213210, '角色权限资源分配详情', '/admin/upms/sysRole/listSysPermWithDetail', 10, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213221, 1440911410581213210, '角色权限字分配详情', '/admin/upms/sysRole/listSysPermCodeWithDetail', 11, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213223, 1440911410581213222, '新增', '/admin/upms/sysDataPerm/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213224, 1440911410581213222, '编辑', '/admin/upms/sysDataPerm/update', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213225, 1440911410581213222, '删除', '/admin/upms/sysDataPerm/delete', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213226, 1440911410581213222, '显示列表', '/admin/upms/sysDataPerm/list', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213227, 1440911410581213222, '详情', '/admin/upms/sysDataPerm/view', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213228, 1440911410581213222, '授权用户', '/admin/upms/sysDataPerm/addDataPermUser', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213229, 1440911410581213222, '移除用户', '/admin/upms/sysDataPerm/deleteDataPermUser', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213230, 1440911410581213222, '数据权限用户列表', '/admin/upms/sysDataPerm/listDataPermUser', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213231, 1440911410581213222, '数据权限未添加用户列表', '/admin/upms/sysDataPerm/listNotInDataPermUser', 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213233, 1440911410581213232, '新增', '/admin/upms/sysPost/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213234, 1440911410581213232, '编辑', '/admin/upms/sysPost/update', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213235, 1440911410581213232, '删除', '/admin/upms/sysPost/delete', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213236, 1440911410581213232, '显示列表', '/admin/upms/sysPost/list', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213237, 1440911410581213232, '详情', '/admin/upms/sysPost/view', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213239, 1440911410581213238, '新增', '/admin/upms/sysMenu/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213240, 1440911410581213238, '删除', '/admin/upms/sysMenu/delete', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213241, 1440911410581213238, '编辑', '/admin/upms/sysMenu/update', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213242, 1440911410581213238, '显示列表', '/admin/upms/sysMenu/list', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213243, 1440911410581213238, '详情', '/admin/upms/sysMenu/view', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213244, 1440911410581213238, '菜单权限资源分配详情', '/admin/upms/sysMenu/listSysPermWithDetail', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213245, 1440911410581213238, '菜单用户分配详情', '/admin/upms/sysMenu/listSysUserWithDetail', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213247, 1440911410581213246, '新增', '/admin/upms/sysPermCode/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213248, 1440911410581213246, '编辑', '/admin/upms/sysPermCode/update', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213249, 1440911410581213246, '删除', '/admin/upms/sysPermCode/delete', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213250, 1440911410581213246, '显示列表', '/admin/upms/sysPermCode/list', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213251, 1440911410581213246, '详情', '/admin/upms/sysPermCode/view', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213252, 1440911410581213246, '权限字用户分配详情', '/admin/upms/sysPermCode/listSysUserWithDetail', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213253, 1440911410581213246, '权限字角色分配详情', '/admin/upms/sysPermCode/listSysRoleWithDetail', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213255, 1440911410581213254, '新增', '/admin/upms/sysPermModule/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213256, 1440911410581213254, '编辑', '/admin/upms/sysPermModule/update', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213257, 1440911410581213254, '删除', '/admin/upms/sysPermModule/delete', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213258, 1440911410581213254, '显示列表', '/admin/upms/sysPermModule/list', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213259, 1440911410581213254, '显示全部', '/admin/upms/sysPermModule/listAll', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213261, 1440911410581213260, '新增', '/admin/upms/sysPerm/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213262, 1440911410581213260, '编辑', '/admin/upms/sysPerm/update', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213263, 1440911410581213260, '删除', '/admin/upms/sysPerm/delete', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213264, 1440911410581213260, '显示列表', '/admin/upms/sysPerm/list', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213265, 1440911410581213260, '详情', '/admin/upms/sysPerm/view', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213266, 1440911410581213260, '权限资源用户分配详情', '/admin/upms/sysPerm/listSysUserWithDetail', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213267, 1440911410581213260, '权限资源角色分配详情', '/admin/upms/sysPerm/listSysRoleWithDetail', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213268, 1440911410581213260, '权限资源菜单分配详情', '/admin/upms/sysPerm/listSysMenuWithDetail', 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213271, 1440911410581213270, '新增', '/admin/app/areaCode/add', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213272, 1440911410581213270, '编辑', '/admin/app/areaCode/update', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213273, 1440911410581213270, '删除', '/admin/app/areaCode/delete', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213274, 1440911410581213270, '同步缓存', '/admin/app/areaCode/reloadCachedData', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213276, 1440911410581213275, '显示列表', '/admin/upms/loginUser/list', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440911410581213277, 1440911410581213275, '删除', '/admin/upms/loginUser/delete', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440975727276068864, 1440975375537541120, '启动并提交数据', '/admin/flow/flowOnlineOperation/startAndTakeUserTask/flowLeave', 1, 1440911410581213417, '2021-09-23 17:46:00', 1440911410581213417, '2021-09-23 17:46:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440975781374201856, 1440975375537541120, '工单列表', '/admin/flow/flowOnlineOperation/listWorkOrder/flowLeave', 2, 1440911410581213417, '2021-09-23 17:46:13', 1440911410581213417, '2021-09-23 17:46:13', 1); +INSERT INTO `zz_sys_perm` VALUES (1440975850529886208, 1440975429199466496, '启动并提交数据', '/admin/flow/flowOnlineOperation/startAndTakeUserTask/flowSubmit', 1, 1440911410581213417, '2021-09-23 17:46:29', 1440911410581213417, '2021-09-23 17:46:29', 1); +INSERT INTO `zz_sys_perm` VALUES (1440975895627042816, 1440975429199466496, '工单列表', '/admin/flow/flowOnlineOperation/listWorkOrder/flowSubmit', 2, 1440911410581213417, '2021-09-23 17:46:40', 1440911410581213417, '2021-09-23 17:46:40', 1); +INSERT INTO `zz_sys_perm` VALUES (1440975979374710784, 1440975469133434880, '启动并提交数据', '/admin/flow/flowOnlineOperation/startAndTakeUserTask/flowContract', 1, 1440911410581213417, '2021-09-23 17:47:00', 1440911410581213417, '2021-09-23 17:47:00', 1); +INSERT INTO `zz_sys_perm` VALUES (1440976024471867392, 1440975469133434880, '工单列表', '/admin/flow/flowOnlineOperation/listWorkOrder/flowContract', 2, 1440911410581213417, '2021-09-23 17:47:11', 1440911410581213417, '2021-09-23 17:47:11', 1); +INSERT INTO `zz_sys_perm` VALUES (1440976144311521280, 1440975527128076288, '启动并提交数据', '/admin/flow/flowOnlineOperation/startAndTakeUserTask/flowConSign', 1, 1440911410581213417, '2021-09-23 17:47:40', 1440911410581213417, '2021-09-23 17:47:40', 1); +INSERT INTO `zz_sys_perm` VALUES (1440976188553039872, 1440975527128076288, '工单列表', '/admin/flow/flowOnlineOperation/listWorkOrder/flowConSign', 2, 1440911410581213417, '2021-09-23 17:47:50', 1440911410581213417, '2021-09-23 17:47:50', 1); +INSERT INTO `zz_sys_perm` VALUES (1440976259415805952, 1440975571776442368, '启动并提交数据', '/admin/flow/flowOnlineOperation/startAndTakeUserTask/flowTranslate', 1, 1440911410581213417, '2021-09-23 17:48:07', 1440911410581213417, '2021-09-23 17:48:07', 1); +INSERT INTO `zz_sys_perm` VALUES (1440976310951219200, 1440975571776442368, '工单列表', '/admin/flow/flowOnlineOperation/listWorkOrder/flowTranslate', 2, 1440911410581213417, '2021-09-23 17:48:19', 1440911410581213417, '2021-09-23 17:48:19', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_perm_code +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_perm_code`; +CREATE TABLE `zz_sys_perm_code` ( + `perm_code_id` bigint(20) NOT NULL COMMENT '主键Id', + `parent_id` bigint(20) DEFAULT NULL COMMENT '上级权限字Id', + `perm_code` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限字标识(一般为有含义的英文字符串)', + `perm_code_type` int(11) NOT NULL COMMENT '类型(0: 表单 1: UI片段 2: 操作)', + `show_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '显示名称', + `show_order` int(11) NOT NULL COMMENT '显示顺序(数值越小,越靠前)', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`perm_code_id`), + UNIQUE KEY `idx_perm_code` (`perm_code`) USING BTREE, + KEY `idx_parent_id` (`parent_id`) USING BTREE, + KEY `idx_show_order` (`show_order`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统权限资源表'; + +-- ---------------------------- +-- Records of zz_sys_perm_code +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_perm_code` VALUES (1400638673195634688, NULL, 'formOnlineDict', 0, '在线表单字典管理', 12000, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1400638885750378496, 1400638673195634688, 'formOnlineDict:fragmentOnlineDict', 1, '在线表单字典管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1400639030462255104, NULL, 'formOnlinePage', 0, '在线表单表单管理', 12100, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1400639252747784192, 1400639030462255104, 'formOnlinePage:fragmentOnlinePage', 1, '在线表单表单管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418046729906819072, NULL, 'formFlowCategory', 0, '流程分类', 13000, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418046848794365952, 1418046729906819072, 'formFlowCategory:formFlowCategory', 1, '流程分类', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418046986677915648, 1418046848794365952, 'formFlowCategory:formFlowCategory:add', 2, '新增', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418047095188754432, 1418046848794365952, 'formFlowCategory:formFlowCategory:update', 2, '编辑', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418047182946177024, 1418046848794365952, 'formFlowCategory:formFlowCategory:delete', 2, '删除', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418048134759583744, NULL, 'formFlowEntry', 0, '流程设计', 13100, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418048205177753600, 1418048134759583744, 'formFlowEntry:formFlowEntry', 1, '流程设计', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418048335343783936, 1418048205177753600, 'formFlowEntry:formFlowEntry:update', 2, '编辑', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418048872671875072, NULL, 'formAllInstance', 0, '流程实例', 13200, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418049164754817024, 1418048872671875072, 'formAllInstance:formAllInstance', 1, '流程实例', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418049287106859008, 1418049164754817024, 'formAllInstance:formAllInstance:stop', 2, '终止', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418049398776008704, 1418049164754817024, 'formAllInstance:formAllInstance:delete', 2, '删除', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418050031436435456, NULL, 'formMyTask', 0, '我的待办', 13300, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418050322282057728, 1418050031436435456, 'formMyTask:formMyTask', 1, '我的待办', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418050797706416128, 1418048205177753600, 'formFlowEntry:formFlowEntry:start', 2, '启动', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-24 09:28:39', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418057020824621056, NULL, 'formMyHistoryTask', 0, '历史流程', 13400, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1418057346877231104, 1418057020824621056, 'formMyHistoryTask:formMyHistoryTask', 1, '历史流程', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1423636498195943424, NULL, 'formMyApprovedTask', 0, '已办任务', 13500, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1423637544578322432, 1423636498195943424, 'formMyApprovedTask:formMyApprovedTask', 1, '已办任务', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213286, NULL, 'formSysUser', 0, '用户管理', 10000, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213287, 1440911410581213286, 'formSysUser:fragmentSysUser', 1, '用户管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213288, 1440911410581213287, 'formSysUser:fragmentSysUser:add', 2, '新增', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213289, 1440911410581213287, 'formSysUser:fragmentSysUser:update', 2, '编辑', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213290, 1440911410581213287, 'formSysUser:fragmentSysUser:delete', 2, '删除', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213291, 1440911410581213287, 'formSysUser:fragmentSysUser:resetPassword', 2, '重置密码', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213292, 1440911410581213287, 'formSysUser:fragmentSysUser:listSysUserPermDetail', 2, '权限详情', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213300, NULL, 'formSysDept', 0, '部门管理', 10100, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213301, 1440911410581213300, 'formSysDept:fragmentSysDept', 1, '部门管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213302, 1440911410581213301, 'formSysDept:fragmentSysDept:add', 2, '新增', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213303, 1440911410581213301, 'formSysDept:fragmentSysDept:update', 2, '编辑', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213304, 1440911410581213301, 'formSysDept:fragmentSysDept:delete', 2, '删除', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213305, 1440911410581213301, 'formSysDept:fragmentSysDept:editPost', 2, '设置岗位', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213306, 1440911410581213301, 'formSysDept:fragmentSysDept:viewPost', 2, '查看岗位', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213318, NULL, 'formSysRole', 0, '角色管理', 10200, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213319, 1440911410581213318, 'formSysRole:fragmentSysRole', 1, '角色管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213320, 1440911410581213318, 'formSysRole:fragmentSysRoleUser', 1, '用户授权', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213321, 1440911410581213319, 'formSysRole:fragmentSysRole:add', 2, '新增', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213322, 1440911410581213319, 'formSysRole:fragmentSysRole:update', 2, '编辑', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213323, 1440911410581213319, 'formSysRole:fragmentSysRole:delete', 2, '删除', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213324, 1440911410581213319, 'formSysRole:fragmentSysRole:listSysRolePermDetail', 2, '权限详情', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213325, 1440911410581213320, 'formSysRole:fragmentSysRoleUser:addUserRole', 2, '授权用户', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213326, 1440911410581213320, 'formSysRole:fragmentSysRoleUser:deleteUserRole', 2, '移除用户', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213337, NULL, 'formSysDataPerm', 0, '数据权限管理', 10400, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213338, 1440911410581213337, 'formSysDataPerm:fragmentSysDataPerm', 1, '数据权限管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213339, 1440911410581213337, 'formSysDataPerm:fragmentSysDataPermUser', 1, '用户授权', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213340, 1440911410581213338, 'formSysDataPerm:fragmentSysDataPerm:add', 2, '新增', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213341, 1440911410581213338, 'formSysDataPerm:fragmentSysDataPerm:update', 2, '编辑', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213342, 1440911410581213338, 'formSysDataPerm:fragmentSysDataPerm:delete', 2, '删除', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213343, 1440911410581213339, 'formSysDataPerm:fragmentSysDataPermUser:addDataPermUser', 2, '授权用户', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213344, 1440911410581213339, 'formSysDataPerm:fragmentSysDataPermUser:deleteDataPermUser', 2, '移除用户', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213351, NULL, 'formSysMenu', 0, '菜单管理', 10600, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213352, 1440911410581213351, 'formSysMenu:fragmentSysMenu', 1, '菜单管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213353, 1440911410581213352, 'formSysMenu:fragmentSysMenu:add', 2, '新增', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213354, 1440911410581213352, 'formSysMenu:fragmentSysMenu:update', 2, '编辑', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213355, 1440911410581213352, 'formSysMenu:fragmentSysMenu:delete', 2, '删除', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213356, 1440911410581213352, 'formSysMenu:fragmentSysMenu:listSysMenuPermDetail', 2, '权限详情', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213363, NULL, 'formSysPermCode', 0, '权限字管理', 10700, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213364, 1440911410581213363, 'formSysPermCode:fragmentSysPermCode', 1, '权限字管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213365, 1440911410581213364, 'formSysPermCode:fragmentSysPermCode:add', 2, '新增', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213366, 1440911410581213364, 'formSysPermCode:fragmentSysPermCode:update', 2, '编辑', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213367, 1440911410581213364, 'formSysPermCode:fragmentSysPermCode:delete', 2, '删除', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213368, 1440911410581213364, 'formSysPermCode:fragmentSysPermCode:listSysPermCodePermDetail', 2, '权限详情', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213378, NULL, 'formSysPerm', 0, '权限管理', 10800, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213379, 1440911410581213378, 'formSysPerm:fragmentSysPerm', 1, '权限管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213380, 1440911410581213379, 'formSysPerm:fragmentSysPerm:addPermModule', 2, '新增模块', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213381, 1440911410581213379, 'formSysPerm:fragmentSysPerm:updatePermModule', 2, '编辑模块', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213382, 1440911410581213379, 'formSysPerm:fragmentSysPerm:deletePermModule', 2, '删除模块', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213383, 1440911410581213379, 'formSysPerm:fragmentSysPerm:addPerm', 2, '新增权限', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213384, 1440911410581213379, 'formSysPerm:fragmentSysPerm:updatePerm', 2, '编辑权限', 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213385, 1440911410581213379, 'formSysPerm:fragmentSysPerm:deletePerm', 2, '删除权限', 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213386, 1440911410581213379, 'formSysPerm:fragmentSysPerm:listSysPermPermDetail', 2, '权限详情', 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213393, NULL, 'formSysDict', 0, '字典管理', 10900, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213394, 1440911410581213393, 'formSysDict:fragmentSysDict', 1, '字典管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213395, 1440911410581213394, 'formSysDict:fragmentSysDict:add', 2, '新增', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213396, 1440911410581213394, 'formSysDict:fragmentSysDict:update', 2, '编辑', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213397, 1440911410581213394, 'formSysDict:fragmentSysDict:delete', 2, '删除', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213398, 1440911410581213394, 'formSysDict:fragmentSysDict:reloadCache', 2, '同步缓存', 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213402, NULL, 'formSysLoginUser', 0, '在线用户', 11200, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213403, 1440911410581213402, 'formSysLoginUser:fragmentLoginUser', 1, '在线用户', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213404, 1440911410581213403, 'formSysLoginUser:fragmentLoginUser:delete', 2, '强制下线', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213411, NULL, 'formSysPost', 0, '岗位管理', 10150, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213412, 1440911410581213411, 'formSysPost:fragmentSysPost', 1, '岗位管理', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213413, 1440911410581213412, 'formSysPost:fragmentSysPost:add', 2, '新增', 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213414, 1440911410581213412, 'formSysPost:fragmentSysPost:update', 2, '编辑', 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440911410581213415, 1440911410581213412, 'formSysPost:fragmentSysPost:delete', 2, '删除', 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440976898661289984, NULL, 'formFlowLeave', 0, '请假申请', 14000, 1440911410581213417, '2021-09-23 17:50:39', 1440911410581213417, '2021-09-23 17:50:39', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440976998183735296, NULL, 'formContractOrder', 0, '合同工单', 14100, 1440911410581213417, '2021-09-23 17:51:03', 1440911410581213417, '2021-09-23 17:51:03', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440977405874278400, 1440976898661289984, 'formFlowLeave:formFlowLeave', 1, '请假申请', 1, 1440911410581213417, '2021-09-23 17:52:40', 1440911410581213417, '2021-09-23 17:52:40', 1); +INSERT INTO `zz_sys_perm_code` VALUES (1440977767599443968, 1440976998183735296, 'formContractOrder:formContractOrder', 1, '合同工单', 1, 1440911410581213417, '2021-09-23 17:54:07', 1440911410581213417, '2021-09-23 17:54:07', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_perm_code_perm +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_perm_code_perm`; +CREATE TABLE `zz_sys_perm_code_perm` ( + `perm_code_id` bigint(20) NOT NULL COMMENT '权限字Id', + `perm_id` bigint(20) NOT NULL COMMENT '权限id', + PRIMARY KEY (`perm_code_id`,`perm_id`), + KEY `idx_perm_id` (`perm_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统权限字和权限资源关联表'; + +-- ---------------------------- +-- Records of zz_sys_perm_code_perm +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400638885750378496, 1400626748101496832); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400626748101496832); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400638885750378496, 1400626963806162944); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400626963806162944); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400638885750378496, 1400627109692444672); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400627109692444672); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400638885750378496, 1400632108514283520); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400632108514283520); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400638885750378496, 1400632216169484288); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400632216169484288); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400638885750378496, 1400632326538399744); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400638885750378496, 1400632438635368448); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400638885750378496, 1400632511620452352); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400632924021198848); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400632978937221120); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633026181861376); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633077717274624); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633129688895488); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633375525441536); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1400633375525441536); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633437093629952); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633529678696448); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633568027217920); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633612201627648); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633713376628736); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633798403559424); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400633922085195776); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400634012745076736); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400634100498305024); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400634280308117504); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400634354593435648); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400634559896227840); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400634613151305728); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400634651944423424); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400634693472227328); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400634735549485056); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635131969933312); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1400635131969933312); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635267726970880); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635341274091520); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635378506928128); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635426808532992); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635527698321408); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635581532213248); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635661106548736); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1400635661106548736); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635757332271104); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635827347787776); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635896461529088); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400635963469729792); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636031752998912); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636182936686592); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636217728438272); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636258107002880); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636301480300544); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636338838966272); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636501900922880); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1400636501900922880); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636535371468800); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636571165659136); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636610403373056); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400636656679129088); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400637740705386496); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1400637740705386496); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400637775962705920); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1423637544578322432, 1400637775962705920); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1400637775962705920); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1400637775962705920); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400637822737584128); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400637858414333952); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400637895328403456); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1400637970863624192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1400637970863624192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1400637970863624192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418057346877231104, 1400637970863624192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1423637544578322432, 1400637970863624192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1400637970863624192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1400637970863624192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1413405061278601216); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1413405061278601216); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1413405166471745536); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1413405224021790720); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1413405313788284928); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1400639252747784192, 1413405352866615296); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418026612762349572); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418026612762349580); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418046848794365952, 1418030338508066816); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418046986677915648, 1418030386436378624); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418047095188754432, 1418030437971791872); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418047182946177024, 1418030477918343168); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418047095188754432, 1418030533757112320); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048205177753600, 1418031006660694016); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418031078391681024); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418031120481521664); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418031174604820480); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418031219706171392); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418031304779239424); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418031515207471104); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418031648351457280); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418031712788549632); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418031801271586816); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418032222232907776); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418032258429751296); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418032300414734336); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418032344064856064); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418032382409183232); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418049164754817024, 1418033804987076608); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418057346877231104, 1418033889183535104); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418049164754817024, 1418034243434450944); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418057346877231104, 1418034243434450944); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1423637544578322432, 1418034243434450944); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418034243434450944); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418034243434450944); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418049164754817024, 1418035997727264768); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418057346877231104, 1418035997727264768); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418035997727264768); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418035997727264768); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418049287106859008, 1418040510253109248); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418049398776008704, 1418040574245605376); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1418051334564745216); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418051334564745216); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418051334564745216); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1418051485324808192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418051485324808192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418051485324808192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418051693639110656); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418051693639110656); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418051693639110656); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418054128097038336); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418054128097038336); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418054128097038336); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1418054519798894592); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418049164754817024, 1418054519798894592); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418054519798894592); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1418054519798894592); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418057346877231104, 1418054519798894592); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1423637544578322432, 1418054519798894592); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418054519798894592); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418054519798894592); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418054618176294912); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418057346877231104, 1418054618176294912); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1423637544578322432, 1418054618176294912); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418054618176294912); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418054618176294912); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418049164754817024, 1418054792965525504); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418054792965525504); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418057346877231104, 1418054792965525504); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1423637544578322432, 1418054792965525504); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418054792965525504); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418054792965525504); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418055060981551104); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418055060981551104); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418055060981551104); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418056212146032640); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418079603167072256); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1418079603167072256); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418079603167072256); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418079603167072256); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050322282057728, 1418079670594703360); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1418079670594703360); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418057346877231104, 1418079670594703360); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1418079670594703360); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1418079670594703360); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1423637544578322432, 1423635764486344704); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1423637544578322432, 1423635851312631808); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1423637544578322432, 1423636091033882624); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1423636091033882624); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1423636091033882624); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1423984506028691456); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1423984506028691456); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213302, 1440911410581213185); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213303, 1440911410581213186); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213304, 1440911410581213187); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213288, 1440911410581213188); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213289, 1440911410581213188); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213301, 1440911410581213188); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213301, 1440911410581213189); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213303, 1440911410581213190); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213303, 1440911410581213191); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213305, 1440911410581213192); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213305, 1440911410581213193); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213305, 1440911410581213194); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213305, 1440911410581213195); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213306, 1440911410581213195); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213305, 1440911410581213196); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213305, 1440911410581213197); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213306, 1440911410581213197); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213288, 1440911410581213199); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213289, 1440911410581213200); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213290, 1440911410581213201); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418048335343783936, 1440911410581213202); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213287, 1440911410581213202); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213287, 1440911410581213203); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213289, 1440911410581213204); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213289, 1440911410581213205); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213291, 1440911410581213206); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213292, 1440911410581213207); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213292, 1440911410581213208); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213292, 1440911410581213209); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213321, 1440911410581213211); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213322, 1440911410581213212); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213323, 1440911410581213213); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213288, 1440911410581213214); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213289, 1440911410581213214); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213319, 1440911410581213214); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213322, 1440911410581213215); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213325, 1440911410581213216); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213326, 1440911410581213217); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213320, 1440911410581213218); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213325, 1440911410581213219); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213324, 1440911410581213220); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213324, 1440911410581213221); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213340, 1440911410581213223); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213341, 1440911410581213224); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213342, 1440911410581213225); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213288, 1440911410581213226); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213289, 1440911410581213226); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213338, 1440911410581213226); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213341, 1440911410581213227); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213343, 1440911410581213228); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213344, 1440911410581213229); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213339, 1440911410581213230); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213343, 1440911410581213231); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213413, 1440911410581213233); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213414, 1440911410581213234); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213415, 1440911410581213235); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213412, 1440911410581213236); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213414, 1440911410581213237); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213353, 1440911410581213239); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213355, 1440911410581213240); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213354, 1440911410581213241); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213321, 1440911410581213242); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213322, 1440911410581213242); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213352, 1440911410581213242); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213354, 1440911410581213243); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213356, 1440911410581213244); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213356, 1440911410581213245); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213365, 1440911410581213247); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213366, 1440911410581213248); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213367, 1440911410581213249); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213353, 1440911410581213250); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213354, 1440911410581213250); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213364, 1440911410581213250); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213366, 1440911410581213251); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213368, 1440911410581213252); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213368, 1440911410581213253); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213380, 1440911410581213255); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213381, 1440911410581213256); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213382, 1440911410581213257); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213379, 1440911410581213258); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213365, 1440911410581213259); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213366, 1440911410581213259); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213379, 1440911410581213259); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213383, 1440911410581213261); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213384, 1440911410581213262); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213385, 1440911410581213263); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213379, 1440911410581213264); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213384, 1440911410581213265); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213386, 1440911410581213266); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213386, 1440911410581213267); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213386, 1440911410581213268); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213394, 1440911410581213271); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213394, 1440911410581213272); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213394, 1440911410581213273); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213394, 1440911410581213274); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213403, 1440911410581213276); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440911410581213404, 1440911410581213277); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1440975727276068864); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1440975727276068864); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977405874278400, 1440975781374201856); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1440975850529886208); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1440975979374710784); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1440975979374710784); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1440977767599443968, 1440976024471867392); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1440976144311521280); +INSERT INTO `zz_sys_perm_code_perm` VALUES (1418050797706416128, 1440976259415805952); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_perm_module +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_perm_module`; +CREATE TABLE `zz_sys_perm_module` ( + `module_id` bigint(20) NOT NULL COMMENT '权限模块id', + `parent_id` bigint(20) DEFAULT '0' COMMENT '上级权限模块id', + `module_name` varchar(64) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '权限模块名称', + `module_type` int(11) NOT NULL COMMENT '模块类型(0: 普通模块 1: Controller模块)', + `show_order` int(11) NOT NULL DEFAULT '0' COMMENT '权限模块在当前层级下的顺序,由小到大', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`module_id`) USING BTREE, + KEY `idx_show_order` (`show_order`) USING BTREE, + KEY `idx_parent_id` (`parent_id`) USING BTREE, + KEY `idx_module_type` (`module_type`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统权限模块表'; + +-- ---------------------------- +-- Records of zz_sys_perm_module +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_perm_module` VALUES (1400625106979393536, NULL, '在线表单', 0, 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1400625224646397952, 1400625106979393536, '数据库连接', 1, 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1400625338886656000, 1400625106979393536, '页面管理', 1, 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1400625585851469824, 1400625106979393536, '在线表单字典管理', 1, 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1400625800033603584, 1400625106979393536, '数据表管理', 1, 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1400625906245963776, 1400625106979393536, '数据表字段', 1, 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1400626018774945792, 1400625106979393536, '字段验证规则', 1, 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1400626192725315584, 1400625106979393536, '数据源管理', 1, 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1400626237478539264, 1400625106979393536, '数据源关联', 1, 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1400626463740268544, 1400625106979393536, '表单管理', 1, 9, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1401532052901203970, NULL, '用户权限', 0, 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1401532056508305408, NULL, '系统配置', 0, 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1401532056508305409, NULL, '缺省分组', 0, 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1413404952566435840, 1400625106979393536, '虚拟字段管理', 1, 10, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1418028920103505920, NULL, '流程管理', 0, 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1418029566533832704, 1418028920103505920, '流程分类', 1, 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1418029615040958464, 1418028920103505920, '流程设计', 1, 2, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1418030256765276160, 1418028920103505920, '流程操作', 1, 4, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1418031999276290048, 1418028920103505920, '流程变量', 1, 3, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1418038955105849344, NULL, '工单列表', 0, 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1418051228918616064, 1418028920103505920, '启动流程', 1, 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1418051634793025536, 1418028920103505920, '审批流程', 1, 6, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1418054414190514176, 1418028920103505920, '流程审批数据', 1, 7, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1423635643371622400, 1418028920103505920, '已办任务', 1, 8, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213184, 1401532052901203970, '部门管理', 1, 0, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213198, 1401532052901203970, '用户管理', 1, 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213210, 1401532052901203970, '角色管理', 1, 10, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213222, 1401532052901203970, '数据权限管理', 1, 15, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213232, 1401532052901203970, '岗位管理', 1, 20, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213238, 1401532052901203970, '菜单管理', 1, 25, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213246, 1401532052901203970, '权限字管理', 1, 30, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213254, 1401532052901203970, '权限模块管理', 1, 35, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213260, 1401532052901203970, '权限资源管理', 1, 40, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213269, 1401532056508305408, '字典管理', 0, 0, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213270, 1440911410581213269, '行政区划', 1, 1, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440911410581213275, 1401532056508305408, '在线用户', 1, 5, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440975375537541120, 1418038955105849344, '请假申请', 1, 1, 1440911410581213417, '2021-09-23 17:44:36', 1440911410581213417, '2021-09-23 17:44:36', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440975429199466496, 1418038955105849344, '报销申请', 1, 2, 1440911410581213417, '2021-09-23 17:44:49', 1440911410581213417, '2021-09-23 17:44:49', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440975469133434880, 1418038955105849344, '合同审批', 1, 3, 1440911410581213417, '2021-09-23 17:44:59', 1440911410581213417, '2021-09-23 17:44:59', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440975527128076288, 1418038955105849344, '多实例加签', 1, 4, 1440911410581213417, '2021-09-23 17:45:12', 1440911410581213417, '2021-09-23 17:45:12', 1); +INSERT INTO `zz_sys_perm_module` VALUES (1440975571776442368, 1418038955105849344, '转办流程', 1, 5, 1440911410581213417, '2021-09-23 17:45:23', 1440911410581213417, '2021-09-23 17:45:32', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_perm_whitelist +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_perm_whitelist`; +CREATE TABLE `zz_sys_perm_whitelist` ( + `perm_url` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限资源的url', + `module_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '权限资源所属模块名字(通常是Controller的名字)', + `perm_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '权限的名称', + PRIMARY KEY (`perm_url`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='权限资源白名单表(认证用户均可访问的url资源)'; + +-- ---------------------------- +-- Records of zz_sys_perm_whitelist +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/areaCode/listAll', '行政区划', '字典全部列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/areaCode/listDict', '行政区划', '行政区划列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/areaCode/listDictByIds', '行政区划', '行政区划批量Id列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/areaCode/listDictByParentId', '行政区划', '行政区划过滤列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/flow/flowCategory/listDict', '流程管理', '流程分类字典'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/flow/flowEntry/listDict', '流程管理', '流程字典'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/flow/flowEntry/viewDict', '流程管理', '流程部分数据查看'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/flow/flowOnlineOperation/listFlowEntryForm', '流程管理', '流程列表包含在线表单列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/flow/flowOperation/countRuntimeTask', '流程管理', '待办任务列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/online/onlineOperation/listDict', '在线表单', '在线表单字典'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/login/doLogout', '登录模块', '退出登陆'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/login/getLoginInfo', '登录模块', '获取登录信息'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/sysDept/listDict', '部门管理', '部门字典字典列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/sysDept/listDictByIds', '部门管理', '部门字典字典批量Id列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/sysDept/listDictByParentId', '部门管理', '部门字典下一级字典列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/sysDept/listSysDeptPostWithRelation', '系统管理', '部门岗位关联列表'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/sysPost/listDict', '系统管理', '岗位字典接口'); +INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/sysPost/listDictByIds', '系统管理', '岗位字典接口'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_post +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_post`; +CREATE TABLE `zz_sys_post` ( + `post_id` bigint(20) NOT NULL COMMENT '岗位Id', + `post_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '岗位名称', + `level` int(11) NOT NULL COMMENT '岗位层级,数值越小级别越高', + `leader_post` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否领导岗位', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`post_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_sys_post +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_post` VALUES (1440963890539139072, '总经理', 1, b'1', 1440911410581213417, '2021-09-23 16:58:58', 1440911410581213417, '2021-09-23 16:59:27', 1); +INSERT INTO `zz_sys_post` VALUES (1440964040611336192, '副经理', 2, b'1', 1440911410581213417, '2021-09-23 16:59:34', 1440911410581213417, '2021-09-23 16:59:34', 1); +INSERT INTO `zz_sys_post` VALUES (1440964097913917440, '组长', 10, b'1', 1440911410581213417, '2021-09-23 16:59:47', 1440911410581213417, '2021-09-23 16:59:47', 1); +INSERT INTO `zz_sys_post` VALUES (1440964131539652608, '副组长', 11, b'1', 1440911410581213417, '2021-09-23 16:59:55', 1440911410581213417, '2021-09-23 16:59:55', 1); +INSERT INTO `zz_sys_post` VALUES (1440964157770829824, '组员', 20, b'0', 1440911410581213417, '2021-09-23 17:00:02', 1440911410581213417, '2021-09-23 17:00:02', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_role`; +CREATE TABLE `zz_sys_role` ( + `role_id` bigint(20) NOT NULL COMMENT '主键Id', + `role_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '角色名称', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`role_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统角色表'; + +-- ---------------------------- +-- Records of zz_sys_role +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_role` VALUES (1440965195903012864, '查看全部', 1440911410581213417, '2021-09-23 17:04:09', 1440911410581213417, '2021-09-24 09:25:49', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_role_menu`; +CREATE TABLE `zz_sys_role_menu` ( + `role_id` bigint(20) NOT NULL COMMENT '角色Id', + `menu_id` bigint(20) NOT NULL COMMENT '菜单Id', + PRIMARY KEY (`role_id`,`menu_id`) USING BTREE, + KEY `idx_menu_id` (`menu_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='角色与菜单对应关系表'; + +-- ---------------------------- +-- Records of zz_sys_role_menu +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1392786476428693504); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1392786549942259712); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1392786950682841088); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532054578925568); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532055971434496); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532055971434497); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532055971434498); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532055971434499); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532055971434500); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532055971434501); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532055971434502); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532055971434503); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1401532055971434504); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418057714138877952); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418057835631087616); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418058049951633408); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418058115667988480); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418058170542067712); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418058289182150656); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418058515099947008); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418058602723151872); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418058744037642240); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418058844164067328); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418058907674218496); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418059005175009280); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418059167532322816); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1418059283920064512); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1423161217970606080); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1433040549035642880); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213280); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213281); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213282); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213283); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213284); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213285); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213294); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213295); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213296); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213297); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213298); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213299); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213308); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213309); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213310); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213311); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213312); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213313); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213314); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213315); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213316); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213317); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213328); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213329); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213330); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213331); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213332); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213333); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213334); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213335); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213336); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213346); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213347); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213348); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213349); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213350); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213358); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213359); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213360); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213361); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213362); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213370); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213371); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213372); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213373); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213374); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213375); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213376); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213377); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213388); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213389); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213390); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213391); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213392); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213400); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213401); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213406); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213407); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213408); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213409); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440911410581213410); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440973980537196544); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974056105971712); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974056110166016); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974056114360320); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974134195523584); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974134199717888); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974134203912192); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974233613111296); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974233617305600); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974233621499904); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974310754750464); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440974580402360320); +INSERT INTO `zz_sys_role_menu` VALUES (1440965195903012864, 1440978065088843776); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_user`; +CREATE TABLE `zz_sys_user` ( + `user_id` bigint(20) NOT NULL COMMENT '主键Id', + `login_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '用户登录名称', + `password` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '密码', + `show_name` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '用户显示名称', + `dept_id` bigint(20) NOT NULL COMMENT '用户所在部门Id', + `user_type` int(11) NOT NULL COMMENT '用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)', + `head_image_url` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户头像的Url', + `user_status` int(11) NOT NULL COMMENT '状态(0: 正常 1: 锁定)', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者Id', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL COMMENT '删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`user_id`) USING BTREE, + UNIQUE KEY `uk_login_name` (`login_name`) USING BTREE, + KEY `idx_dept_id` (`dept_id`) USING BTREE, + KEY `idx_status` (`user_status`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统用户表'; + +-- ---------------------------- +-- Records of zz_sys_user +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_user` VALUES (1440911410581213417, 'admin', '$2a$10$GT/GXfypSJ.2f7.npoAAHuINPkC/VJttDGYBB3xyQqWt1bi9qEnL6', '管理员', 1440911410581213416, 0, 'CHANGE TO YOUR HEAD IMAGE URL!!!', 0, 1440911410581213417, '2021-09-23 00:00:00', 1440911410581213417, '2021-09-23 00:00:00', 1); +INSERT INTO `zz_sys_user` VALUES (1440965344985354240, 'leaderHR', '$2a$10$tLqussQ4t4n..A274vS9luxZI8zmxdQSkmwXcOU3egPJtyFIVDYj.', '人事经理', 1440963592970047488, 2, NULL, 0, 1440911410581213417, '2021-09-23 17:04:45', 1440911410581213417, '2021-09-23 17:04:45', 1); +INSERT INTO `zz_sys_user` VALUES (1440965465605148672, 'userA', '$2a$10$BGsgE5KA/hKV95.kCZmMleiUssNRpOGE0qMTkCGHsSiugnqSsaSFS', '员工A', 1440963592970047488, 2, NULL, 0, 1440911410581213417, '2021-09-23 17:05:14', 1440911410581213417, '2021-09-23 17:05:14', 1); +INSERT INTO `zz_sys_user` VALUES (1440965586715676672, 'userB', '$2a$10$J0obwzeNt3iWoArSdRCKLeABdcMwe/rJrPIoGNW.LFgCYKhFKC9Lu', '员工B', 1440963642542526464, 2, NULL, 0, 1440911410581213417, '2021-09-23 17:05:42', 1440911410581213417, '2021-09-23 17:05:42', 1); +INSERT INTO `zz_sys_user` VALUES (1440965697961201664, 'userC', '$2a$10$KukIvoMoncnpSafKnueXnOLEhI5V7cW0GBsGt9EkTGq482vsRgQwm', '员工C', 1440963642542526464, 2, NULL, 0, 1440911410581213417, '2021-09-23 17:06:09', 1440911410581213417, '2021-09-23 17:06:09', 1); +INSERT INTO `zz_sys_user` VALUES (1440965808049098752, 'leaderLaw', '$2a$10$8o2qUYKOpizH42gIs4hDU.TjrzzWu/tOJeQebvXISkAI3wscFbAl2', '法务经理', 1440963642542526464, 2, NULL, 0, 1440911410581213417, '2021-09-23 17:06:35', 1440911410581213417, '2021-09-23 17:06:35', 1); +INSERT INTO `zz_sys_user` VALUES (1440966073686953984, 'leaderTJ', '$2a$10$NLZDkFP/nLkGzo/blYJ7w.HmmZF8v12ByockmYXPZZ7cr/TqILB/u', '天津总监', 1440963698460987392, 2, NULL, 0, 1440911410581213417, '2021-09-23 17:07:39', 1440911410581213417, '2021-09-23 17:07:39', 1); +INSERT INTO `zz_sys_user` VALUES (1440966186522120192, 'leaderTJ2', '$2a$10$F7vVIJeC7OdHTNV050aqieJwJcBdjrUOCGjAE4wq0mESLb1Pn6yoe', '天津经理', 1440963698460987392, 2, NULL, 0, 1440911410581213417, '2021-09-23 17:08:05', 1440911410581213417, '2021-09-23 17:08:05', 1); +INSERT INTO `zz_sys_user` VALUES (1440966324770574336, 'userD', '$2a$10$7G2Lcw1GducD2FtCxQask.7lVRPRvKZk7YVZOsT319uXVtK2LQPji', '员工D', 1440963698460987392, 2, NULL, 0, 1440911410581213417, '2021-09-23 17:08:38', 1440911410581213417, '2021-09-23 17:08:38', 1); +INSERT INTO `zz_sys_user` VALUES (1440969706411397120, 'leader', '$2a$10$LgJRx/7YT.F6oUs4PPVpxuSYQBOdcXqx6dvdkaJmA7ObWdpJzhOQu', '总部领导', 1440911410581213416, 2, NULL, 0, 1440911410581213417, '2021-09-23 17:22:05', 1440911410581213417, '2021-09-23 17:22:05', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_user_post +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_user_post`; +CREATE TABLE `zz_sys_user_post` ( + `user_id` bigint(20) NOT NULL COMMENT '用户Id', + `dept_post_id` bigint(20) NOT NULL COMMENT '部门岗位Id', + `post_id` bigint(20) NOT NULL COMMENT '岗位Id', + PRIMARY KEY (`user_id`,`dept_post_id`) USING BTREE, + KEY `idx_post_id` (`post_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_sys_user_post +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_user_post` VALUES (1440966073686953984, 1440964519391137792, 1440963890539139072); +INSERT INTO `zz_sys_user_post` VALUES (1440969706411397120, 1440969551792574464, 1440963890539139072); +INSERT INTO `zz_sys_user_post` VALUES (1440966186522120192, 1440964519395332096, 1440964040611336192); +INSERT INTO `zz_sys_user_post` VALUES (1440965344985354240, 1440964221780103168, 1440964097913917440); +INSERT INTO `zz_sys_user_post` VALUES (1440965808049098752, 1440964387979399168, 1440964097913917440); +INSERT INTO `zz_sys_user_post` VALUES (1440965465605148672, 1440964221855600640, 1440964157770829824); +INSERT INTO `zz_sys_user_post` VALUES (1440965586715676672, 1440964387983593472, 1440964157770829824); +INSERT INTO `zz_sys_user_post` VALUES (1440965697961201664, 1440964387983593472, 1440964157770829824); +INSERT INTO `zz_sys_user_post` VALUES (1440966324770574336, 1440964519399526400, 1440964157770829824); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `zz_sys_user_role`; +CREATE TABLE `zz_sys_user_role` ( + `user_id` bigint(20) NOT NULL COMMENT '用户Id', + `role_id` bigint(20) NOT NULL COMMENT '角色Id', + PRIMARY KEY (`user_id`,`role_id`) USING BTREE, + KEY `idx_role_id` (`role_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='用户与角色对应关系表'; + +-- ---------------------------- +-- Records of zz_sys_user_role +-- ---------------------------- +BEGIN; +INSERT INTO `zz_sys_user_role` VALUES (1440965344985354240, 1440965195903012864); +INSERT INTO `zz_sys_user_role` VALUES (1440965465605148672, 1440965195903012864); +INSERT INTO `zz_sys_user_role` VALUES (1440965586715676672, 1440965195903012864); +INSERT INTO `zz_sys_user_role` VALUES (1440965697961201664, 1440965195903012864); +INSERT INTO `zz_sys_user_role` VALUES (1440965808049098752, 1440965195903012864); +INSERT INTO `zz_sys_user_role` VALUES (1440966073686953984, 1440965195903012864); +INSERT INTO `zz_sys_user_role` VALUES (1440966186522120192, 1440965195903012864); +INSERT INTO `zz_sys_user_role` VALUES (1440966324770574336, 1440965195903012864); +INSERT INTO `zz_sys_user_role` VALUES (1440969706411397120, 1440965195903012864); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_contract +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_contract`; +CREATE TABLE `zz_test_flow_contract` ( + `contract_id` bigint(20) NOT NULL COMMENT '主键Id', + `first_party_id` bigint(20) NOT NULL COMMENT '甲方信息Id', + `second_party_id` bigint(20) NOT NULL COMMENT '乙方信息Id', + `contract_type` int(11) NOT NULL COMMENT '合同类型', + `due_date` datetime NOT NULL COMMENT '到期日期', + `sales_id` bigint(20) NOT NULL COMMENT '业务员Id', + `commission_rate` int(11) NOT NULL COMMENT '提成比例', + `attachment` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '合同附件URL', + `security_attachment` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '保密协议附件URL', + `intellectual_property_attachment` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '知识产权协议附件', + `other_attachment` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '其他附件', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL DEFAULT '0' COMMENT '删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`contract_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_contract +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_contract` VALUES (1424647986075406336, 1424645184158699520, 1424645446290116608, 1, '2021-09-18 00:00:00', 1424607792735457280, 5, '[{\"name\":\"logo.png\",\"filename\":\"c29d9f9302c04114b559f130fe606c4f.png\"}]', '[{\"name\":\"新建位图图像.png\",\"filename\":\"d861d009ae2c46ddbb7ccaf2d679a639.png\"}]', '[{\"name\":\"logo.png\",\"filename\":\"46c75b9445f44540922a84f471f61340.png\"}]', '[{\"name\":\"新建位图图像.png\",\"filename\":\"08c56233600d4da9822c07f22bf4fa0e.png\"}]', 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_contract` VALUES (1441215377508929536, 1424645184158699520, 1424645446290116608, 1, '2021-09-30 00:00:00', 1440966324770574336, 5, '[{\"name\":\"新建位图图像.png\",\"filename\":\"d9aa27ea7eec4375b123e11ce92ec9b5.png\"}]', '[{\"name\":\"新建位图图像.png\",\"filename\":\"0c20b1c7256148018451852ddae9f8aa.png\"}]', NULL, NULL, 1440966324770574336, '2021-09-24 09:38:17', 1440966324770574336, '2021-09-24 09:38:17', 1); +INSERT INTO `zz_test_flow_contract` VALUES (1441217206602960896, 1424645184158699520, 1424645446290116608, 1, '2021-10-09 00:00:00', 1440966324770574336, 7, '[{\"name\":\"新建位图图像.png\",\"filename\":\"dcd2db9b75664251a3baf595f6752d90.png\"}]', '[{\"name\":\"新建位图图像.png\",\"filename\":\"e85a5b89d3bd4a3f94d58b0630afc7af.png\"}]', NULL, NULL, 1440966324770574336, '2021-09-24 09:45:33', 1440966324770574336, '2021-09-24 09:45:33', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_contract_detail +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_contract_detail`; +CREATE TABLE `zz_test_flow_contract_detail` ( + `contract_detail_id` bigint(20) NOT NULL COMMENT '主键Id', + `contract_id` bigint(20) NOT NULL COMMENT '合同Id', + `product_id` bigint(20) NOT NULL COMMENT '产品Id', + `total_count` int(11) NOT NULL COMMENT '数量', + `total_amount` int(11) NOT NULL COMMENT '总价', + `meno` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL DEFAULT '0' COMMENT '删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`contract_detail_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_contract_detail +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_contract_detail` VALUES (1424647986087989249, 1424647986075406336, 1424645586203709440, 1, 12001, '加急', 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_contract_detail` VALUES (1424647986092183552, 1424647986075406336, 1424645694550970368, 5, 143680, NULL, 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_contract_detail` VALUES (1441215377550872576, 1441215377508929536, 1424645586203709440, 100, 1230000, '加急', 1440966324770574336, '2021-09-24 09:38:17', 1440966324770574336, '2021-09-24 09:38:17', 1); +INSERT INTO `zz_test_flow_contract_detail` VALUES (1441217206628126720, 1441217206602960896, 1424645586203709440, 50, 234000, '加急', 1440966324770574336, '2021-09-24 09:45:33', 1440966324770574336, '2021-09-24 09:45:33', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_delivery_detail +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_delivery_detail`; +CREATE TABLE `zz_test_flow_delivery_detail` ( + `delivery_id` bigint(20) NOT NULL COMMENT '主键Id', + `contract_id` bigint(20) NOT NULL COMMENT '合同Id', + `delivery_date` datetime NOT NULL COMMENT '交付日期', + `product_id` bigint(20) NOT NULL COMMENT '产品Id', + `total_count` int(11) NOT NULL COMMENT '数量', + `memo` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL DEFAULT '0' COMMENT '删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`delivery_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_delivery_detail +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_delivery_detail` VALUES (1424647986079600640, 1424647986075406336, '2021-08-14 00:00:00', 1424645586203709440, 1, NULL, 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_delivery_detail` VALUES (1424647986083794944, 1424647986075406336, '2021-08-28 00:00:00', 1424645694550970368, 2, NULL, 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_delivery_detail` VALUES (1424647986087989248, 1424647986075406336, '2021-09-11 00:00:00', 1424645694550970368, 3, NULL, 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_delivery_detail` VALUES (1441215377538289664, 1441215377508929536, '2021-09-27 00:00:00', 1424645586203709440, 40, NULL, 1440966324770574336, '2021-09-24 09:38:17', 1440966324770574336, '2021-09-24 09:38:17', 1); +INSERT INTO `zz_test_flow_delivery_detail` VALUES (1441215377546678272, 1441215377508929536, '2021-09-30 00:00:00', 1424645586203709440, 60, '加急', 1440966324770574336, '2021-09-24 09:38:17', 1440966324770574336, '2021-09-24 09:38:17', 1); +INSERT INTO `zz_test_flow_delivery_detail` VALUES (1441217206619738113, 1441217206602960896, '2021-09-27 00:00:00', 1424645586203709440, 20, NULL, 1440966324770574336, '2021-09-24 09:45:33', 1440966324770574336, '2021-09-24 09:45:33', 1); +INSERT INTO `zz_test_flow_delivery_detail` VALUES (1441217206623932416, 1441217206602960896, '2021-09-29 00:00:00', 1424645586203709440, 30, NULL, 1440966324770574336, '2021-09-24 09:45:33', 1440966324770574336, '2021-09-24 09:45:33', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_first_party +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_first_party`; +CREATE TABLE `zz_test_flow_first_party` ( + `first_party_id` bigint(20) NOT NULL COMMENT '主键Id', + `company_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '公司名称', + `legal_person` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '法人', + `legal_person_id` char(18) COLLATE utf8mb4_bin NOT NULL COMMENT '法人身份证号', + `registry_address` varchar(512) COLLATE utf8mb4_bin NOT NULL COMMENT '注册地址', + `contact_info` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '联系方式', + `business_scope` varchar(4000) COLLATE utf8mb4_bin NOT NULL COMMENT '经营范围', + `memo` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL DEFAULT '0' COMMENT '删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`first_party_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_first_party +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_first_party` VALUES (1424645184158699520, '天津哈哈乐商贸公司', '王哈哈', '120104197604150375', '天津市津南区', '022-23451234', '商贸商贸', '天津商贸', 1424545631073996884, '2021-08-08 16:14:15', 1424545631073996884, '2021-08-08 16:14:15', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_leave +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_leave`; +CREATE TABLE `zz_test_flow_leave` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `user_id` bigint(20) NOT NULL COMMENT '请假用户Id', + `leave_reason` varchar(512) COLLATE utf8mb4_bin NOT NULL COMMENT '请假原因', + `leave_type` int(11) NOT NULL COMMENT '请假类型', + `leave_begin_time` datetime NOT NULL COMMENT '请假开始时间', + `leave_end_time` datetime NOT NULL COMMENT '请假结束时间', + `apply_time` datetime NOT NULL COMMENT '申请时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_user_id` (`user_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_leave +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_leave` VALUES (1424636082313498624, 1424545631073996884, '请假2天', 1, '2021-08-01 00:00:00', '2021-08-02 00:00:00', '2021-08-08 15:38:05'); +INSERT INTO `zz_test_flow_leave` VALUES (1424649303212691456, 1424545631073996884, '请假一天', 1, '2021-08-01 00:00:00', '2021-08-01 00:00:00', '2021-08-08 16:30:37'); +INSERT INTO `zz_test_flow_leave` VALUES (1424652775060410368, 1424545631073996884, '请假2天', 1, '2021-08-01 00:00:00', '2021-08-02 00:00:00', '2021-08-08 16:44:25'); +INSERT INTO `zz_test_flow_leave` VALUES (1424653286929076224, 1424545631073996884, '请假一天', 1, '2021-08-01 00:00:00', '2021-08-01 00:00:00', '2021-08-08 16:46:27'); +INSERT INTO `zz_test_flow_leave` VALUES (1424653896705380352, 1424545631073996884, '请假3天!!!', 2, '2021-08-01 00:00:00', '2021-08-03 00:00:00', '2021-08-08 16:48:52'); +INSERT INTO `zz_test_flow_leave` VALUES (1424654125999591424, 1424545631073996884, '结婚了结婚了', 3, '2021-08-01 00:00:00', '2021-08-07 00:00:00', '2021-08-08 16:49:47'); +INSERT INTO `zz_test_flow_leave` VALUES (1424657782186971136, 1424654900813369344, '请假请假', 1, '2021-08-01 00:00:00', '2021-08-07 00:00:00', '2021-08-08 17:04:19'); +INSERT INTO `zz_test_flow_leave` VALUES (1424658915961868288, 1424545631073996884, '测试', 1, '2021-08-01 00:00:00', '2021-08-07 00:00:00', '2021-08-08 17:08:49'); +INSERT INTO `zz_test_flow_leave` VALUES (1424659588543680512, 1424608402885054464, '测试请假', 1, '2021-08-01 00:00:00', '2021-08-02 00:00:00', '2021-08-08 17:11:29'); +INSERT INTO `zz_test_flow_leave` VALUES (1424659995714129920, 1424608402885054464, '测试了测试了', 1, '2021-08-01 00:00:00', '2021-08-07 00:00:00', '2021-08-08 17:13:07'); +INSERT INTO `zz_test_flow_leave` VALUES (1424660095102357504, 1424608402885054464, '测试了测试了!!!', 1, '2021-08-01 00:00:00', '2021-08-07 00:00:00', '2021-08-08 17:13:30'); +INSERT INTO `zz_test_flow_leave` VALUES (1441213240326492160, 1440966324770574336, '请假一天', 1, '2021-09-17 00:00:00', '2021-09-18 00:00:00', '2021-09-24 09:29:48'); +INSERT INTO `zz_test_flow_leave` VALUES (1441218427220922368, 1440911410581213417, '请假2天', 1, '2021-09-02 00:00:00', '2021-09-04 00:00:00', '2021-09-24 09:50:24'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_pay_detail +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_pay_detail`; +CREATE TABLE `zz_test_flow_pay_detail` ( + `pay_detail_id` bigint(20) NOT NULL COMMENT '主键Id', + `contract_id` bigint(20) NOT NULL COMMENT '合同Id', + `pay_date` datetime NOT NULL COMMENT '付款日期', + `pay_type` int(11) NOT NULL COMMENT '付款类型', + `percentage` int(11) NOT NULL COMMENT '百分比', + `memo` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL DEFAULT '0' COMMENT '删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`pay_detail_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_pay_detail +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_pay_detail` VALUES (1424647986096377856, 1424647986075406336, '2021-08-18 00:00:00', 1, 20, '预付款', 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1424647986100572160, 1424647986075406336, '2021-08-28 00:00:00', 2, 50, '分期款', 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1424647986104766464, 1424647986075406336, '2021-09-04 00:00:00', 2, 29, '分期款', 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1424647986108960768, 1424647986075406336, '2021-09-17 00:00:00', 3, 10, '尾款', 1424545631073996884, '2021-08-08 16:25:23', 1424545631073996884, '2021-08-08 16:25:23', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1441215377521512448, 1441215377508929536, '2021-09-25 00:00:00', 1, 20, NULL, 1440966324770574336, '2021-09-24 09:38:17', 1440966324770574336, '2021-09-24 09:38:17', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1441215377529901056, 1441215377508929536, '2021-09-28 00:00:00', 2, 60, NULL, 1440966324770574336, '2021-09-24 09:38:17', 1440966324770574336, '2021-09-24 09:38:17', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1441215377534095360, 1441215377508929536, '2021-10-05 00:00:00', 3, 20, NULL, 1440966324770574336, '2021-09-24 09:38:17', 1440966324770574336, '2021-09-24 09:38:17', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1441217206607155200, 1441217206602960896, '2021-09-26 00:00:00', 1, 20, NULL, 1440966324770574336, '2021-09-24 09:45:33', 1440966324770574336, '2021-09-24 09:45:33', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1441217206611349504, 1441217206602960896, '2021-10-01 00:00:00', 2, 40, NULL, 1440966324770574336, '2021-09-24 09:45:33', 1440966324770574336, '2021-09-24 09:45:33', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1441217206615543808, 1441217206602960896, '2021-10-07 00:00:00', 2, 30, NULL, 1440966324770574336, '2021-09-24 09:45:33', 1440966324770574336, '2021-09-24 09:45:33', 1); +INSERT INTO `zz_test_flow_pay_detail` VALUES (1441217206619738112, 1441217206602960896, '2021-10-15 00:00:00', 3, 10, NULL, 1440966324770574336, '2021-09-24 09:45:33', 1440966324770574336, '2021-09-24 09:45:33', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_product +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_product`; +CREATE TABLE `zz_test_flow_product` ( + `product_id` bigint(20) NOT NULL COMMENT '主键Id', + `product_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '产品名称', + `product_spec` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '规格', + `type` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '型号', + `cost_price` int(11) NOT NULL COMMENT '成本价', + `memo` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL DEFAULT '0' COMMENT '删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`product_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_product +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_product` VALUES (1424645586203709440, '单动薄板拉伸(冲压)液压机', '630T', '630T', 12001, '机身采用四柱整体框架或组合框架结构,均为全钢板焊接;四角八面直角导轨导向、精度高,刚性好,并采用液压预紧。', 1424545631073996884, '2021-08-08 16:15:51', 1424545631073996884, '2021-08-08 16:15:51', 1); +INSERT INTO `zz_test_flow_product` VALUES (1424645694550970368, '单动薄板拉伸液压机', '315T', 'YLL27', 143680, '机身采用四柱整体框架或组合框架结构,均为全钢板焊接;四角八面直角导轨导向、精度高,刚性好,并采用液压预紧。液压系统采用二通插装集成阀;整个系统工作稳定、可靠、使用寿命长、泄露少、故障点少。', 1424545631073996884, '2021-08-08 16:16:17', 1424545631073996884, '2021-08-08 16:16:17', 1); +INSERT INTO `zz_test_flow_product` VALUES (1424645807918813184, '单柱校正液压机', '210T', 'YLL30', 89000, '计算机优化直立式C型结构设计,刚性好。机器各部件均安装于机身内,外形整齐美观。液压系统采用手动换向阀,调速方便。具有手动和脚踏两种操作方式。机器行程、压力可在规定范围内调节。', 1424545631073996884, '2021-08-08 16:16:44', 1424545631073996884, '2021-08-08 16:16:44', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_second_party +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_second_party`; +CREATE TABLE `zz_test_flow_second_party` ( + `second_party_id` bigint(20) NOT NULL COMMENT '主键Id', + `company_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '公司名称', + `legal_person` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '法人', + `legal_person_id` char(18) COLLATE utf8mb4_bin NOT NULL COMMENT '法人身份证号', + `registry_address` varchar(512) COLLATE utf8mb4_bin NOT NULL COMMENT '注册地址', + `contact_info` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '联系方式', + `business_scope` varchar(4000) COLLATE utf8mb4_bin NOT NULL COMMENT '经营范围', + `memo` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL COMMENT '最后更新时间', + `deleted_flag` int(11) NOT NULL DEFAULT '0' COMMENT '删除标记(1: 正常 -1: 已删除)', + PRIMARY KEY (`second_party_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_second_party +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_second_party` VALUES (1424645446290116608, '天津乐呵呵公司', '乐呵呵', '120106197003150043', '天津市河东区', '022-12345678', '乐呵呵乐呵呵', '乐呵呵乐呵呵', 1424545631073996884, '2021-08-08 16:15:18', 1424545631073996884, '2021-08-08 16:15:18', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_submit +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_submit`; +CREATE TABLE `zz_test_flow_submit` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `submit_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '报销名称', + `submit_kind` int(11) NOT NULL COMMENT '报销类别', + `total_amount` int(11) NOT NULL COMMENT '报销金额', + `description` varchar(512) COLLATE utf8mb4_bin NOT NULL COMMENT '报销描述', + `memo` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '修改人', + `update_time` datetime DEFAULT NULL COMMENT '修改时间', + `create_user_id` bigint(20) NOT NULL COMMENT '创建人', + `create_time` datetime NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_submit_kind` (`submit_kind`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_submit +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_submit` VALUES (1424636815804993536, '7月份出差报销', 1, 1200, '7月份出差报销', '出差报销', 1424545631073996884, '2021-08-08 15:41:47', 1424545631073996884, '2021-08-08 15:41:00'); +INSERT INTO `zz_test_flow_submit` VALUES (1441213876367527936, '出差报销', 1, 1200, '出差', '出差', 1440966324770574336, '2021-09-24 09:32:19', 1440966324770574336, '2021-09-24 09:32:19'); +INSERT INTO `zz_test_flow_submit` VALUES (1441312736167333888, '出差', 1, 800, '出差', NULL, 1440966324770574336, '2021-09-24 16:05:09', 1440966324770574336, '2021-09-24 16:05:09'); +INSERT INTO `zz_test_flow_submit` VALUES (1441340309442138112, '团建', 2, 500, '团建', NULL, 1440966324770574336, '2021-09-24 17:54:43', 1440966324770574336, '2021-09-24 17:54:43'); +COMMIT; + +-- ---------------------------- +-- Table structure for zz_test_flow_submit_detail +-- ---------------------------- +DROP TABLE IF EXISTS `zz_test_flow_submit_detail`; +CREATE TABLE `zz_test_flow_submit_detail` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `submit_id` bigint(20) NOT NULL COMMENT '报销单据Id', + `expense_type` int(11) NOT NULL COMMENT '费用类型', + `expense_time` datetime NOT NULL COMMENT '发生日期', + `amount` int(11) NOT NULL COMMENT '金额', + `image_url` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '上传图片URL', + `description` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '费用描述', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_submit_id` (`submit_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of zz_test_flow_submit_detail +-- ---------------------------- +BEGIN; +INSERT INTO `zz_test_flow_submit_detail` VALUES (1424636815809187840, 1424636815804993536, 1, '2021-07-06 00:00:00', 500, '[{\"name\":\"图片1.png\",\"filename\":\"5981b24ffaf640a590b57c462d9ff889.png\"}]', '住宿一天'); +INSERT INTO `zz_test_flow_submit_detail` VALUES (1424636815813382144, 1424636815804993536, 2, '2021-07-22 00:00:00', 700, '[{\"name\":\"logo.png\",\"filename\":\"4b63d00a0e3b420a9e86e751ba210f6a.png\"}]', '交通费用'); +INSERT INTO `zz_test_flow_submit_detail` VALUES (1441213876384305152, 1441213876367527936, 1, '2021-09-23 00:00:00', 600, '[{\"name\":\"logo.png\",\"filename\":\"38b7e4a097654ff38e176846ba005fcf.png\"}]', NULL); +INSERT INTO `zz_test_flow_submit_detail` VALUES (1441312736230248448, 1441312736167333888, 1, '2021-09-24 00:00:00', 600, '[{\"name\":\"logo.png\",\"filename\":\"1252138daaf744a3b1fdf06a07c5a173.png\"}]', '吃饭'); +INSERT INTO `zz_test_flow_submit_detail` VALUES (1441340309446332416, 1441340309442138112, 1, '2021-09-30 00:00:00', 500, '[{\"name\":\"logo.png\",\"filename\":\"f33b658b052f487c9a34af274f48dcd3.png\"}]', '团建费用'); +COMMIT; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/docker-files/docker-compose.yml b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/docker-files/docker-compose.yml new file mode 100644 index 00000000..94903d49 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/docker-files/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3.2' + +services: + + redis: + container_name: redis + build: + context: services/redis/ + args: + - REDIS_VER=4 + ports: + - "6379:6379" + volumes: + - ./services/redis/redis.conf:/usr/local/etc/redis/redis.conf:rw + - ./data/redis:/data:rw + - ./logs/redis:/var/log/:rw diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/docker-files/services/redis/Dockerfile b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/docker-files/services/redis/Dockerfile new file mode 100644 index 00000000..924bd9d6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/docker-files/services/redis/Dockerfile @@ -0,0 +1,13 @@ +ARG REDIS_VER + +FROM redis:${REDIS_VER} + +COPY redis.conf /usr/local/etc/redis/redis.conf +CMD ["redis-server", "/usr/local/etc/redis/redis.conf"] + +# 设置时区为上海 +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# Ubuntu软件源选择中国的服务器 +RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/docker-files/services/redis/redis.conf b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/docker-files/services/redis/redis.conf new file mode 100644 index 00000000..2eecfa5a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/docker-files/services/redis/redis.conf @@ -0,0 +1,1307 @@ +# Redis configuration file example. +# +# Note that in order to read the configuration file, Redis must be +# started with the file path as first argument: +# +# ./redis-server /path/to/redis.conf + +# Note on units: when memory size is needed, it is possible to specify +# it in the usual form of 1k 5GB 4M and so forth: +# +# 1k => 1000 bytes +# 1kb => 1024 bytes +# 1m => 1000000 bytes +# 1mb => 1024*1024 bytes +# 1g => 1000000000 bytes +# 1gb => 1024*1024*1024 bytes +# +# units are case insensitive so 1GB 1Gb 1gB are all the same. + +################################## INCLUDES ################################### + +# Include one or more other config files here. This is useful if you +# have a standard template that goes to all Redis servers but also need +# to customize a few per-server settings. Include files can include +# other files, so use this wisely. +# +# Notice option "include" won't be rewritten by command "CONFIG REWRITE" +# from admin or Redis Sentinel. Since Redis always uses the last processed +# line as value of a configuration directive, you'd better put includes +# at the beginning of this file to avoid overwriting config change at runtime. +# +# If instead you are interested in using includes to override configuration +# options, it is better to use include as the last line. +# +# include /path/to/local.conf +# include /path/to/other.conf + +################################## MODULES ##################################### + +# Load modules at startup. If the server is not able to load modules +# it will abort. It is possible to use multiple loadmodule directives. +# +# loadmodule /path/to/my_module.so +# loadmodule /path/to/other_module.so + +################################## NETWORK ##################################### + +# By default, if no "bind" configuration directive is specified, Redis listens +# for connections from all the network interfaces available on the server. +# It is possible to listen to just one or multiple selected interfaces using +# the "bind" configuration directive, followed by one or more IP addresses. +# +# Examples: +# +# bind 192.168.1.100 10.0.0.1 +# bind 127.0.0.1 ::1 +# +# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the +# internet, binding to all the interfaces is dangerous and will expose the +# instance to everybody on the internet. So by default we uncomment the +# following bind directive, that will force Redis to listen only into +# the IPv4 lookback interface address (this means Redis will be able to +# accept connections only from clients running into the same computer it +# is running). +# +# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES +# JUST COMMENT THE FOLLOWING LINE. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +bind 0.0.0.0 + +# Protected mode is a layer of security protection, in order to avoid that +# Redis instances left open on the internet are accessed and exploited. +# +# When protected mode is on and if: +# +# 1) The server is not binding explicitly to a set of addresses using the +# "bind" directive. +# 2) No password is configured. +# +# The server only accepts connections from clients connecting from the +# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain +# sockets. +# +# By default protected mode is enabled. You should disable it only if +# you are sure you want clients from other hosts to connect to Redis +# even if no authentication is configured, nor a specific set of interfaces +# are explicitly listed using the "bind" directive. +protected-mode yes + +# Accept connections on the specified port, default is 6379 (IANA #815344). +# If port 0 is specified Redis will not listen on a TCP socket. +port 6379 + +# TCP listen() backlog. +# +# In high requests-per-second environments you need an high backlog in order +# to avoid slow clients connections issues. Note that the Linux kernel +# will silently truncate it to the value of /proc/sys/net/core/somaxconn so +# make sure to raise both the value of somaxconn and tcp_max_syn_backlog +# in order to get the desired effect. +tcp-backlog 511 + +# Unix socket. +# +# Specify the path for the Unix socket that will be used to listen for +# incoming connections. There is no default, so Redis will not listen +# on a unix socket when not specified. +# +# unixsocket /tmp/redis.sock +# unixsocketperm 700 + +# Close the connection after a client is idle for N seconds (0 to disable) +timeout 0 + +# TCP keepalive. +# +# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence +# of communication. This is useful for two reasons: +# +# 1) Detect dead peers. +# 2) Take the connection alive from the point of view of network +# equipment in the middle. +# +# On Linux, the specified value (in seconds) is the period used to send ACKs. +# Note that to close the connection the double of the time is needed. +# On other kernels the period depends on the kernel configuration. +# +# A reasonable value for this option is 300 seconds, which is the new +# Redis default starting with Redis 3.2.1. +tcp-keepalive 300 + +################################# GENERAL ##################################### + +# By default Redis does not run as a daemon. Use 'yes' if you need it. +# Note that Redis will write a pid file in /var/run/redis.pid when daemonized. +daemonize no + +# If you run Redis from upstart or systemd, Redis can interact with your +# supervision tree. Options: +# supervised no - no supervision interaction +# supervised upstart - signal upstart by putting Redis into SIGSTOP mode +# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET +# supervised auto - detect upstart or systemd method based on +# UPSTART_JOB or NOTIFY_SOCKET environment variables +# Note: these supervision methods only signal "process is ready." +# They do not enable continuous liveness pings back to your supervisor. +supervised no + +# If a pid file is specified, Redis writes it where specified at startup +# and removes it at exit. +# +# When the server runs non daemonized, no pid file is created if none is +# specified in the configuration. When the server is daemonized, the pid file +# is used even if not specified, defaulting to "/var/run/redis.pid". +# +# Creating a pid file is best effort: if Redis is not able to create it +# nothing bad happens, the server will start and run normally. +pidfile /var/run/redis_6379.pid + +# Specify the server verbosity level. +# This can be one of: +# debug (a lot of information, useful for development/testing) +# verbose (many rarely useful info, but not a mess like the debug level) +# notice (moderately verbose, what you want in production probably) +# warning (only very important / critical messages are logged) +loglevel notice + +# Specify the log file name. Also the empty string can be used to force +# Redis to log on the standard output. Note that if you use standard +# output for logging but daemonize, logs will be sent to /dev/null +logfile /var/log/redis_6379.log + +# To enable logging to the system logger, just set 'syslog-enabled' to yes, +# and optionally update the other syslog parameters to suit your needs. +# syslog-enabled no + +# Specify the syslog identity. +# syslog-ident redis + +# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. +# syslog-facility local0 + +# Set the number of databases. The default database is DB 0, you can select +# a different one on a per-connection basis using SELECT where +# dbid is a number between 0 and 'databases'-1 +databases 16 + +# By default Redis shows an ASCII art logo only when started to log to the +# standard output and if the standard output is a TTY. Basically this means +# that normally a logo is displayed only in interactive sessions. +# +# However it is possible to force the pre-4.0 behavior and always show a +# ASCII art logo in startup logs by setting the following option to yes. +always-show-logo yes + +################################ SNAPSHOTTING ################################ +# +# Save the DB on disk: +# +# save +# +# Will save the DB if both the given number of seconds and the given +# number of write operations against the DB occurred. +# +# In the example below the behaviour will be to save: +# after 900 sec (15 min) if at least 1 key changed +# after 300 sec (5 min) if at least 10 keys changed +# after 60 sec if at least 10000 keys changed +# +# Note: you can disable saving completely by commenting out all "save" lines. +# +# It is also possible to remove all the previously configured save +# points by adding a save directive with a single empty string argument +# like in the following example: +# +# save "" + +save 900 1 +save 300 10 +save 60 10000 + +# By default Redis will stop accepting writes if RDB snapshots are enabled +# (at least one save point) and the latest background save failed. +# This will make the user aware (in a hard way) that data is not persisting +# on disk properly, otherwise chances are that no one will notice and some +# disaster will happen. +# +# If the background saving process will start working again Redis will +# automatically allow writes again. +# +# However if you have setup your proper monitoring of the Redis server +# and persistence, you may want to disable this feature so that Redis will +# continue to work as usual even if there are problems with disk, +# permissions, and so forth. +stop-writes-on-bgsave-error yes + +# Compress string objects using LZF when dump .rdb databases? +# For default that's set to 'yes' as it's almost always a win. +# If you want to save some CPU in the saving child set it to 'no' but +# the dataset will likely be bigger if you have compressible values or keys. +rdbcompression yes + +# Since version 5 of RDB a CRC64 checksum is placed at the end of the file. +# This makes the format more resistant to corruption but there is a performance +# hit to pay (around 10%) when saving and loading RDB files, so you can disable it +# for maximum performances. +# +# RDB files created with checksum disabled have a checksum of zero that will +# tell the loading code to skip the check. +rdbchecksum yes + +# The filename where to dump the DB +dbfilename dump.rdb + +# The working directory. +# +# The DB will be written inside this directory, with the filename specified +# above using the 'dbfilename' configuration directive. +# +# The Append Only File will also be created inside this directory. +# +# Note that you must specify a directory here, not a file name. +dir ./ + +################################# REPLICATION ################################# + +# Master-Slave replication. Use slaveof to make a Redis instance a copy of +# another Redis server. A few things to understand ASAP about Redis replication. +# +# 1) Redis replication is asynchronous, but you can configure a master to +# stop accepting writes if it appears to be not connected with at least +# a given number of slaves. +# 2) Redis slaves are able to perform a partial resynchronization with the +# master if the replication link is lost for a relatively small amount of +# time. You may want to configure the replication backlog size (see the next +# sections of this file) with a sensible value depending on your needs. +# 3) Replication is automatic and does not need user intervention. After a +# network partition slaves automatically try to reconnect to masters +# and resynchronize with them. +# +# slaveof + +# If the master is password protected (using the "requirepass" configuration +# directive below) it is possible to tell the slave to authenticate before +# starting the replication synchronization process, otherwise the master will +# refuse the slave request. +# +# masterauth + +# When a slave loses its connection with the master, or when the replication +# is still in progress, the slave can act in two different ways: +# +# 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will +# still reply to client requests, possibly with out of date data, or the +# data set may just be empty if this is the first synchronization. +# +# 2) if slave-serve-stale-data is set to 'no' the slave will reply with +# an error "SYNC with master in progress" to all the kind of commands +# but to INFO and SLAVEOF. +# +slave-serve-stale-data yes + +# You can configure a slave instance to accept writes or not. Writing against +# a slave instance may be useful to store some ephemeral data (because data +# written on a slave will be easily deleted after resync with the master) but +# may also cause problems if clients are writing to it because of a +# misconfiguration. +# +# Since Redis 2.6 by default slaves are read-only. +# +# Note: read only slaves are not designed to be exposed to untrusted clients +# on the internet. It's just a protection layer against misuse of the instance. +# Still a read only slave exports by default all the administrative commands +# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve +# security of read only slaves using 'rename-command' to shadow all the +# administrative / dangerous commands. +slave-read-only yes + +# Replication SYNC strategy: disk or socket. +# +# ------------------------------------------------------- +# WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY +# ------------------------------------------------------- +# +# New slaves and reconnecting slaves that are not able to continue the replication +# process just receiving differences, need to do what is called a "full +# synchronization". An RDB file is transmitted from the master to the slaves. +# The transmission can happen in two different ways: +# +# 1) Disk-backed: The Redis master creates a new process that writes the RDB +# file on disk. Later the file is transferred by the parent +# process to the slaves incrementally. +# 2) Diskless: The Redis master creates a new process that directly writes the +# RDB file to slave sockets, without touching the disk at all. +# +# With disk-backed replication, while the RDB file is generated, more slaves +# can be queued and served with the RDB file as soon as the current child producing +# the RDB file finishes its work. With diskless replication instead once +# the transfer starts, new slaves arriving will be queued and a new transfer +# will start when the current one terminates. +# +# When diskless replication is used, the master waits a configurable amount of +# time (in seconds) before starting the transfer in the hope that multiple slaves +# will arrive and the transfer can be parallelized. +# +# With slow disks and fast (large bandwidth) networks, diskless replication +# works better. +repl-diskless-sync no + +# When diskless replication is enabled, it is possible to configure the delay +# the server waits in order to spawn the child that transfers the RDB via socket +# to the slaves. +# +# This is important since once the transfer starts, it is not possible to serve +# new slaves arriving, that will be queued for the next RDB transfer, so the server +# waits a delay in order to let more slaves arrive. +# +# The delay is specified in seconds, and by default is 5 seconds. To disable +# it entirely just set it to 0 seconds and the transfer will start ASAP. +repl-diskless-sync-delay 5 + +# Slaves send PINGs to server in a predefined interval. It's possible to change +# this interval with the repl_ping_slave_period option. The default value is 10 +# seconds. +# +# repl-ping-slave-period 10 + +# The following option sets the replication timeout for: +# +# 1) Bulk transfer I/O during SYNC, from the point of view of slave. +# 2) Master timeout from the point of view of slaves (data, pings). +# 3) Slave timeout from the point of view of masters (REPLCONF ACK pings). +# +# It is important to make sure that this value is greater than the value +# specified for repl-ping-slave-period otherwise a timeout will be detected +# every time there is low traffic between the master and the slave. +# +# repl-timeout 60 + +# Disable TCP_NODELAY on the slave socket after SYNC? +# +# If you select "yes" Redis will use a smaller number of TCP packets and +# less bandwidth to send data to slaves. But this can add a delay for +# the data to appear on the slave side, up to 40 milliseconds with +# Linux kernels using a default configuration. +# +# If you select "no" the delay for data to appear on the slave side will +# be reduced but more bandwidth will be used for replication. +# +# By default we optimize for low latency, but in very high traffic conditions +# or when the master and slaves are many hops away, turning this to "yes" may +# be a good idea. +repl-disable-tcp-nodelay no + +# Set the replication backlog size. The backlog is a buffer that accumulates +# slave data when slaves are disconnected for some time, so that when a slave +# wants to reconnect again, often a full resync is not needed, but a partial +# resync is enough, just passing the portion of data the slave missed while +# disconnected. +# +# The bigger the replication backlog, the longer the time the slave can be +# disconnected and later be able to perform a partial resynchronization. +# +# The backlog is only allocated once there is at least a slave connected. +# +# repl-backlog-size 1mb + +# After a master has no longer connected slaves for some time, the backlog +# will be freed. The following option configures the amount of seconds that +# need to elapse, starting from the time the last slave disconnected, for +# the backlog buffer to be freed. +# +# Note that slaves never free the backlog for timeout, since they may be +# promoted to masters later, and should be able to correctly "partially +# resynchronize" with the slaves: hence they should always accumulate backlog. +# +# A value of 0 means to never release the backlog. +# +# repl-backlog-ttl 3600 + +# The slave priority is an integer number published by Redis in the INFO output. +# It is used by Redis Sentinel in order to select a slave to promote into a +# master if the master is no longer working correctly. +# +# A slave with a low priority number is considered better for promotion, so +# for instance if there are three slaves with priority 10, 100, 25 Sentinel will +# pick the one with priority 10, that is the lowest. +# +# However a special priority of 0 marks the slave as not able to perform the +# role of master, so a slave with priority of 0 will never be selected by +# Redis Sentinel for promotion. +# +# By default the priority is 100. +slave-priority 100 + +# It is possible for a master to stop accepting writes if there are less than +# N slaves connected, having a lag less or equal than M seconds. +# +# The N slaves need to be in "online" state. +# +# The lag in seconds, that must be <= the specified value, is calculated from +# the last ping received from the slave, that is usually sent every second. +# +# This option does not GUARANTEE that N replicas will accept the write, but +# will limit the window of exposure for lost writes in case not enough slaves +# are available, to the specified number of seconds. +# +# For example to require at least 3 slaves with a lag <= 10 seconds use: +# +# min-slaves-to-write 3 +# min-slaves-max-lag 10 +# +# Setting one or the other to 0 disables the feature. +# +# By default min-slaves-to-write is set to 0 (feature disabled) and +# min-slaves-max-lag is set to 10. + +# A Redis master is able to list the address and port of the attached +# slaves in different ways. For example the "INFO replication" section +# offers this information, which is used, among other tools, by +# Redis Sentinel in order to discover slave instances. +# Another place where this info is available is in the output of the +# "ROLE" command of a master. +# +# The listed IP and address normally reported by a slave is obtained +# in the following way: +# +# IP: The address is auto detected by checking the peer address +# of the socket used by the slave to connect with the master. +# +# Port: The port is communicated by the slave during the replication +# handshake, and is normally the port that the slave is using to +# list for connections. +# +# However when port forwarding or Network Address Translation (NAT) is +# used, the slave may be actually reachable via different IP and port +# pairs. The following two options can be used by a slave in order to +# report to its master a specific set of IP and port, so that both INFO +# and ROLE will report those values. +# +# There is no need to use both the options if you need to override just +# the port or the IP address. +# +# slave-announce-ip 5.5.5.5 +# slave-announce-port 1234 + +################################## SECURITY ################################### + +# Require clients to issue AUTH before processing any other +# commands. This might be useful in environments in which you do not trust +# others with access to the host running redis-server. +# +# This should stay commented out for backward compatibility and because most +# people do not need auth (e.g. they run their own servers). +# +# Warning: since Redis is pretty fast an outside user can try up to +# 150k passwords per second against a good box. This means that you should +# use a very strong password otherwise it will be very easy to break. +# +# requirepass foobared + +# Command renaming. +# +# It is possible to change the name of dangerous commands in a shared +# environment. For instance the CONFIG command may be renamed into something +# hard to guess so that it will still be available for internal-use tools +# but not available for general clients. +# +# Example: +# +# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 +# +# It is also possible to completely kill a command by renaming it into +# an empty string: +# +# rename-command CONFIG "" +# +# Please note that changing the name of commands that are logged into the +# AOF file or transmitted to slaves may cause problems. + +################################### CLIENTS #################################### + +# Set the max number of connected clients at the same time. By default +# this limit is set to 10000 clients, however if the Redis server is not +# able to configure the process file limit to allow for the specified limit +# the max number of allowed clients is set to the current file limit +# minus 32 (as Redis reserves a few file descriptors for internal uses). +# +# Once the limit is reached Redis will close all the new connections sending +# an error 'max number of clients reached'. +# +# maxclients 10000 + +############################## MEMORY MANAGEMENT ################################ + +# Set a memory usage limit to the specified amount of bytes. +# When the memory limit is reached Redis will try to remove keys +# according to the eviction policy selected (see maxmemory-policy). +# +# If Redis can't remove keys according to the policy, or if the policy is +# set to 'noeviction', Redis will start to reply with errors to commands +# that would use more memory, like SET, LPUSH, and so on, and will continue +# to reply to read-only commands like GET. +# +# This option is usually useful when using Redis as an LRU or LFU cache, or to +# set a hard memory limit for an instance (using the 'noeviction' policy). +# +# WARNING: If you have slaves attached to an instance with maxmemory on, +# the size of the output buffers needed to feed the slaves are subtracted +# from the used memory count, so that network problems / resyncs will +# not trigger a loop where keys are evicted, and in turn the output +# buffer of slaves is full with DELs of keys evicted triggering the deletion +# of more keys, and so forth until the database is completely emptied. +# +# In short... if you have slaves attached it is suggested that you set a lower +# limit for maxmemory so that there is some free RAM on the system for slave +# output buffers (but this is not needed if the policy is 'noeviction'). +# +# maxmemory + +# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory +# is reached. You can select among five behaviors: +# +# volatile-lru -> Evict using approximated LRU among the keys with an expire set. +# allkeys-lru -> Evict any key using approximated LRU. +# volatile-lfu -> Evict using approximated LFU among the keys with an expire set. +# allkeys-lfu -> Evict any key using approximated LFU. +# volatile-random -> Remove a random key among the ones with an expire set. +# allkeys-random -> Remove a random key, any key. +# volatile-ttl -> Remove the key with the nearest expire time (minor TTL) +# noeviction -> Don't evict anything, just return an error on write operations. +# +# LRU means Least Recently Used +# LFU means Least Frequently Used +# +# Both LRU, LFU and volatile-ttl are implemented using approximated +# randomized algorithms. +# +# Note: with any of the above policies, Redis will return an error on write +# operations, when there are no suitable keys for eviction. +# +# At the date of writing these commands are: set setnx setex append +# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd +# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby +# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby +# getset mset msetnx exec sort +# +# The default is: +# +# maxmemory-policy noeviction + +# LRU, LFU and minimal TTL algorithms are not precise algorithms but approximated +# algorithms (in order to save memory), so you can tune it for speed or +# accuracy. For default Redis will check five keys and pick the one that was +# used less recently, you can change the sample size using the following +# configuration directive. +# +# The default of 5 produces good enough results. 10 Approximates very closely +# true LRU but costs more CPU. 3 is faster but not very accurate. +# +# maxmemory-samples 5 + +############################# LAZY FREEING #################################### + +# Redis has two primitives to delete keys. One is called DEL and is a blocking +# deletion of the object. It means that the server stops processing new commands +# in order to reclaim all the memory associated with an object in a synchronous +# way. If the key deleted is associated with a small object, the time needed +# in order to execute the DEL command is very small and comparable to most other +# O(1) or O(log_N) commands in Redis. However if the key is associated with an +# aggregated value containing millions of elements, the server can block for +# a long time (even seconds) in order to complete the operation. +# +# For the above reasons Redis also offers non blocking deletion primitives +# such as UNLINK (non blocking DEL) and the ASYNC option of FLUSHALL and +# FLUSHDB commands, in order to reclaim memory in background. Those commands +# are executed in constant time. Another thread will incrementally free the +# object in the background as fast as possible. +# +# DEL, UNLINK and ASYNC option of FLUSHALL and FLUSHDB are user-controlled. +# It's up to the design of the application to understand when it is a good +# idea to use one or the other. However the Redis server sometimes has to +# delete keys or flush the whole database as a side effect of other operations. +# Specifically Redis deletes objects independently of a user call in the +# following scenarios: +# +# 1) On eviction, because of the maxmemory and maxmemory policy configurations, +# in order to make room for new data, without going over the specified +# memory limit. +# 2) Because of expire: when a key with an associated time to live (see the +# EXPIRE command) must be deleted from memory. +# 3) Because of a side effect of a command that stores data on a key that may +# already exist. For example the RENAME command may delete the old key +# content when it is replaced with another one. Similarly SUNIONSTORE +# or SORT with STORE option may delete existing keys. The SET command +# itself removes any old content of the specified key in order to replace +# it with the specified string. +# 4) During replication, when a slave performs a full resynchronization with +# its master, the content of the whole database is removed in order to +# load the RDB file just transfered. +# +# In all the above cases the default is to delete objects in a blocking way, +# like if DEL was called. However you can configure each case specifically +# in order to instead release memory in a non-blocking way like if UNLINK +# was called, using the following configuration directives: + +lazyfree-lazy-eviction no +lazyfree-lazy-expire no +lazyfree-lazy-server-del no +slave-lazy-flush no + +############################## APPEND ONLY MODE ############################### + +# By default Redis asynchronously dumps the dataset on disk. This mode is +# good enough in many applications, but an issue with the Redis process or +# a power outage may result into a few minutes of writes lost (depending on +# the configured save points). +# +# The Append Only File is an alternative persistence mode that provides +# much better durability. For instance using the default data fsync policy +# (see later in the config file) Redis can lose just one second of writes in a +# dramatic event like a server power outage, or a single write if something +# wrong with the Redis process itself happens, but the operating system is +# still running correctly. +# +# AOF and RDB persistence can be enabled at the same time without problems. +# If the AOF is enabled on startup Redis will load the AOF, that is the file +# with the better durability guarantees. +# +# Please check http://redis.io/topics/persistence for more information. + +appendonly no + +# The name of the append only file (default: "appendonly.aof") + +appendfilename "appendonly.aof" + +# The fsync() call tells the Operating System to actually write data on disk +# instead of waiting for more data in the output buffer. Some OS will really flush +# data on disk, some other OS will just try to do it ASAP. +# +# Redis supports three different modes: +# +# no: don't fsync, just let the OS flush the data when it wants. Faster. +# always: fsync after every write to the append only log. Slow, Safest. +# everysec: fsync only one time every second. Compromise. +# +# The default is "everysec", as that's usually the right compromise between +# speed and data safety. It's up to you to understand if you can relax this to +# "no" that will let the operating system flush the output buffer when +# it wants, for better performances (but if you can live with the idea of +# some data loss consider the default persistence mode that's snapshotting), +# or on the contrary, use "always" that's very slow but a bit safer than +# everysec. +# +# More details please check the following article: +# http://antirez.com/post/redis-persistence-demystified.html +# +# If unsure, use "everysec". + +# appendfsync always +appendfsync everysec +# appendfsync no + +# When the AOF fsync policy is set to always or everysec, and a background +# saving process (a background save or AOF log background rewriting) is +# performing a lot of I/O against the disk, in some Linux configurations +# Redis may block too long on the fsync() call. Note that there is no fix for +# this currently, as even performing fsync in a different thread will block +# our synchronous write(2) call. +# +# In order to mitigate this problem it's possible to use the following option +# that will prevent fsync() from being called in the main process while a +# BGSAVE or BGREWRITEAOF is in progress. +# +# This means that while another child is saving, the durability of Redis is +# the same as "appendfsync none". In practical terms, this means that it is +# possible to lose up to 30 seconds of log in the worst scenario (with the +# default Linux settings). +# +# If you have latency problems turn this to "yes". Otherwise leave it as +# "no" that is the safest pick from the point of view of durability. + +no-appendfsync-on-rewrite no + +# Automatic rewrite of the append only file. +# Redis is able to automatically rewrite the log file implicitly calling +# BGREWRITEAOF when the AOF log size grows by the specified percentage. +# +# This is how it works: Redis remembers the size of the AOF file after the +# latest rewrite (if no rewrite has happened since the restart, the size of +# the AOF at startup is used). +# +# This base size is compared to the current size. If the current size is +# bigger than the specified percentage, the rewrite is triggered. Also +# you need to specify a minimal size for the AOF file to be rewritten, this +# is useful to avoid rewriting the AOF file even if the percentage increase +# is reached but it is still pretty small. +# +# Specify a percentage of zero in order to disable the automatic AOF +# rewrite feature. + +auto-aof-rewrite-percentage 100 +auto-aof-rewrite-min-size 64mb + +# An AOF file may be found to be truncated at the end during the Redis +# startup process, when the AOF data gets loaded back into memory. +# This may happen when the system where Redis is running +# crashes, especially when an ext4 filesystem is mounted without the +# data=ordered option (however this can't happen when Redis itself +# crashes or aborts but the operating system still works correctly). +# +# Redis can either exit with an error when this happens, or load as much +# data as possible (the default now) and start if the AOF file is found +# to be truncated at the end. The following option controls this behavior. +# +# If aof-load-truncated is set to yes, a truncated AOF file is loaded and +# the Redis server starts emitting a log to inform the user of the event. +# Otherwise if the option is set to no, the server aborts with an error +# and refuses to start. When the option is set to no, the user requires +# to fix the AOF file using the "redis-check-aof" utility before to restart +# the server. +# +# Note that if the AOF file will be found to be corrupted in the middle +# the server will still exit with an error. This option only applies when +# Redis will try to read more data from the AOF file but not enough bytes +# will be found. +aof-load-truncated yes + +# When rewriting the AOF file, Redis is able to use an RDB preamble in the +# AOF file for faster rewrites and recoveries. When this option is turned +# on the rewritten AOF file is composed of two different stanzas: +# +# [RDB file][AOF tail] +# +# When loading Redis recognizes that the AOF file starts with the "REDIS" +# string and loads the prefixed RDB file, and continues loading the AOF +# tail. +# +# This is currently turned off by default in order to avoid the surprise +# of a format change, but will at some point be used as the default. +aof-use-rdb-preamble no + +################################ LUA SCRIPTING ############################### + +# Max execution time of a Lua script in milliseconds. +# +# If the maximum execution time is reached Redis will log that a script is +# still in execution after the maximum allowed time and will start to +# reply to queries with an error. +# +# When a long running script exceeds the maximum execution time only the +# SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be +# used to stop a script that did not yet called write commands. The second +# is the only way to shut down the server in the case a write command was +# already issued by the script but the user doesn't want to wait for the natural +# termination of the script. +# +# Set it to 0 or a negative value for unlimited execution without warnings. +lua-time-limit 5000 + +################################ REDIS CLUSTER ############################### +# +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# WARNING EXPERIMENTAL: Redis Cluster is considered to be stable code, however +# in order to mark it as "mature" we need to wait for a non trivial percentage +# of users to deploy it in production. +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# Normal Redis instances can't be part of a Redis Cluster; only nodes that are +# started as cluster nodes can. In order to start a Redis instance as a +# cluster node enable the cluster support uncommenting the following: +# +# cluster-enabled yes + +# Every cluster node has a cluster configuration file. This file is not +# intended to be edited by hand. It is created and updated by Redis nodes. +# Every Redis Cluster node requires a different cluster configuration file. +# Make sure that instances running in the same system do not have +# overlapping cluster configuration file names. +# +# cluster-config-file nodes-6379.conf + +# Cluster node timeout is the amount of milliseconds a node must be unreachable +# for it to be considered in failure state. +# Most other internal time limits are multiple of the node timeout. +# +# cluster-node-timeout 15000 + +# A slave of a failing master will avoid to start a failover if its data +# looks too old. +# +# There is no simple way for a slave to actually have an exact measure of +# its "data age", so the following two checks are performed: +# +# 1) If there are multiple slaves able to failover, they exchange messages +# in order to try to give an advantage to the slave with the best +# replication offset (more data from the master processed). +# Slaves will try to get their rank by offset, and apply to the start +# of the failover a delay proportional to their rank. +# +# 2) Every single slave computes the time of the last interaction with +# its master. This can be the last ping or command received (if the master +# is still in the "connected" state), or the time that elapsed since the +# disconnection with the master (if the replication link is currently down). +# If the last interaction is too old, the slave will not try to failover +# at all. +# +# The point "2" can be tuned by user. Specifically a slave will not perform +# the failover if, since the last interaction with the master, the time +# elapsed is greater than: +# +# (node-timeout * slave-validity-factor) + repl-ping-slave-period +# +# So for example if node-timeout is 30 seconds, and the slave-validity-factor +# is 10, and assuming a default repl-ping-slave-period of 10 seconds, the +# slave will not try to failover if it was not able to talk with the master +# for longer than 310 seconds. +# +# A large slave-validity-factor may allow slaves with too old data to failover +# a master, while a too small value may prevent the cluster from being able to +# elect a slave at all. +# +# For maximum availability, it is possible to set the slave-validity-factor +# to a value of 0, which means, that slaves will always try to failover the +# master regardless of the last time they interacted with the master. +# (However they'll always try to apply a delay proportional to their +# offset rank). +# +# Zero is the only value able to guarantee that when all the partitions heal +# the cluster will always be able to continue. +# +# cluster-slave-validity-factor 10 + +# Cluster slaves are able to migrate to orphaned masters, that are masters +# that are left without working slaves. This improves the cluster ability +# to resist to failures as otherwise an orphaned master can't be failed over +# in case of failure if it has no working slaves. +# +# Slaves migrate to orphaned masters only if there are still at least a +# given number of other working slaves for their old master. This number +# is the "migration barrier". A migration barrier of 1 means that a slave +# will migrate only if there is at least 1 other working slave for its master +# and so forth. It usually reflects the number of slaves you want for every +# master in your cluster. +# +# Default is 1 (slaves migrate only if their masters remain with at least +# one slave). To disable migration just set it to a very large value. +# A value of 0 can be set but is useful only for debugging and dangerous +# in production. +# +# cluster-migration-barrier 1 + +# By default Redis Cluster nodes stop accepting queries if they detect there +# is at least an hash slot uncovered (no available node is serving it). +# This way if the cluster is partially down (for example a range of hash slots +# are no longer covered) all the cluster becomes, eventually, unavailable. +# It automatically returns available as soon as all the slots are covered again. +# +# However sometimes you want the subset of the cluster which is working, +# to continue to accept queries for the part of the key space that is still +# covered. In order to do so, just set the cluster-require-full-coverage +# option to no. +# +# cluster-require-full-coverage yes + +# In order to setup your cluster make sure to read the documentation +# available at http://redis.io web site. + +########################## CLUSTER DOCKER/NAT support ######################## + +# In certain deployments, Redis Cluster nodes address discovery fails, because +# addresses are NAT-ted or because ports are forwarded (the typical case is +# Docker and other containers). +# +# In order to make Redis Cluster working in such environments, a static +# configuration where each node knows its public address is needed. The +# following two options are used for this scope, and are: +# +# * cluster-announce-ip +# * cluster-announce-port +# * cluster-announce-bus-port +# +# Each instruct the node about its address, client port, and cluster message +# bus port. The information is then published in the header of the bus packets +# so that other nodes will be able to correctly map the address of the node +# publishing the information. +# +# If the above options are not used, the normal Redis Cluster auto-detection +# will be used instead. +# +# Note that when remapped, the bus port may not be at the fixed offset of +# clients port + 10000, so you can specify any port and bus-port depending +# on how they get remapped. If the bus-port is not set, a fixed offset of +# 10000 will be used as usually. +# +# Example: +# +# cluster-announce-ip 10.1.1.5 +# cluster-announce-port 6379 +# cluster-announce-bus-port 6380 + +################################## SLOW LOG ################################### + +# The Redis Slow Log is a system to log queries that exceeded a specified +# execution time. The execution time does not include the I/O operations +# like talking with the client, sending the reply and so forth, +# but just the time needed to actually execute the command (this is the only +# stage of command execution where the thread is blocked and can not serve +# other requests in the meantime). +# +# You can configure the slow log with two parameters: one tells Redis +# what is the execution time, in microseconds, to exceed in order for the +# command to get logged, and the other parameter is the length of the +# slow log. When a new command is logged the oldest one is removed from the +# queue of logged commands. + +# The following time is expressed in microseconds, so 1000000 is equivalent +# to one second. Note that a negative number disables the slow log, while +# a value of zero forces the logging of every command. +slowlog-log-slower-than 10000 + +# There is no limit to this length. Just be aware that it will consume memory. +# You can reclaim memory used by the slow log with SLOWLOG RESET. +slowlog-max-len 128 + +################################ LATENCY MONITOR ############################## + +# The Redis latency monitoring subsystem samples different operations +# at runtime in order to collect data related to possible sources of +# latency of a Redis instance. +# +# Via the LATENCY command this information is available to the user that can +# print graphs and obtain reports. +# +# The system only logs operations that were performed in a time equal or +# greater than the amount of milliseconds specified via the +# latency-monitor-threshold configuration directive. When its value is set +# to zero, the latency monitor is turned off. +# +# By default latency monitoring is disabled since it is mostly not needed +# if you don't have latency issues, and collecting data has a performance +# impact, that while very small, can be measured under big load. Latency +# monitoring can easily be enabled at runtime using the command +# "CONFIG SET latency-monitor-threshold " if needed. +latency-monitor-threshold 0 + +############################# EVENT NOTIFICATION ############################## + +# Redis can notify Pub/Sub clients about events happening in the key space. +# This feature is documented at http://redis.io/topics/notifications +# +# For instance if keyspace events notification is enabled, and a client +# performs a DEL operation on key "foo" stored in the Database 0, two +# messages will be published via Pub/Sub: +# +# PUBLISH __keyspace@0__:foo del +# PUBLISH __keyevent@0__:del foo +# +# It is possible to select the events that Redis will notify among a set +# of classes. Every class is identified by a single character: +# +# K Keyspace events, published with __keyspace@__ prefix. +# E Keyevent events, published with __keyevent@__ prefix. +# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... +# $ String commands +# l List commands +# s Set commands +# h Hash commands +# z Sorted set commands +# x Expired events (events generated every time a key expires) +# e Evicted events (events generated when a key is evicted for maxmemory) +# A Alias for g$lshzxe, so that the "AKE" string means all the events. +# +# The "notify-keyspace-events" takes as argument a string that is composed +# of zero or multiple characters. The empty string means that notifications +# are disabled. +# +# Example: to enable list and generic events, from the point of view of the +# event name, use: +# +# notify-keyspace-events Elg +# +# Example 2: to get the stream of the expired keys subscribing to channel +# name __keyevent@0__:expired use: +# +# notify-keyspace-events Ex +# +# By default all notifications are disabled because most users don't need +# this feature and the feature has some overhead. Note that if you don't +# specify at least one of K or E, no events will be delivered. +notify-keyspace-events "" + +############################### ADVANCED CONFIG ############################### + +# Hashes are encoded using a memory efficient data structure when they have a +# small number of entries, and the biggest entry does not exceed a given +# threshold. These thresholds can be configured using the following directives. +hash-max-ziplist-entries 512 +hash-max-ziplist-value 64 + +# Lists are also encoded in a special way to save a lot of space. +# The number of entries allowed per internal list node can be specified +# as a fixed maximum size or a maximum number of elements. +# For a fixed maximum size, use -5 through -1, meaning: +# -5: max size: 64 Kb <-- not recommended for normal workloads +# -4: max size: 32 Kb <-- not recommended +# -3: max size: 16 Kb <-- probably not recommended +# -2: max size: 8 Kb <-- good +# -1: max size: 4 Kb <-- good +# Positive numbers mean store up to _exactly_ that number of elements +# per list node. +# The highest performing option is usually -2 (8 Kb size) or -1 (4 Kb size), +# but if your use case is unique, adjust the settings as necessary. +list-max-ziplist-size -2 + +# Lists may also be compressed. +# Compress depth is the number of quicklist ziplist nodes from *each* side of +# the list to *exclude* from compression. The head and tail of the list +# are always uncompressed for fast push/pop operations. Settings are: +# 0: disable all list compression +# 1: depth 1 means "don't start compressing until after 1 node into the list, +# going from either the head or tail" +# So: [head]->node->node->...->node->[tail] +# [head], [tail] will always be uncompressed; inner nodes will compress. +# 2: [head]->[next]->node->node->...->node->[prev]->[tail] +# 2 here means: don't compress head or head->next or tail->prev or tail, +# but compress all nodes between them. +# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail] +# etc. +list-compress-depth 0 + +# Sets have a special encoding in just one case: when a set is composed +# of just strings that happen to be integers in radix 10 in the range +# of 64 bit signed integers. +# The following configuration setting sets the limit in the size of the +# set in order to use this special memory saving encoding. +set-max-intset-entries 512 + +# Similarly to hashes and lists, sorted sets are also specially encoded in +# order to save a lot of space. This encoding is only used when the length and +# elements of a sorted set are below the following limits: +zset-max-ziplist-entries 128 +zset-max-ziplist-value 64 + +# HyperLogLog sparse representation bytes limit. The limit includes the +# 16 bytes header. When an HyperLogLog using the sparse representation crosses +# this limit, it is converted into the dense representation. +# +# A value greater than 16000 is totally useless, since at that point the +# dense representation is more memory efficient. +# +# The suggested value is ~ 3000 in order to have the benefits of +# the space efficient encoding without slowing down too much PFADD, +# which is O(N) with the sparse encoding. The value can be raised to +# ~ 10000 when CPU is not a concern, but space is, and the data set is +# composed of many HyperLogLogs with cardinality in the 0 - 15000 range. +hll-sparse-max-bytes 3000 + +# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in +# order to help rehashing the main Redis hash table (the one mapping top-level +# keys to values). The hash table implementation Redis uses (see dict.c) +# performs a lazy rehashing: the more operation you run into a hash table +# that is rehashing, the more rehashing "steps" are performed, so if the +# server is idle the rehashing is never complete and some more memory is used +# by the hash table. +# +# The default is to use this millisecond 10 times every second in order to +# actively rehash the main dictionaries, freeing memory when possible. +# +# If unsure: +# use "activerehashing no" if you have hard latency requirements and it is +# not a good thing in your environment that Redis can reply from time to time +# to queries with 2 milliseconds delay. +# +# use "activerehashing yes" if you don't have such hard requirements but +# want to free memory asap when possible. +activerehashing yes + +# The client output buffer limits can be used to force disconnection of clients +# that are not reading data from the server fast enough for some reason (a +# common reason is that a Pub/Sub client can't consume messages as fast as the +# publisher can produce them). +# +# The limit can be set differently for the three different classes of clients: +# +# normal -> normal clients including MONITOR clients +# slave -> slave clients +# pubsub -> clients subscribed to at least one pubsub channel or pattern +# +# The syntax of every client-output-buffer-limit directive is the following: +# +# client-output-buffer-limit +# +# A client is immediately disconnected once the hard limit is reached, or if +# the soft limit is reached and remains reached for the specified number of +# seconds (continuously). +# So for instance if the hard limit is 32 megabytes and the soft limit is +# 16 megabytes / 10 seconds, the client will get disconnected immediately +# if the size of the output buffers reach 32 megabytes, but will also get +# disconnected if the client reaches 16 megabytes and continuously overcomes +# the limit for 10 seconds. +# +# By default normal clients are not limited because they don't receive data +# without asking (in a push way), but just after a request, so only +# asynchronous clients may create a scenario where data is requested faster +# than it can read. +# +# Instead there is a default limit for pubsub and slave clients, since +# subscribers and slaves receive data in a push fashion. +# +# Both the hard or the soft limit can be disabled by setting them to zero. +client-output-buffer-limit normal 0 0 0 +client-output-buffer-limit slave 256mb 64mb 60 +client-output-buffer-limit pubsub 32mb 8mb 60 + +# Client query buffers accumulate new commands. They are limited to a fixed +# amount by default in order to avoid that a protocol desynchronization (for +# instance due to a bug in the client) will lead to unbound memory usage in +# the query buffer. However you can configure it here if you have very special +# needs, such us huge multi/exec requests or alike. +# +# client-query-buffer-limit 1gb + +# In the Redis protocol, bulk requests, that are, elements representing single +# strings, are normally limited ot 512 mb. However you can change this limit +# here. +# +# proto-max-bulk-len 512mb + +# Redis calls an internal function to perform many background tasks, like +# closing connections of clients in timeout, purging expired keys that are +# never requested, and so forth. +# +# Not all tasks are performed with the same frequency, but Redis checks for +# tasks to perform according to the specified "hz" value. +# +# By default "hz" is set to 10. Raising the value will use more CPU when +# Redis is idle, but at the same time will make Redis more responsive when +# there are many keys expiring at the same time, and timeouts may be +# handled with more precision. +# +# The range is between 1 and 500, however a value over 100 is usually not +# a good idea. Most users should use the default of 10 and raise this up to +# 100 only in environments where very low latency is required. +hz 10 + +# When a child rewrites the AOF file, if the following option is enabled +# the file will be fsync-ed every 32 MB of data generated. This is useful +# in order to commit the file to the disk more incrementally and avoid +# big latency spikes. +aof-rewrite-incremental-fsync yes + +# Redis LFU eviction (see maxmemory setting) can be tuned. However it is a good +# idea to start with the default settings and only change them after investigating +# how to improve the performances and how the keys LFU change over time, which +# is possible to inspect via the OBJECT FREQ command. +# +# There are two tunable parameters in the Redis LFU implementation: the +# counter logarithm factor and the counter decay time. It is important to +# understand what the two parameters mean before changing them. +# +# The LFU counter is just 8 bits per key, it's maximum value is 255, so Redis +# uses a probabilistic increment with logarithmic behavior. Given the value +# of the old counter, when a key is accessed, the counter is incremented in +# this way: +# +# 1. A random number R between 0 and 1 is extracted. +# 2. A probability P is calculated as 1/(old_value*lfu_log_factor+1). +# 3. The counter is incremented only if R < P. +# +# The default lfu-log-factor is 10. This is a table of how the frequency +# counter changes with a different number of accesses with different +# logarithmic factors: +# +# +--------+------------+------------+------------+------------+------------+ +# | factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits | +# +--------+------------+------------+------------+------------+------------+ +# | 0 | 104 | 255 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 1 | 18 | 49 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 10 | 10 | 18 | 142 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 100 | 8 | 11 | 49 | 143 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# +# NOTE: The above table was obtained by running the following commands: +# +# redis-benchmark -n 1000000 incr foo +# redis-cli object freq foo +# +# NOTE 2: The counter initial value is 5 in order to give new objects a chance +# to accumulate hits. +# +# The counter decay time is the time, in minutes, that must elapse in order +# for the key counter to be divided by two (or decremented if it has a value +# less <= 10). +# +# The default value for the lfu-decay-time is 1. A Special value of 0 means to +# decay the counter every time it happens to be scanned. +# +# lfu-log-factor 10 +# lfu-decay-time 1 + +########################### ACTIVE DEFRAGMENTATION ####################### +# +# WARNING THIS FEATURE IS EXPERIMENTAL. However it was stress tested +# even in production and manually tested by multiple engineers for some +# time. +# +# What is active defragmentation? +# ------------------------------- +# +# Active (online) defragmentation allows a Redis server to compact the +# spaces left between small allocations and deallocations of data in memory, +# thus allowing to reclaim back memory. +# +# Fragmentation is a natural process that happens with every allocator (but +# less so with Jemalloc, fortunately) and certain workloads. Normally a server +# restart is needed in order to lower the fragmentation, or at least to flush +# away all the data and create it again. However thanks to this feature +# implemented by Oran Agra for Redis 4.0 this process can happen at runtime +# in an "hot" way, while the server is running. +# +# Basically when the fragmentation is over a certain level (see the +# configuration options below) Redis will start to create new copies of the +# values in contiguous memory regions by exploiting certain specific Jemalloc +# features (in order to understand if an allocation is causing fragmentation +# and to allocate it in a better place), and at the same time, will release the +# old copies of the data. This process, repeated incrementally for all the keys +# will cause the fragmentation to drop back to normal values. +# +# Important things to understand: +# +# 1. This feature is disabled by default, and only works if you compiled Redis +# to use the copy of Jemalloc we ship with the source code of Redis. +# This is the default with Linux builds. +# +# 2. You never need to enable this feature if you don't have fragmentation +# issues. +# +# 3. Once you experience fragmentation, you can enable this feature when +# needed with the command "CONFIG SET activedefrag yes". +# +# The configuration parameters are able to fine tune the behavior of the +# defragmentation process. If you are not sure about what they mean it is +# a good idea to leave the defaults untouched. + +# Enabled active defragmentation +# activedefrag yes + +# Minimum amount of fragmentation waste to start active defrag +# active-defrag-ignore-bytes 100mb + +# Minimum percentage of fragmentation to start active defrag +# active-defrag-threshold-lower 10 + +# Maximum percentage of fragmentation at which we use maximum effort +# active-defrag-threshold-upper 100 + +# Minimal effort for defrag in CPU percentage +# active-defrag-cycle-min 25 + +# Maximal effort for defrag in CPU percentage +# active-defrag-cycle-max 75 + diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/attachment/21344f62d80b417d8e25343ffe976f7f.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/attachment/21344f62d80b417d8e25343ffe976f7f.png new file mode 100644 index 00000000..6775c929 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/attachment/21344f62d80b417d8e25343ffe976f7f.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/attachment/d9aa27ea7eec4375b123e11ce92ec9b5.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/attachment/d9aa27ea7eec4375b123e11ce92ec9b5.png new file mode 100644 index 00000000..6775c929 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/attachment/d9aa27ea7eec4375b123e11ce92ec9b5.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/attachment/dcd2db9b75664251a3baf595f6752d90.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/attachment/dcd2db9b75664251a3baf595f6752d90.png new file mode 100644 index 00000000..6775c929 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/attachment/dcd2db9b75664251a3baf595f6752d90.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/security_attachment/0c20b1c7256148018451852ddae9f8aa.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/security_attachment/0c20b1c7256148018451852ddae9f8aa.png new file mode 100644 index 00000000..6775c929 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/security_attachment/0c20b1c7256148018451852ddae9f8aa.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/security_attachment/861726471ed54fee96f8c16d3e76550e.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/security_attachment/861726471ed54fee96f8c16d3e76550e.png new file mode 100644 index 00000000..6775c929 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/security_attachment/861726471ed54fee96f8c16d3e76550e.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/security_attachment/e85a5b89d3bd4a3f94d58b0630afc7af.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/security_attachment/e85a5b89d3bd4a3f94d58b0630afc7af.png new file mode 100644 index 00000000..6775c929 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/attachment/ZzTestFlowContract/security_attachment/e85a5b89d3bd4a3f94d58b0630afc7af.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/1252138daaf744a3b1fdf06a07c5a173.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/1252138daaf744a3b1fdf06a07c5a173.png new file mode 100644 index 00000000..f2df5bb8 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/1252138daaf744a3b1fdf06a07c5a173.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/38b7e4a097654ff38e176846ba005fcf.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/38b7e4a097654ff38e176846ba005fcf.png new file mode 100644 index 00000000..f2df5bb8 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/38b7e4a097654ff38e176846ba005fcf.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/e782ced275f4402297ce5dbace68c06f.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/e782ced275f4402297ce5dbace68c06f.png new file mode 100644 index 00000000..6775c929 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/e782ced275f4402297ce5dbace68c06f.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/f33b658b052f487c9a34af274f48dcd3.png b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/f33b658b052f487c9a34af274f48dcd3.png new file mode 100644 index 00000000..f2df5bb8 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-service/zz-resource/upload-files/online/image/ZzTestFlowSubmitDetail/image_url/f33b658b052f487c9a34af274f48dcd3.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/.browserslistrc b/orange-demo-flowable/orange-demo-flowable-web/.browserslistrc new file mode 100644 index 00000000..d6471a38 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/.browserslistrc @@ -0,0 +1,2 @@ +> 1% +last 2 versions diff --git a/orange-demo-flowable/orange-demo-flowable-web/.editorconfig b/orange-demo-flowable/orange-demo-flowable-web/.editorconfig new file mode 100644 index 00000000..7053c49a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/orange-demo-flowable/orange-demo-flowable-web/.eslintignore b/orange-demo-flowable/orange-demo-flowable-web/.eslintignore new file mode 100644 index 00000000..9c420b5a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/.eslintignore @@ -0,0 +1 @@ +/src/views/workflow/package/* \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/.eslintrc.js b/orange-demo-flowable/orange-demo-flowable-web/.eslintrc.js new file mode 100644 index 00000000..81d92950 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/.eslintrc.js @@ -0,0 +1,39 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/essential', + '@vue/standard' + ], + parserOptions: { + parser: 'babel-eslint' + }, + rules: { + 'no-console': 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'semi': ['off', 'always'], + 'prefer-promise-reject-errors': ['error', { 'allowEmptyReject': true }], + 'no-trailing-spaces': ['error', { 'skipBlankLines': true }], + 'prefer-const': ['off'], + 'quote-props': ['off'], + 'object-curly-spacing': ['off'], + 'dot-notation': ['off'], + 'lines-between-class-members': ['off'], + // 'no-undef': ['off', 'always'], + // 'no-unused-vars': ['off', 'always'], + 'no-new-func': ['off', 'always'] + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + } + ] +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/.gitignore b/orange-demo-flowable/orange-demo-flowable-web/.gitignore new file mode 100644 index 00000000..a0dddc6f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/orange-demo-flowable/orange-demo-flowable-web/README.md b/orange-demo-flowable/orange-demo-flowable-web/README.md new file mode 100644 index 00000000..3b5fbf8e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/README.md @@ -0,0 +1,15 @@ +## 橙单代码生成器 +### 构建命令 +``` bash +# install dependencies +npm install + +# serve with hot reload at localhost:8080 +npm run dev + +# build for production with minification +npm run build + +# run all tests +npm test +``` diff --git a/orange-demo-flowable/orange-demo-flowable-web/babel.config.js b/orange-demo-flowable/orange-demo-flowable-web/babel.config.js new file mode 100644 index 00000000..e9558405 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/jest.config.js b/orange-demo-flowable/orange-demo-flowable-web/jest.config.js new file mode 100644 index 00000000..0f957914 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: '@vue/cli-plugin-unit-jest' +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/package.json b/orange-demo-flowable/orange-demo-flowable-web/package.json new file mode 100644 index 00000000..db304a7c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/package.json @@ -0,0 +1,71 @@ +{ + "name": "orange-project", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "dev": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "axios": "^0.18.0", + "echarts": "^4.2.1", + "element-ui": "^2.13.0", + "jquery": "^3.3.1", + "js-cookie": "^2.2.1", + "jsencrypt": "^3.0.0-rc.1", + "json-bigint": "^0.3.0", + "layui-layer": "^1.0.9", + "lodash": "^4.17.5", + "core-js": "^3.6.4", + "register-service-worker": "^1.6.2", + "sortablejs": "^1.7.0", + "v-charts": "^1.19.0", + "vue": "^2.6.11", + "vue-router": "^3.1.5", + "vuex": "^3.1.2", + "wangeditor": "^3.1.1", + "vue-json-viewer": "^2.2.18", + "min-dash": "^3.5.2", + "vuedraggable": "^2.24.3", + "xml-js": "^1.6.11", + "highlight.js": "^10.5.0", + "bpmn-js-token-simulation": "^0.10.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.2.0", + "@vue/cli-plugin-eslint": "~4.2.0", + "@vue/cli-plugin-pwa": "~4.2.0", + "@vue/cli-plugin-router": "~4.2.0", + "@vue/cli-plugin-unit-jest": "~4.2.0", + "@vue/cli-plugin-vuex": "~4.2.0", + "@vue/cli-service": "~4.2.0", + "@vue/eslint-config-standard": "^5.1.0", + "@vue/test-utils": "1.0.0-beta.31", + "babel-eslint": "^10.0.3", + "bpmn-js": "^7.4.0", + "bpmn-js-properties-panel": "^0.37.2", + "camunda-bpmn-moddle": "^4.4.1", + "eslint": "^6.7.2", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.0", + "eslint-plugin-vue": "^6.1.2", + "lint-staged": "^9.5.0", + "node-sass": "^4.13.1", + "sass-loader": "^7.3.1", + "vue-template-compiler": "^2.6.11" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "lint-staged": { + "*.{js,jsx,vue}": [ + "vue-cli-service lint", + "git add" + ] + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/favicon.ico b/orange-demo-flowable/orange-demo-flowable-web/public/favicon.ico new file mode 100644 index 00000000..df36fcfb Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/favicon.ico differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-192x192.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-192x192.png new file mode 100644 index 00000000..b02aa64d Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-192x192.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-512x512.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-512x512.png new file mode 100644 index 00000000..06088b01 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-512x512.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-maskable-192x192.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-maskable-192x192.png new file mode 100644 index 00000000..791e9c8c Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-maskable-192x192.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-maskable-512x512.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-maskable-512x512.png new file mode 100644 index 00000000..5f2098ed Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/android-chrome-maskable-512x512.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-120x120.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-120x120.png new file mode 100644 index 00000000..1427cf62 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-120x120.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-152x152.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-152x152.png new file mode 100644 index 00000000..f24d454a Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-152x152.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-180x180.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-180x180.png new file mode 100644 index 00000000..404e192a Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-180x180.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-60x60.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-60x60.png new file mode 100644 index 00000000..cf10a560 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-60x60.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-76x76.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-76x76.png new file mode 100644 index 00000000..c500769e Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon-76x76.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon.png new file mode 100644 index 00000000..03c0c5d5 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/apple-touch-icon.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/favicon-16x16.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/favicon-16x16.png new file mode 100644 index 00000000..42af0096 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/favicon-16x16.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/favicon-32x32.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/favicon-32x32.png new file mode 100644 index 00000000..46ca04de Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/favicon-32x32.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/msapplication-icon-144x144.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/msapplication-icon-144x144.png new file mode 100644 index 00000000..7808237a Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/msapplication-icon-144x144.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/mstile-150x150.png b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/mstile-150x150.png new file mode 100644 index 00000000..3b37a43a Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/mstile-150x150.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/safari-pinned-tab.svg b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/safari-pinned-tab.svg new file mode 100644 index 00000000..732afd8e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/public/img/icons/safari-pinned-tab.svg @@ -0,0 +1,149 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/index.html b/orange-demo-flowable/orange-demo-flowable-web/public/index.html new file mode 100644 index 00000000..011aade2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/public/index.html @@ -0,0 +1,16 @@ + + + + + + + 橙单代码生成平台 + + + +
+ + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/public/robots.txt b/orange-demo-flowable/orange-demo-flowable-web/public/robots.txt new file mode 100644 index 00000000..eb053628 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/App.vue b/orange-demo-flowable/orange-demo-flowable-web/src/App.vue new file mode 100644 index 00000000..7e16a155 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/App.vue @@ -0,0 +1,21 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/DictionaryController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/DictionaryController.js new file mode 100644 index 00000000..834ab047 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/DictionaryController.js @@ -0,0 +1,84 @@ +import * as staticDict from '@/staticDict' + +export default class DictionaryController { + static dictSysUserStatus () { + return new Promise((resolve) => { + resolve(staticDict.SysUserStatus); + }); + } + static dictSysUserType () { + return new Promise((resolve) => { + resolve(staticDict.SysUserType); + }); + } + static dictSysDept (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/upms/sysDept/listDict', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('部门字典'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictSysDeptByParentId (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/upms/sysDept/listDictByParentId', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('部门字典'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictAreaCode (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/app/areaCode/listDict', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('行政区划'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictAreaCodeByParentId (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/app/areaCode/listDictByParentId', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('行政区划'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictAddAreaCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('', 'post', params, axiosOption, httpOption); + } + static dictDeleteAreaCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('', 'post', params, axiosOption, httpOption); + } + static dictUpdateAreaCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('', 'post', params, axiosOption, httpOption); + } + static dictReloadAreaCodeCachedData (sender, params, axiosOption, httpOption) { + return sender.doUrl('', 'get', params, axiosOption, httpOption); + } + static dictSysDataPermType () { + return new Promise((resolve) => { + resolve(staticDict.SysDataPermType); + }); + } + static dictDeptPost (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('admin/upms/sysDept/listSysDeptPostWithRelation', 'get', params, axiosOption, httpOption).then(res => { + resolve(res.data); + }).catch(err => { + reject(err); + }); + }); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysDataPermController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysDataPermController.js new file mode 100644 index 00000000..15fd5ccc --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysDataPermController.js @@ -0,0 +1,61 @@ +export default class SysDataPermController { + /** + * @param params {dataPermId, dataPermName, deptIdListString} + */ + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/add', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId, dataPermName, deptIdListString} + */ + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/update', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId} + */ + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/delete', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermName} + */ + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/list', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId} + */ + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/view', 'get', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId, searchString} + */ + static listDataPermUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/listDataPermUser', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId, userIdListString} + */ + static addDataPermUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/addDataPermUser', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId, userId} + */ + static deleteDataPermUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/deleteDataPermUser', 'post', params, axiosOption, httpOption); + } + + static listNotInDataPermUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/listNotInDataPermUser', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysDeptController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysDeptController.js new file mode 100644 index 00000000..caabeedd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysDeptController.js @@ -0,0 +1,49 @@ +export default class SysDeptController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('admin/upms/sysDept/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/delete', 'post', params, axiosOption, httpOption); + } + + static listNotInSysDeptPost (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/listNotInSysDeptPost', 'post', params, axiosOption, httpOption); + } + + static listSysDeptPost (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/listSysDeptPost', 'post', params, axiosOption, httpOption); + } + + static addSysDeptPost (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/addSysDeptPost', 'post', params, axiosOption, httpOption); + } + + static updateSysDeptPost (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/updateSysDeptPost', 'post', params, axiosOption, httpOption); + } + + static deleteSysDeptPost (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/deleteSysDeptPost', 'post', params, axiosOption, httpOption); + } + + static viewSysDeptPost (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/viewSysDeptPost', 'get', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysPostController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysPostController.js new file mode 100644 index 00000000..665dcf7b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysPostController.js @@ -0,0 +1,21 @@ +export default class SysPostController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/upms/sysPost/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/upms/sysPost/view', 'get', params, axiosOption, httpOption); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/upms/sysPost/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/upms/sysPost/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/upms/sysPost/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysUserController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysUserController.js new file mode 100644 index 00000000..92d627d3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SysUserController.js @@ -0,0 +1,25 @@ +export default class SysUserController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('admin/upms/sysUser/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SystemController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SystemController.js new file mode 100644 index 00000000..75a4fd01 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SystemController.js @@ -0,0 +1,252 @@ +export default class SystemController { + static login (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/doLogin', 'post', params, axiosOption, httpOption); + } + + static logout (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/doLogout', 'post', params, axiosOption, httpOption); + } + + static changePassword (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/changePassword', 'post', params, axiosOption, httpOption); + } + + static getLoginInfo (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/getLoginInfo', 'get', params, axiosOption, httpOption); + } + + static getDictList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDict/list', 'post', params, axiosOption, httpOption); + } + + static getRoleList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/list', 'post', params, axiosOption, httpOption); + } + + static getRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/view', 'get', params, axiosOption, httpOption); + } + + static deleteRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/delete', 'post', params, axiosOption, httpOption); + } + + static addRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/add', 'post', params, axiosOption, httpOption); + } + + static updateRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/update', 'post', params, axiosOption, httpOption); + } + + static getUserList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/list', 'post', params, axiosOption, httpOption); + } + + static getUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/view', 'get', params, axiosOption, httpOption); + } + + static resetUserPassword (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/resetPassword', 'post', params, axiosOption, httpOption); + } + + static deleteUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/delete', 'post', params, axiosOption, httpOption); + } + + static addUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/add', 'post', params, axiosOption, httpOption); + } + + static updateUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/update', 'post', params, axiosOption, httpOption); + } + + static addDepartment (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/add', 'post', params, axiosOption, httpOption); + } + + static deleteDepartment (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/delete', 'post', params, axiosOption, httpOption); + } + + static updateDepartment (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/update', 'post', params, axiosOption, httpOption); + } + + static getDepartmentList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/list', 'post', params, axiosOption, httpOption); + } + + // 菜单接口 + static getMenuPermList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/list', 'post', params, axiosOption, httpOption); + } + static addMenu (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/add', 'post', params, axiosOption, httpOption); + } + + static updateMenu (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/update', 'post', params, axiosOption, httpOption); + } + static deleteMenu (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/delete', 'post', params, axiosOption, httpOption); + } + + static viewMenu (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/view', 'get', params, axiosOption, httpOption); + } + // 权限字接口 + static getPermCodeList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/list', 'post', params, axiosOption, httpOption); + } + + static addPermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/add', 'post', params, axiosOption, httpOption); + } + + static updatePermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/update', 'post', params, axiosOption, httpOption); + } + + static deletePermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/delete', 'post', params, axiosOption, httpOption); + } + + static viewPermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/view', 'get', params, axiosOption, httpOption); + } + + // 权限资源接口 + static getAllPermList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/listAll', 'post', params, axiosOption, httpOption); + } + + static getPermGroupList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/list', 'post', params, axiosOption, httpOption); + } + + static addPermGroup (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/add', 'post', params, axiosOption, httpOption); + } + + static updatePermGroup (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/update', 'post', params, axiosOption, httpOption); + } + + static deletePermGroup (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/delete', 'post', params, axiosOption, httpOption); + } + + static getPermList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/list', 'post', params, axiosOption, httpOption); + } + + static viewPerm (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/view', 'get', params, axiosOption, httpOption); + } + + static addPerm (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/add', 'post', params, axiosOption, httpOption); + } + + static updatePerm (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/update', 'post', params, axiosOption, httpOption); + } + + static deletePerm (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/delete', 'post', params, axiosOption, httpOption); + } + /** + * @param params {roleId, searchString} + */ + static listRoleUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listUserRole', 'post', params, axiosOption, httpOption); + } + + static listNotInUserRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listNotInUserRole', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {roleId, userIdListString} + */ + static addRoleUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/addUserRole', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {roleId, userId} + */ + static deleteRoleUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/deleteUserRole', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {} + */ + static queryRoleByPermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listAllRolesByPermCode', 'post', params, axiosOption, httpOption); + } + // 权限查询 + static listSysPermWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/listSysPermWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysPermCodeWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/listSysPermCodeWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysMenuWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/listSysMenuWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysPermByRoleIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listSysPermWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysPermCodeByRoleIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listSysPermCodeWithDetail', 'get', params, axiosOption, httpOption); + } + + static listMenuPermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/listMenuPerm', 'get', params, axiosOption, httpOption); + } + + static listSysPermByMenuIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/listSysPermWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysUserByMenuIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/listSysUserWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysUserByPermCodeIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/listSysUserWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysRoleByPermCodeIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/listSysRoleWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysUserByPermIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/listSysUserWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysRoleByPermIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/listSysRoleWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysMenuByPermIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/listSysMenuWithDetail', 'get', params, axiosOption, httpOption); + } + // 在线用户 + static listSysLoginUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/loginUser/list', 'post', params, axiosOption, httpOption); + } + + static deleteSysLoginUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/loginUser/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowCategoryController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowCategoryController.js new file mode 100644 index 00000000..52098e56 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowCategoryController.js @@ -0,0 +1,21 @@ +export default class FlowCategoryController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowCategory/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowCategory/view', 'get', params, axiosOption, httpOption); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowCategory/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowCategory/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowCategory/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowDictionaryController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowDictionaryController.js new file mode 100644 index 00000000..e453c9c9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowDictionaryController.js @@ -0,0 +1,15 @@ +import * as staticDict from '@/staticDict'; + +export default class FlowDictionaryController { + static dictFlowCategory (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/flow/flowCategory/listDict', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase(); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowEntryController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowEntryController.js new file mode 100644 index 00000000..e72a328d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowEntryController.js @@ -0,0 +1,49 @@ +export default class FlowEntryController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/view', 'get', params, axiosOption, httpOption); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/delete', 'post', params, axiosOption, httpOption); + } + + static publish (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/publish', 'post', params, axiosOption, httpOption); + } + + static listFlowEntryPublish (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/listFlowEntryPublish', 'get', params, axiosOption, httpOption); + } + + static updateMainVersion (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/updateMainVersion', 'post', params, axiosOption, httpOption); + } + + static suspendFlowEntryPublish (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/suspendFlowEntryPublish', 'post', params, axiosOption, httpOption); + } + + static activateFlowEntryPublish (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/activateFlowEntryPublish', 'post', params, axiosOption, httpOption); + } + + static viewDict (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/viewDict', 'get', params, axiosOption, httpOption); + } + + static listDict (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntry/listDict', 'get', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowEntryVariableController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowEntryVariableController.js new file mode 100644 index 00000000..d85d7ce9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowEntryVariableController.js @@ -0,0 +1,21 @@ +export default class FlowEntryVariableController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntryVariable/list', 'post', params, axiosOption, httpOption); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntryVariable/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntryVariable/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntryVariable/delete', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowEntryVariable/view', 'get', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowOperationController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowOperationController.js new file mode 100644 index 00000000..080f6a96 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowOperationController.js @@ -0,0 +1,98 @@ +export default class FlowOperationController { + // 启动流程实例并且提交表单信息 + static startAndTakeUserTask (sender, params, axiosOption, httpOption) { + let url = '/admin/flow/flowOnlineOperation/startAndTakeUserTask'; + if (axiosOption && axiosOption.processDefinitionKey) { + url += '/' + axiosOption.processDefinitionKey; + } + return sender.doUrl(url, 'post', params, axiosOption, httpOption); + } + // 获得流程以及工单信息 + static listWorkOrder (sender, params, axiosOption, httpOption) { + let url = '/admin/flow/flowOnlineOperation/listWorkOrder'; + if (axiosOption && axiosOption.processDefinitionKey) { + url += '/' + axiosOption.processDefinitionKey; + } + return sender.doUrl(url, 'post', params, axiosOption, httpOption); + } + // 撤销工单 + static cancelWorkOrder (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/cancelWorkOrder', 'post', params, axiosOption, httpOption); + } + // 提交用户任务数据 + static submitUserTask (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOnlineOperation/submitUserTask', 'post', params, axiosOption, httpOption); + } + // 获取历史流程数据 + static viewHistoricProcessInstance (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOnlineOperation/viewHistoricProcessInstance', 'get', params, axiosOption, httpOption); + } + // 获取用户任务数据 + static viewUserTask (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOnlineOperation/viewUserTask', 'get', params, axiosOption, httpOption); + } + // 获取在线表单工作流以及工作流下表单列表 + static listFlowEntryForm (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOnlineOperation/listFlowEntryForm', 'get', params, axiosOption, httpOption); + } + // 多实例加签 + static submitConsign (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/submitConsign', 'post', params, axiosOption, httpOption); + } + // 已办任务列表 + static listHistoricTask (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/listHistoricTask', 'post', params, axiosOption, httpOption); + } + // 获取已办任务信息 + static viewHistoricTaskInfo (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/viewHistoricTaskInfo', 'get', params, axiosOption, httpOption); + } + // 仅启动流程实例 + static startOnly (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/startOnly', 'post', params, axiosOption, httpOption); + } + // 获得流程定义初始化用户任务信息 * + static viewInitialTaskInfo (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/viewInitialTaskInfo', 'get', params, axiosOption, httpOption); + } + // 获取待办任务信息 * + static viewRuntimeTaskInfo (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/viewRuntimeTaskInfo', 'get', params, axiosOption, httpOption); + } + // 获取流程实例审批历史 * + static listFlowTaskComment (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/listFlowTaskComment', 'get', params, axiosOption, httpOption); + } + // 获取历史任务信息 * + static viewInitialHistoricTaskInfo (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/viewInitialHistoricTaskInfo', 'get', params, axiosOption, httpOption); + } + // 获取所有待办任务 * + static listRuntimeTask (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/listRuntimeTask', 'post', params, axiosOption, httpOption); + } + // 获得流程实例审批路径 * + static viewHighlightFlowData (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/viewHighlightFlowData', 'get', params, axiosOption, httpOption); + } + // 获得流程实例的配置XML * + static viewProcessBpmn (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/viewProcessBpmn', 'get', params, axiosOption, httpOption); + } + // 获得所有历史流程实例 * + static listAllHistoricProcessInstance (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/listAllHistoricProcessInstance', 'post', params, axiosOption, httpOption); + } + // 获得当前用户历史流程实例 * + static listHistoricProcessInstance (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/listHistoricProcessInstance', 'post', params, axiosOption, httpOption); + } + // 终止流程 * + static stopProcessInstance (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/stopProcessInstance', 'post', params, axiosOption, httpOption); + } + // 删除流程实例 * + static deleteProcessInstance (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/deleteProcessInstance', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineColumnController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineColumnController.js new file mode 100644 index 00000000..93c31961 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineColumnController.js @@ -0,0 +1,53 @@ +export default class OnlineColumnController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/online/onlineColumn/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/update', 'post', params, axiosOption, httpOption); + } + + static refreshColumn (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/refresh', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/delete', 'post', params, axiosOption, httpOption); + } + + static listOnlineColumnRule (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/listOnlineColumnRule', 'post', params, axiosOption, httpOption); + } + + static listNotInOnlineColumnRule (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/listNotInOnlineColumnRule', 'post', params, axiosOption, httpOption); + } + + static addOnlineColumnRule (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/addOnlineColumnRule', 'post', params, axiosOption, httpOption); + } + + static deleteOnlineColumnRule (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/deleteOnlineColumnRule', 'post', params, axiosOption, httpOption); + } + + static updateOnlineColumnRule (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/updateOnlineColumnRule', 'post', params, axiosOption, httpOption); + } + + static viewOnlineColumnRule (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineColumn/viewOnlineColumnRule', 'get', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDatasourceController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDatasourceController.js new file mode 100644 index 00000000..c29a9c79 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDatasourceController.js @@ -0,0 +1,25 @@ +export default class OnlineDatasourceController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasource/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasource/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/online/onlineDatasource/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasource/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasource/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasource/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDatasourceRelationController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDatasourceRelationController.js new file mode 100644 index 00000000..8c300193 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDatasourceRelationController.js @@ -0,0 +1,25 @@ +export default class OnlineDatasourceRelationController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasourceRelation/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasourceRelation/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/online/onlineDatasourceRelation/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasourceRelation/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasourceRelation/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDatasourceRelation/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDblinkController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDblinkController.js new file mode 100644 index 00000000..6bb2b067 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDblinkController.js @@ -0,0 +1,13 @@ +export default class OnlineDblinkController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDblink/list', 'post', params, axiosOption, httpOption); + } + + static listDblinkTables (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDblink/listDblinkTables', 'get', params, axiosOption, httpOption); + } + + static listDblinkTableColumns (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDblink/listDblinkTableColumns', 'get', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDictController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDictController.js new file mode 100644 index 00000000..aab324af --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineDictController.js @@ -0,0 +1,25 @@ +export default class OnlineDictController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDict/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDict/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/online/onlineDict/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDict/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDict/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineDict/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineFormController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineFormController.js new file mode 100644 index 00000000..13d555b1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineFormController.js @@ -0,0 +1,29 @@ +export default class OnlineFormController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineForm/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineForm/view', 'get', params, axiosOption, httpOption); + } + + static render (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineForm/render', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/online/onlineForm/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineForm/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineForm/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineForm/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineOperation.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineOperation.js new file mode 100644 index 00000000..5b010818 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineOperation.js @@ -0,0 +1,45 @@ +export default class OnlineOperation { + static listDict (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/listDict', 'post', params, axiosOption, httpOption); + } + + static listByDatasourceId (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/listByDatasourceId', 'post', params, axiosOption, httpOption); + } + + static listByOneToManyRelationId (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/listByOneToManyRelationId', 'post', params, axiosOption, httpOption); + } + + static addDatasource (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/addDatasource', 'post', params, axiosOption, httpOption); + } + + static addOneToManyRelation (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/addOneToManyRelation', 'post', params, axiosOption, httpOption); + } + + static updateDatasource (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/updateDatasource', 'post', params, axiosOption, httpOption); + } + + static updateOneToManyRelation (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/updateOneToManyRelation', 'post', params, axiosOption, httpOption); + } + + static viewByDatasourceId (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/viewByDatasourceId', 'get', params, axiosOption, httpOption); + } + + static viewByOneToManyRelationId (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/viewByOneToManyRelationId', 'get', params, axiosOption, httpOption); + } + + static deleteDatasource (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/deleteDatasource', 'post', params, axiosOption, httpOption); + } + + static deleteOneToManyRelation (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineOperation/deleteOneToManyRelation', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlinePageController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlinePageController.js new file mode 100644 index 00000000..257280d6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlinePageController.js @@ -0,0 +1,61 @@ +export default class OnlinePageController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/list', 'post', params, axiosOption, httpOption); + } + + static listAllPageAndForm (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/listAllPageAndForm', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/online/onlinePage/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/update', 'post', params, axiosOption, httpOption); + } + + static updatePublished (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/updatePublished', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/delete', 'post', params, axiosOption, httpOption); + } + + static updateStatus (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/updateStatus', 'post', params, axiosOption, httpOption); + } + + static listOnlinePageDatasource (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/listOnlinePageDatasource', 'post', params, axiosOption, httpOption); + } + + static listNotInOnlinePageDatasource (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/listNotInOnlinePageDatasource', 'post', params, axiosOption, httpOption); + } + + static addOnlinePageDatasource (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/addOnlinePageDatasource', 'post', params, axiosOption, httpOption); + } + + static deleteOnlinePageDatasource (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/deleteOnlinePageDatasource', 'post', params, axiosOption, httpOption); + } + + static updateOnlinePageDatasource (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/updateOnlinePageDatasource', 'post', params, axiosOption, httpOption); + } + + static viewOnlinePageDatasource (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlinePage/viewOnlinePageDatasource', 'get', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineRuleController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineRuleController.js new file mode 100644 index 00000000..54eff4fe --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineRuleController.js @@ -0,0 +1,25 @@ +export default class OnlineRuleController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineRule/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineRule/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/online/onlineRule/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineRule/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineRule/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineRule/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineTableController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineTableController.js new file mode 100644 index 00000000..84f1065d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineTableController.js @@ -0,0 +1,25 @@ +export default class OnlineTableController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineTable/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineTable/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/online/onlineTable/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineTable/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineTable/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineTable/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineVirtualColumnController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineVirtualColumnController.js new file mode 100644 index 00000000..903dd3c1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/OnlineFormController/OnlineVirtualColumnController.js @@ -0,0 +1,21 @@ +export default class OnlineVirtualColumnController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineVirtualColumn/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineVirtualColumn/view', 'get', params, axiosOption, httpOption); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineVirtualColumn/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineVirtualColumn/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/online/onlineVirtualColumn/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/flowController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/flowController.js new file mode 100644 index 00000000..eb57e436 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/flowController.js @@ -0,0 +1,13 @@ +import FlowDictionaryController from './FlowController/FlowDictionaryController.js'; +import FlowCategoryController from './FlowController/FlowCategoryController.js'; +import FlowEntryController from './FlowController/FlowEntryController.js'; +import FlowEntryVariableController from './FlowController/FlowEntryVariableController.js'; +import FlowOperationController from './FlowController/FlowOperationController.js'; + +export { + FlowDictionaryController, + FlowCategoryController, + FlowEntryController, + FlowEntryVariableController, + FlowOperationController +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/index.js new file mode 100644 index 00000000..cfe2238b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/index.js @@ -0,0 +1,15 @@ +import SystemController from './Controller/SystemController' +import SysDataPermController from './Controller/SysDataPermController' +import SysPostController from './Controller/SysPostController.js'; +import DictionaryController from './Controller/DictionaryController' +import SysDeptController from './Controller/SysDeptController.js'; +import SysUserController from './Controller/SysUserController.js'; + +export { + SystemController, + SysDataPermController, + SysPostController, + DictionaryController, + SysDeptController, + SysUserController +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/onlineController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/onlineController.js new file mode 100644 index 00000000..dcbee0d9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/onlineController.js @@ -0,0 +1,25 @@ +import OnlineDblinkController from './OnlineFormController/OnlineDblinkController.js'; +import OnlineDictController from './OnlineFormController/OnlineDictController.js'; +import OnlineTableController from './OnlineFormController/OnlineTableController.js'; +import OnlineColumnController from './OnlineFormController/OnlineColumnController.js'; +import OnlinePageController from './OnlineFormController/OnlinePageController.js'; +import OnlineFormController from './OnlineFormController/OnlineFormController.js'; +import OnlineDatasourceController from './OnlineFormController/OnlineDatasourceController.js'; +import OnlineDatasourceRelationController from './OnlineFormController/OnlineDatasourceRelationController.js'; +import OnlineRuleController from './OnlineFormController/OnlineRuleController.js'; +import OnlineVirtualColumnController from './OnlineFormController/OnlineVirtualColumnController.js'; +import OnlineOperation from './OnlineFormController/OnlineOperation.js'; + +export { + OnlineDblinkController, + OnlineDictController, + OnlineColumnController, + OnlineTableController, + OnlinePageController, + OnlineFormController, + OnlineDatasourceController, + OnlineDatasourceRelationController, + OnlineRuleController, + OnlineVirtualColumnController, + OnlineOperation +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-blue.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-blue.scss new file mode 100644 index 00000000..5e4966bb --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-blue.scss @@ -0,0 +1,1014 @@ +/* Element Chalk Variables */ + +@mixin linear-gradient ($from, $to, $direction) { + @if variable-exists(to) { + @if variable-exists(direction) { + background: linear-gradient($direction, $from, $to); + } @else { + background: linear-gradient($from, $to); + } + } @else { + background: $from; + } +} + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +/// color|1|Brand Color|0 +$--color-primary: #0092FF !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #67C23A !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +// color for left sidebar title +$--color-sidebar-title-text: #FFFFFF; +// color for left sidebar background +$--color-menu-background: $--color-primary; +$--color-menu-item-active-text-color: #FFFFFF; +$--color-menu-item-active-background: rgba(255, 255, 255, 0.01); +$--color-menu-item-active-background-to: rgba(255, 255, 255, 0.3); + +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: rgba(255, 255, 255, .12) !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-menu-background !default; +$--dropdown-menuItem-hover-color: $--color-white !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-white !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-menu-item-active-background !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-dark.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-dark.scss new file mode 100644 index 00000000..ed98457d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-dark.scss @@ -0,0 +1,1000 @@ +/* Element Chalk Variables */ + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +/// color|1|Brand Color|0 +$--color-primary: #409EFF !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #67C23A !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +// color for left sidebar title +$--color-sidebar-title-text: #FFFFFF; +// color for left sidebar background +$--color-menu-background: #272C34; +$--color-menu-item-active-text-color: #FFFFFF; +$--color-menu-item-active-background: $--color-primary; +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: $--color-primary-light-9 !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-menu-item-active-background !default; +$--dropdown-menuItem-hover-color: $--color-white !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-white !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-primary !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-green.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-green.scss new file mode 100644 index 00000000..e51e10f9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-green.scss @@ -0,0 +1,1000 @@ +/* Element Chalk Variables */ + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +/// color|1|Brand Color|0 +$--color-primary: #00988B !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #67C23A !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +// color for left sidebar title +$--color-sidebar-title-text: #FFFFFF; +// color for left sidebar background +$--color-menu-background: #272C34; +$--color-menu-item-active-text-color: #FFFFFF; +$--color-menu-item-active-background: $--color-primary; +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: $--color-primary-light-9 !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-menu-item-active-background !default; +$--dropdown-menuItem-hover-color: $--color-white !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-white !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-primary !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-light.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-light.scss new file mode 100644 index 00000000..2c6cdad8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-light.scss @@ -0,0 +1,998 @@ +/* Element Chalk Variables */ + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +// color for left sidebar title +$--color-sidebar-title-text: #381524; +// color for left sidebar background +$--color-menu-background: #FFFFFF; +/// color|1|Brand Color|0 +$--color-primary: #409EFF !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #67C23A !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: $--color-primary-light-9 !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-primary-light-9 !default; +$--dropdown-menuItem-hover-color: $--link-color !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-text-primary !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-primary-light-9 !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-orange.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-orange.scss new file mode 100644 index 00000000..26da27c0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/element-variables-orange.scss @@ -0,0 +1,1001 @@ +/* Element Chalk Variables */ + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +/// color|1|Brand Color|0 +$--color-primary: #FCA834 !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #6DC741 !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +// color for left sidebar title +$--color-sidebar-title-text: #FFFFFF; +// color for left sidebar background +$--color-menu-background: #042345; +$--color-menu-item-active-text-color: #FFFFFF; +$--color-menu-item-active-background: $--color-primary; +$--color-submenu-background: #021F3B; +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: rgba(255, 255, 255, .12) !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-primary !default; +$--dropdown-menuItem-hover-color: $--color-white !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-white !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-menu-item-active-background !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/default-header.jpg b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/default-header.jpg new file mode 100644 index 00000000..222d18da Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/default-header.jpg differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/login.png b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/login.png new file mode 100644 index 00000000..87130950 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/login.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/login_bg.jpg b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/login_bg.jpg new file mode 100644 index 00000000..efc558de Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/login_bg.jpg differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/login_logo.png b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/login_logo.png new file mode 100644 index 00000000..03712478 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/login_logo.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/logo.jpg b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/logo.jpg new file mode 100644 index 00000000..a88fc0d0 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/logo.jpg differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/logo.png b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/logo.png new file mode 100644 index 00000000..f2df5bb8 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/logo.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/orange-group1.png b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/orange-group1.png new file mode 100644 index 00000000..efd59f26 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/orange-group1.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/package.json b/orange-demo-flowable/orange-demo-flowable-web/src/assets/package.json new file mode 100644 index 00000000..a0912945 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/package.json @@ -0,0 +1,13 @@ +{ + "scripts": { + "theme-light": "et -c element-variables-light.scss", + "theme-dark": "et -c element-variables-dark.scss", + "theme-green": "et -c element-variables-green.scss", + "theme-orange": "et -c element-variables-orange.scss", + "theme-blue": "et -c element-variables-blue.scss" + }, + "devDependencies": { + "element-theme": "2.0.1", + "element-theme-chalk": "2.14.1" + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/base.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/base.scss new file mode 100644 index 00000000..76177f49 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/base.scss @@ -0,0 +1,651 @@ +@import "element-variables.scss"; +@import "transition.scss"; + +html, body { + padding: 0; + margin: 0; + font-size: 14px; + font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; + background-color: rgb(228,240,255); +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +$header-height: 60px; + +// 过滤组件长度 +$filter-item-width: 250px; +// 范围选择过滤组件长度 +$filter-item-range-width: 400px; +// 左侧过滤树组件每一项高度 +$tree-node-height: 40px; +// 高级管理表单标题高度 +$advanced-title-height: 50px; +$border-color: rgb(216, 220, 229); +$menuHover: rgba(255,255,255,0.3); +$menu-background-color: transparent; +$tabs-header-margin-bottom: 25px; +$tab-header-background-color: #EBEEF5; +$image-item-width: 65px; +$box-padding-size: 25px; + +/** + * 弹窗样式,封装的layer的弹窗 + **/ +body .layer-dialog .layui-layer-title{ + border-radius: 4px 4px 0px 0px; + border:1px solid #01000000; +} + +body .layer-dialog .layui-layer-setwin {color: #ffffff} + +body .layer-dialog { + border-radius: 4px; + border:1px solid #01000000; +} + +body .layer-dialog .layui-layer-content { + padding: $box-padding-size; +} +/** + * 左树右表弹窗样式 + */ +body .layer-advance-dialog { + border-radius: 4px; + border:1px solid #01000000; + background-color: #F8F8F8; +} + +body .layer-advance-dialog .layui-layer-title{ + border-radius: 4px 4px 0px 0px; + border:1px solid #01000000; +} + +body .layer-advance-dialog .layui-layer-content { + padding: 5px 15px; +} + +.orange-project { + .el-main { + padding: 0px; + } + .flex-box { + flex-wrap: wrap; + } + .scrollbar_dropdown__wrap { + overflow-x: hidden; + } + + .icon-btn.el-button { + font-size: 18px; + padding: 5px 0px; + } + + .default-padding-box { + padding: $box-padding-size; + } + + .padding-no-top { + padding: 0px $box-padding-size $box-padding-size $box-padding-size; + } + + .default-border { + border: 1px solid $--border-color-base; + } + + .default-border-left { + border-left: 1px solid $--border-color-base; + } + + .default-border-right { + border-right: 1px solid $--border-color-base; + } + + .default-border-top { + border-top: 1px solid $--border-color-base; + } + + .default-border-bottom { + border-bottom: 1px solid $--border-color-base; + } + + .page-close-box { + position: absolute; + background: #0092FF; + transform: rotate(45deg); + height: 50px; + width: 50px; + right: -25px; + top:-25px; + text-align: center; + + .el-button { + transform: rotate(-45deg); + color: white; + margin-top: 20px; + } + } + + /** + * 过滤组件样式 + **/ + .mask-box { + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.5); + top: 0; + z-index: 10; + } + + .filter-box { + position: relative; + background-color: white; + padding: $box-padding-size $box-padding-size 0px $box-padding-size; + z-index: 20; + } + + .advance-filter-box { + padding-bottom: 25px; + } + + .filter-item { + width: $filter-item-width; + } + + .cascader-item { + width: 160px!important; + } + + .is-range, .is-search { + width: $filter-item-range-width; + } + + .table-operation-box { + align-self: flex-end; + margin-bottom: 10px; + overflow: hidden; + } + + .table-check-box { + margin-right: 7px; + } + + /** + * 左侧树状组件的样式,用户高级管理表单以及用户管理表单 + **/ + .advanced-left-box { + border-right: 1px solid $border-color; + .el-tree-node__content { + height: $tree-node-height; + } + + .tree-node-item { + height: $tree-node-height; + line-height: $tree-node-height; + width: 100%; + + .tree-node-menu { + display: none; + float: right; + padding-right: 10px; + color: red!important; + } + + &:hover .tree-node-menu { + display: block; + } + } + + .el-tree-node .el-button+.el-button { + margin-left: 5px; + } + } + /** + * form表单输入组件宽度 + **/ + .full-width-input { + .el-select { + width: 100%; + } + + .el-input { + width: 100%; + } + + .el-cascader { + width: 100%; + } + + .el-date-editor { + width: 100%; + } + + .el-input-number { + width: 100%; + } + } + + .el-aside { + overflow: visible; + } + + .el-menu { + border-right-width: 0px; + } + + .sidebar-bg { + box-shadow: 0 1px 4px rgba(0,21,41,.08)!important; + } + + .sidebar-title { + display: flex; + align-items: center; + height: 60px; + padding: 0px 20px; + } + + .sidebar-title-text { + font-size: 18px; + color: $--color-sidebar-title-text; + padding-left: 15px; + } + + @if global-variable-exists(--color-menu-item-active-text-color) { + .el-menu:not(.el-menu--horizontal) .el-menu-item.is-active { + color: $--color-menu-item-active-text-color!important; + } + + .el-menu:not(.el-menu--horizontal) .el-submenu__title i { + color: $--color-menu-item-active-text-color; + } + } + + @if global-variable-exists(--color-menu-item-active-background) { + .el-menu:not(.el-menu--horizontal) .el-menu-item.is-active { + @if global-variable-exists(--color-menu-item-active-background-to) { + background: linear-gradient(to left, $--color-menu-item-active-background, $--color-menu-item-active-background-to); + } @else { + background: $--color-menu-item-active-background; + } + } + .el-menu:not(.el-menu--horizontal) .el-menu-item:hover { + @if global-variable-exists(--color-menu-item-active-background-to) { + background: linear-gradient(to left, $--color-menu-item-active-background, $--color-menu-item-active-background-to); + } @else { + background: $--color-menu-item-active-background; + } + } + } + + @if global-variable-exists(--color-submenu-background) { + .left-menu .el-submenu .el-menu { + background-color: $--color-submenu-background; + } + } + + /** + * 多tab页表单,tab样式 + **/ + .el-tabs__header { + margin: 0 0 20px; + } + /** + * 表格表头背景色 + **/ + .table-header-gray, .has-gutter .gutter { + background-color: $tab-header-background-color; + } + + /** + * 操作按钮颜色 + **/ + .table-btn.delete { + color: #F56C6C; + } + + .table-btn.delete:hover { + color: #F78989; + } + + .table-btn.delete:disabled { + color: #DCDFE6; + } + + .table-btn.success { + color: #67C23A; + } + + .table-btn.success:hover { + color: #85CE61; + } + + .table-btn.success:disabled { + color: #DCDFE6; + } + + .table-btn.warning { + color: #E6A23C; + } + + .table-btn.warning:hover { + color: #EBB563; + } + + .table-btn.success:disabled { + color: #DCDFE6; + } + + /** + * 图片上传以及显示样式 + **/ + .upload-image-item { + font-size: 28px; + color: #8c939d; + width: $image-item-width; + height: $image-item-width; + text-align: center; + display: block; + + .el-upload i { + line-height: $image-item-width; + } + } + + .upload-image-multi { + display: inline; + } + + .upload-image-item .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; + } + .upload-image-item .el-upload:hover { + border-color: #409eff; + } + + .upload-image-show { + width: $image-item-width; + height: $image-item-width; + display: inline; + } + + .table-cell-image { + width: $image-item-width; + height: $image-item-width; + line-height: $image-item-width; + text-align: center; + font-size: $image-item-width; + color: #606266; + margin: 0px 5px; + } + + .upload-image-list .el-upload-list__item { + width: $image-item-width; + height: $image-item-width; + line-height: $image-item-width; + } + + .upload-image-item .el-upload-list--picture-card .el-upload-list__item { + width: $image-item-width; + height: $image-item-width; + } + + .upload-image-item .el-upload.el-upload--text { + width: $image-item-width; + height: $image-item-width; + } + + .upload-image-item .el-upload--picture-card { + width: $image-item-width; + height: $image-item-width; + line-height: $image-item-width; + } + /** + * + **/ + $header-menu-height: 32px; + + .sidebar { + height: 100%; + background-color: $--color-menu-background; + // overflow: hidden; + box-shadow: 0px 1px 4px rgba(0,21,41,.08); + } + + .header { + display: flex; + align-items: center; + height: $header-height; + background-color: white; + } + + .header .menu-column { + margin-right: 20px; + .el-menu-item.is-active { + border-left: 0px solid #47ba5a; + } + } + + .header-menu { + float: right; + height: $header-menu-height; + line-height: $header-menu-height; + display: flex; + justify-content: flex-end; + flex-grow: 1 + } + + .header-img { + width: $header-menu-height; + height: $header-menu-height; + border-radius: 50%; + margin-left: 10px; + float: right; + } + + .el-menu--horizontal.el-menu { + background-color: white; + } + + .el-menu--horizontal > .el-menu-item { + height: 40px; + line-height: 40px; + } + + .el-menu.el-menu--horizontal { + border-bottom: none; + } + + .user-dropdown { + color: $--color-text-secondary; + cursor: pointer; + font-size: 12px; + } + .user-dropdown-item { + font-size: 12px; + color: $--color-text-primary; + } + + .hamburger-container { + line-height: 70px; + height: $header-height; + float: left; + padding: 0 10px; + } + + .el-submenu__title { + background: #00000000; + } + + .tree-select { + .el-tree-node__content { + height: 34px; + line-height: 34px; + padding-right: 10px; + } + } + + .tree-select.single-select-tree { + .el-tree-node.is-current > .el-tree-node__content > .el-tree-node__label { + color: $--color-primary; + font-weight: 700; + } + } + + .cell { + .operation-cell { + color: #006CDC; + cursor: pointer; + text-decoration: underline; + } + } + + .single-select-tree { + min-width: 200px!important; + } + + .base-card-header { + display: flex; + align-items: center; + height: 50px; + line-height: 50px; + } + + .base-card-operation { + flex-grow: 1; + display: flex; + justify-content: flex-end; + } + + .el-card__header { + padding: 0px 15px; + } + .el-card__body { + padding: 15px; + } + + .custom-cascader { + width: 200px!important; + } + + .no-scroll { + overflow: hidden; + } + + .custom-scroll .el-scrollbar__view { + overflow-x: hidden!important; + } + + .upload-img-del { + position: absolute; + height: 20px; + width: 20px; + line-height: 20px; + font-size: 16px; + top: 2px; + right: 2px; + color: #C0C4CC; + } + + .upload-img-del:hover { + color: #EF5E1C; + } + + .input-label { + display: inline-block; + height: 29px; + line-height: 28px; + } + + .input-progress { + height: 29px; + display: flex; + align-items: center; + } + + .input-item { + width: 100%!important; + } + + .table-header-gray { + background: rgba(237,237,237,1); + } + + .card-header { + display: flex; + justify-content: space-between; + padding: 10px 0px; + line-height: 28px; + } +} + +::-webkit-scrollbar { + width: 7px; + height: 7px; + background: none; +} + +::-webkit-scrollbar-thumb { + background: #DDDEE0; + border-radius: 7px; +} + +::-webkit-scrollbar-thumb:hover { + background: #A8A8A8; +} + +.ml20 { + margin-left: 20px; +} + +.mr20 { + margin-right: 20px; +} + +.mt20 { + margin-top: 20px; +} + +.mb20 { + margin-bottom: 20px; +} + +.pl20 { + padding-left: 20px; +} + +.pr20 { + padding-right: 20px; +} + +.pt20 { + padding-top: 20px; +} + +.pb20 { + padding-bottom: 20px; +} + +.gutter-left { + padding-left: 20px; +} + +.gutter-right { + padding-right: 20px; +} + +.gutter-top { + padding-top: 20px; +} + +.gutter-bottom { + padding-bottom: 20px; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/element-variables.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/element-variables.scss new file mode 100644 index 00000000..f75588ca --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/element-variables.scss @@ -0,0 +1,5 @@ +// @import "../element-variables-light.scss"; +@import "../element-variables-dark.scss"; +// @import "../element-variables-green.scss"; +// @import "../element-variables-orange.scss"; +// @import "../element-variables-blue.scss"; \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/form-style.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/form-style.scss new file mode 100644 index 00000000..027631f9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/form-style.scss @@ -0,0 +1,117 @@ +.form-advanced-manager { + .advance-filter-box { + position: absolute; + top: 100%; + left: 0px; + background-color: white; + width: 100%; + padding: 10px $box-padding-size 15px $box-padding-size; + } + + .title-box { + border-bottom: 1px solid $border-color; + padding: 0px 20px; + z-index: 20; + background-color: white; + height: $advanced-title-height; + + .title { + line-height: $advanced-title-height; + color: #606266; + } + + .menu-box { + position: absolute; + top: 0px; + right: 10px; + height: $advanced-title-height; + + .el-row { + margin: 10px 0px; + height: $advanced-title-height - 20; + } + } + } + + .advanced-right-box { + padding: 0px; + .gutter-box { + margin: (($advanced-title-height - 16)/2) 0px; + height: 16px; + width: 3px; + background-color: $--color-primary; + float: left + } + } +} + +.form-dict-manager { + .dict-title { + height: 50px; + line-height: 50px; + color: $--color-text-primary; + border-bottom: 1px solid $--border-color-base; + font-size: 14px; + + span { + margin-left: 20px; + } + } + + .dict-item { + width: 100%; + height: 40px; + line-height: 40px; + color: #606266; + cursor: pointer; + padding-left: 20px; + + &:hover { + background-color: $--color-primary-light-9; + } + } + + .active-dict-item { + border-left: 3px solid $--color-primary; + color: $--color-primary; + background-color: $--color-primary-light-9 !important; + } + + .el-scrollbar__bar.is-horizontal { + display: none!important; + } +} + + +.form-table-manager { + .advance-filter-box { + position: absolute; + padding: 20px; + top: 100%; + left: 0px; + background-color: white; + width: 100%; + padding: 10px $box-padding-size 15px $box-padding-size; + } +} + +.form-table-multi-select { + // +} + +.form-config { + padding: $box-padding-size; +} + +.form-multi-fragment { + // +} + +.form-single-fragment { + // +} + +.advance-query-form { + padding: 0px!important; + background-color: transparent!important;; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/index.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/index.scss new file mode 100644 index 00000000..a88aa046 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/index.scss @@ -0,0 +1,3 @@ +@import "../theme/index.css"; +@import "base.scss"; +@import "form-style.scss"; \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/transition.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/transition.scss new file mode 100644 index 00000000..49d81925 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/transition.scss @@ -0,0 +1,31 @@ +/*fade*/ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/*fade*/ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/alert.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/alert.css new file mode 100644 index 00000000..966d571c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/alert.css @@ -0,0 +1,343 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-alert { + width: 100%; + padding: 8px 16px; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + position: relative; + background-color: #FFFFFF; + overflow: hidden; + opacity: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-transition: opacity .2s; + transition: opacity .2s; } + .el-alert.is-light .el-alert__closebtn { + color: #C0C4CC; } + .el-alert.is-dark .el-alert__closebtn { + color: #FFFFFF; } + .el-alert.is-dark .el-alert__description { + color: #FFFFFF; } + .el-alert.is-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-alert--success.is-light { + background-color: #f0f9eb; + color: #67C23A; } + .el-alert--success.is-light .el-alert__description { + color: #67C23A; } + .el-alert--success.is-dark { + background-color: #67C23A; + color: #FFFFFF; } + .el-alert--info.is-light { + background-color: #f4f4f5; + color: #909399; } + .el-alert--info.is-dark { + background-color: #909399; + color: #FFFFFF; } + .el-alert--info .el-alert__description { + color: #909399; } + .el-alert--warning.is-light { + background-color: #fdf6ec; + color: #E6A23C; } + .el-alert--warning.is-light .el-alert__description { + color: #E6A23C; } + .el-alert--warning.is-dark { + background-color: #E6A23C; + color: #FFFFFF; } + .el-alert--error.is-light { + background-color: #fef0f0; + color: #F56C6C; } + .el-alert--error.is-light .el-alert__description { + color: #F56C6C; } + .el-alert--error.is-dark { + background-color: #F56C6C; + color: #FFFFFF; } + .el-alert__content { + display: table-cell; + padding: 0 8px; } + .el-alert__icon { + font-size: 16px; + width: 16px; } + .el-alert__icon.is-big { + font-size: 28px; + width: 28px; } + .el-alert__title { + font-size: 13px; + line-height: 18px; } + .el-alert__title.is-bold { + font-weight: bold; } + .el-alert .el-alert__description { + font-size: 12px; + margin: 5px 0 0 0; } + .el-alert__closebtn { + font-size: 12px; + opacity: 1; + position: absolute; + top: 12px; + right: 15px; + cursor: pointer; } + .el-alert__closebtn.is-customed { + font-style: normal; + font-size: 13px; + top: 9px; } + +.el-alert-fade-enter, +.el-alert-fade-leave-active { + opacity: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/aside.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/aside.css new file mode 100644 index 00000000..effb3502 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/aside.css @@ -0,0 +1,136 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-aside { + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/autocomplete.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/autocomplete.css new file mode 100644 index 00000000..de46b558 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/autocomplete.css @@ -0,0 +1,1467 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-autocomplete { + position: relative; + display: inline-block; } + +.el-autocomplete-suggestion { + margin: 5px 0; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 4px; + border: 1px solid #E4E7ED; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background-color: #FFFFFF; } + .el-autocomplete-suggestion__wrap { + max-height: 280px; + padding: 10px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-autocomplete-suggestion__list { + margin: 0; + padding: 0; } + .el-autocomplete-suggestion li { + padding: 0 20px; + margin: 0; + line-height: 34px; + cursor: pointer; + color: #606266; + font-size: 14px; + list-style: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-autocomplete-suggestion li:hover { + background-color: #F5F7FA; } + .el-autocomplete-suggestion li.highlighted { + background-color: #F5F7FA; } + .el-autocomplete-suggestion li.divider { + margin-top: 6px; + border-top: 1px solid #000000; } + .el-autocomplete-suggestion li.divider:last-child { + margin-bottom: -6px; } + .el-autocomplete-suggestion.is-loading li { + text-align: center; + height: 100px; + line-height: 100px; + font-size: 20px; + color: #999; } + .el-autocomplete-suggestion.is-loading li::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-autocomplete-suggestion.is-loading li:hover { + background-color: #FFFFFF; } + .el-autocomplete-suggestion.is-loading .el-icon-loading { + vertical-align: middle; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/avatar.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/avatar.css new file mode 100644 index 00000000..02d35e49 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/avatar.css @@ -0,0 +1,284 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-avatar { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; + color: #fff; + background: #C0C4CC; + width: 40px; + height: 40px; + line-height: 40px; + font-size: 14px; } + .el-avatar > img { + display: block; + height: 100%; + vertical-align: middle; } + .el-avatar--circle { + border-radius: 50%; } + .el-avatar--square { + border-radius: 4px; } + .el-avatar--icon { + font-size: 18px; } + .el-avatar--large { + width: 40px; + height: 40px; + line-height: 40px; } + .el-avatar--medium { + width: 36px; + height: 36px; + line-height: 36px; } + .el-avatar--small { + width: 28px; + height: 28px; + line-height: 28px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/backtop.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/backtop.css new file mode 100644 index 00000000..7c34d109 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/backtop.css @@ -0,0 +1,273 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-backtop { + position: fixed; + background-color: #FFFFFF; + width: 40px; + height: 40px; + border-radius: 50%; + color: #409EFF; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + font-size: 20px; + -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 0 6px rgba(0, 0, 0, 0.12); + cursor: pointer; + z-index: 5; } + .el-backtop:hover { + background-color: #F2F6FC; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/badge.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/badge.css new file mode 100644 index 00000000..eef98450 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/badge.css @@ -0,0 +1,290 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-badge { + position: relative; + vertical-align: middle; + display: inline-block; } + .el-badge__content { + background-color: #F56C6C; + border-radius: 10px; + color: #FFFFFF; + display: inline-block; + font-size: 12px; + height: 18px; + line-height: 18px; + padding: 0 6px; + text-align: center; + white-space: nowrap; + border: 1px solid #FFFFFF; } + .el-badge__content.is-fixed { + position: absolute; + top: 0; + right: 10px; + -webkit-transform: translateY(-50%) translateX(100%); + transform: translateY(-50%) translateX(100%); } + .el-badge__content.is-fixed.is-dot { + right: 5px; } + .el-badge__content.is-dot { + height: 8px; + width: 8px; + padding: 0; + right: 0; + border-radius: 50%; } + .el-badge__content--primary { + background-color: #409EFF; } + .el-badge__content--success { + background-color: #67C23A; } + .el-badge__content--warning { + background-color: #E6A23C; } + .el-badge__content--info { + background-color: #909399; } + .el-badge__content--danger { + background-color: #F56C6C; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/base.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/base.css new file mode 100644 index 00000000..2cbc1274 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/base.css @@ -0,0 +1,1244 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@font-face { + font-family: 'element-icons'; + src: url("fonts/element-icons.woff") format("woff"), url("fonts/element-icons.ttf") format("truetype"); + /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + font-weight: normal; + font-display: "auto"; + font-style: normal; } + +[class^="el-icon-"], [class*=" el-icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'element-icons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: baseline; + display: inline-block; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.el-icon-ice-cream-round:before { + content: "\e6a0"; } + +.el-icon-ice-cream-square:before { + content: "\e6a3"; } + +.el-icon-lollipop:before { + content: "\e6a4"; } + +.el-icon-potato-strips:before { + content: "\e6a5"; } + +.el-icon-milk-tea:before { + content: "\e6a6"; } + +.el-icon-ice-drink:before { + content: "\e6a7"; } + +.el-icon-ice-tea:before { + content: "\e6a9"; } + +.el-icon-coffee:before { + content: "\e6aa"; } + +.el-icon-orange:before { + content: "\e6ab"; } + +.el-icon-pear:before { + content: "\e6ac"; } + +.el-icon-apple:before { + content: "\e6ad"; } + +.el-icon-cherry:before { + content: "\e6ae"; } + +.el-icon-watermelon:before { + content: "\e6af"; } + +.el-icon-grape:before { + content: "\e6b0"; } + +.el-icon-refrigerator:before { + content: "\e6b1"; } + +.el-icon-goblet-square-full:before { + content: "\e6b2"; } + +.el-icon-goblet-square:before { + content: "\e6b3"; } + +.el-icon-goblet-full:before { + content: "\e6b4"; } + +.el-icon-goblet:before { + content: "\e6b5"; } + +.el-icon-cold-drink:before { + content: "\e6b6"; } + +.el-icon-coffee-cup:before { + content: "\e6b8"; } + +.el-icon-water-cup:before { + content: "\e6b9"; } + +.el-icon-hot-water:before { + content: "\e6ba"; } + +.el-icon-ice-cream:before { + content: "\e6bb"; } + +.el-icon-dessert:before { + content: "\e6bc"; } + +.el-icon-sugar:before { + content: "\e6bd"; } + +.el-icon-tableware:before { + content: "\e6be"; } + +.el-icon-burger:before { + content: "\e6bf"; } + +.el-icon-knife-fork:before { + content: "\e6c1"; } + +.el-icon-fork-spoon:before { + content: "\e6c2"; } + +.el-icon-chicken:before { + content: "\e6c3"; } + +.el-icon-food:before { + content: "\e6c4"; } + +.el-icon-dish-1:before { + content: "\e6c5"; } + +.el-icon-dish:before { + content: "\e6c6"; } + +.el-icon-moon-night:before { + content: "\e6ee"; } + +.el-icon-moon:before { + content: "\e6f0"; } + +.el-icon-cloudy-and-sunny:before { + content: "\e6f1"; } + +.el-icon-partly-cloudy:before { + content: "\e6f2"; } + +.el-icon-cloudy:before { + content: "\e6f3"; } + +.el-icon-sunny:before { + content: "\e6f6"; } + +.el-icon-sunset:before { + content: "\e6f7"; } + +.el-icon-sunrise-1:before { + content: "\e6f8"; } + +.el-icon-sunrise:before { + content: "\e6f9"; } + +.el-icon-heavy-rain:before { + content: "\e6fa"; } + +.el-icon-lightning:before { + content: "\e6fb"; } + +.el-icon-light-rain:before { + content: "\e6fc"; } + +.el-icon-wind-power:before { + content: "\e6fd"; } + +.el-icon-baseball:before { + content: "\e712"; } + +.el-icon-soccer:before { + content: "\e713"; } + +.el-icon-football:before { + content: "\e715"; } + +.el-icon-basketball:before { + content: "\e716"; } + +.el-icon-ship:before { + content: "\e73f"; } + +.el-icon-truck:before { + content: "\e740"; } + +.el-icon-bicycle:before { + content: "\e741"; } + +.el-icon-mobile-phone:before { + content: "\e6d3"; } + +.el-icon-service:before { + content: "\e6d4"; } + +.el-icon-key:before { + content: "\e6e2"; } + +.el-icon-unlock:before { + content: "\e6e4"; } + +.el-icon-lock:before { + content: "\e6e5"; } + +.el-icon-watch:before { + content: "\e6fe"; } + +.el-icon-watch-1:before { + content: "\e6ff"; } + +.el-icon-timer:before { + content: "\e702"; } + +.el-icon-alarm-clock:before { + content: "\e703"; } + +.el-icon-map-location:before { + content: "\e704"; } + +.el-icon-delete-location:before { + content: "\e705"; } + +.el-icon-add-location:before { + content: "\e706"; } + +.el-icon-location-information:before { + content: "\e707"; } + +.el-icon-location-outline:before { + content: "\e708"; } + +.el-icon-location:before { + content: "\e79e"; } + +.el-icon-place:before { + content: "\e709"; } + +.el-icon-discover:before { + content: "\e70a"; } + +.el-icon-first-aid-kit:before { + content: "\e70b"; } + +.el-icon-trophy-1:before { + content: "\e70c"; } + +.el-icon-trophy:before { + content: "\e70d"; } + +.el-icon-medal:before { + content: "\e70e"; } + +.el-icon-medal-1:before { + content: "\e70f"; } + +.el-icon-stopwatch:before { + content: "\e710"; } + +.el-icon-mic:before { + content: "\e711"; } + +.el-icon-copy-document:before { + content: "\e718"; } + +.el-icon-full-screen:before { + content: "\e719"; } + +.el-icon-switch-button:before { + content: "\e71b"; } + +.el-icon-aim:before { + content: "\e71c"; } + +.el-icon-crop:before { + content: "\e71d"; } + +.el-icon-odometer:before { + content: "\e71e"; } + +.el-icon-time:before { + content: "\e71f"; } + +.el-icon-bangzhu:before { + content: "\e724"; } + +.el-icon-close-notification:before { + content: "\e726"; } + +.el-icon-microphone:before { + content: "\e727"; } + +.el-icon-turn-off-microphone:before { + content: "\e728"; } + +.el-icon-position:before { + content: "\e729"; } + +.el-icon-postcard:before { + content: "\e72a"; } + +.el-icon-message:before { + content: "\e72b"; } + +.el-icon-chat-line-square:before { + content: "\e72d"; } + +.el-icon-chat-dot-square:before { + content: "\e72e"; } + +.el-icon-chat-dot-round:before { + content: "\e72f"; } + +.el-icon-chat-square:before { + content: "\e730"; } + +.el-icon-chat-line-round:before { + content: "\e731"; } + +.el-icon-chat-round:before { + content: "\e732"; } + +.el-icon-set-up:before { + content: "\e733"; } + +.el-icon-turn-off:before { + content: "\e734"; } + +.el-icon-open:before { + content: "\e735"; } + +.el-icon-connection:before { + content: "\e736"; } + +.el-icon-link:before { + content: "\e737"; } + +.el-icon-cpu:before { + content: "\e738"; } + +.el-icon-thumb:before { + content: "\e739"; } + +.el-icon-female:before { + content: "\e73a"; } + +.el-icon-male:before { + content: "\e73b"; } + +.el-icon-guide:before { + content: "\e73c"; } + +.el-icon-news:before { + content: "\e73e"; } + +.el-icon-price-tag:before { + content: "\e744"; } + +.el-icon-discount:before { + content: "\e745"; } + +.el-icon-wallet:before { + content: "\e747"; } + +.el-icon-coin:before { + content: "\e748"; } + +.el-icon-money:before { + content: "\e749"; } + +.el-icon-bank-card:before { + content: "\e74a"; } + +.el-icon-box:before { + content: "\e74b"; } + +.el-icon-present:before { + content: "\e74c"; } + +.el-icon-sell:before { + content: "\e6d5"; } + +.el-icon-sold-out:before { + content: "\e6d6"; } + +.el-icon-shopping-bag-2:before { + content: "\e74d"; } + +.el-icon-shopping-bag-1:before { + content: "\e74e"; } + +.el-icon-shopping-cart-2:before { + content: "\e74f"; } + +.el-icon-shopping-cart-1:before { + content: "\e750"; } + +.el-icon-shopping-cart-full:before { + content: "\e751"; } + +.el-icon-smoking:before { + content: "\e752"; } + +.el-icon-no-smoking:before { + content: "\e753"; } + +.el-icon-house:before { + content: "\e754"; } + +.el-icon-table-lamp:before { + content: "\e755"; } + +.el-icon-school:before { + content: "\e756"; } + +.el-icon-office-building:before { + content: "\e757"; } + +.el-icon-toilet-paper:before { + content: "\e758"; } + +.el-icon-notebook-2:before { + content: "\e759"; } + +.el-icon-notebook-1:before { + content: "\e75a"; } + +.el-icon-files:before { + content: "\e75b"; } + +.el-icon-collection:before { + content: "\e75c"; } + +.el-icon-receiving:before { + content: "\e75d"; } + +.el-icon-suitcase-1:before { + content: "\e760"; } + +.el-icon-suitcase:before { + content: "\e761"; } + +.el-icon-film:before { + content: "\e763"; } + +.el-icon-collection-tag:before { + content: "\e765"; } + +.el-icon-data-analysis:before { + content: "\e766"; } + +.el-icon-pie-chart:before { + content: "\e767"; } + +.el-icon-data-board:before { + content: "\e768"; } + +.el-icon-data-line:before { + content: "\e76d"; } + +.el-icon-reading:before { + content: "\e769"; } + +.el-icon-magic-stick:before { + content: "\e76a"; } + +.el-icon-coordinate:before { + content: "\e76b"; } + +.el-icon-mouse:before { + content: "\e76c"; } + +.el-icon-brush:before { + content: "\e76e"; } + +.el-icon-headset:before { + content: "\e76f"; } + +.el-icon-umbrella:before { + content: "\e770"; } + +.el-icon-scissors:before { + content: "\e771"; } + +.el-icon-mobile:before { + content: "\e773"; } + +.el-icon-attract:before { + content: "\e774"; } + +.el-icon-monitor:before { + content: "\e775"; } + +.el-icon-search:before { + content: "\e778"; } + +.el-icon-takeaway-box:before { + content: "\e77a"; } + +.el-icon-paperclip:before { + content: "\e77d"; } + +.el-icon-printer:before { + content: "\e77e"; } + +.el-icon-document-add:before { + content: "\e782"; } + +.el-icon-document:before { + content: "\e785"; } + +.el-icon-document-checked:before { + content: "\e786"; } + +.el-icon-document-copy:before { + content: "\e787"; } + +.el-icon-document-delete:before { + content: "\e788"; } + +.el-icon-document-remove:before { + content: "\e789"; } + +.el-icon-tickets:before { + content: "\e78b"; } + +.el-icon-folder-checked:before { + content: "\e77f"; } + +.el-icon-folder-delete:before { + content: "\e780"; } + +.el-icon-folder-remove:before { + content: "\e781"; } + +.el-icon-folder-add:before { + content: "\e783"; } + +.el-icon-folder-opened:before { + content: "\e784"; } + +.el-icon-folder:before { + content: "\e78a"; } + +.el-icon-edit-outline:before { + content: "\e764"; } + +.el-icon-edit:before { + content: "\e78c"; } + +.el-icon-date:before { + content: "\e78e"; } + +.el-icon-c-scale-to-original:before { + content: "\e7c6"; } + +.el-icon-view:before { + content: "\e6ce"; } + +.el-icon-loading:before { + content: "\e6cf"; } + +.el-icon-rank:before { + content: "\e6d1"; } + +.el-icon-sort-down:before { + content: "\e7c4"; } + +.el-icon-sort-up:before { + content: "\e7c5"; } + +.el-icon-sort:before { + content: "\e6d2"; } + +.el-icon-finished:before { + content: "\e6cd"; } + +.el-icon-refresh-left:before { + content: "\e6c7"; } + +.el-icon-refresh-right:before { + content: "\e6c8"; } + +.el-icon-refresh:before { + content: "\e6d0"; } + +.el-icon-video-play:before { + content: "\e7c0"; } + +.el-icon-video-pause:before { + content: "\e7c1"; } + +.el-icon-d-arrow-right:before { + content: "\e6dc"; } + +.el-icon-d-arrow-left:before { + content: "\e6dd"; } + +.el-icon-arrow-up:before { + content: "\e6e1"; } + +.el-icon-arrow-down:before { + content: "\e6df"; } + +.el-icon-arrow-right:before { + content: "\e6e0"; } + +.el-icon-arrow-left:before { + content: "\e6de"; } + +.el-icon-top-right:before { + content: "\e6e7"; } + +.el-icon-top-left:before { + content: "\e6e8"; } + +.el-icon-top:before { + content: "\e6e6"; } + +.el-icon-bottom:before { + content: "\e6eb"; } + +.el-icon-right:before { + content: "\e6e9"; } + +.el-icon-back:before { + content: "\e6ea"; } + +.el-icon-bottom-right:before { + content: "\e6ec"; } + +.el-icon-bottom-left:before { + content: "\e6ed"; } + +.el-icon-caret-top:before { + content: "\e78f"; } + +.el-icon-caret-bottom:before { + content: "\e790"; } + +.el-icon-caret-right:before { + content: "\e791"; } + +.el-icon-caret-left:before { + content: "\e792"; } + +.el-icon-d-caret:before { + content: "\e79a"; } + +.el-icon-share:before { + content: "\e793"; } + +.el-icon-menu:before { + content: "\e798"; } + +.el-icon-s-grid:before { + content: "\e7a6"; } + +.el-icon-s-check:before { + content: "\e7a7"; } + +.el-icon-s-data:before { + content: "\e7a8"; } + +.el-icon-s-opportunity:before { + content: "\e7aa"; } + +.el-icon-s-custom:before { + content: "\e7ab"; } + +.el-icon-s-claim:before { + content: "\e7ad"; } + +.el-icon-s-finance:before { + content: "\e7ae"; } + +.el-icon-s-comment:before { + content: "\e7af"; } + +.el-icon-s-flag:before { + content: "\e7b0"; } + +.el-icon-s-marketing:before { + content: "\e7b1"; } + +.el-icon-s-shop:before { + content: "\e7b4"; } + +.el-icon-s-open:before { + content: "\e7b5"; } + +.el-icon-s-management:before { + content: "\e7b6"; } + +.el-icon-s-ticket:before { + content: "\e7b7"; } + +.el-icon-s-release:before { + content: "\e7b8"; } + +.el-icon-s-home:before { + content: "\e7b9"; } + +.el-icon-s-promotion:before { + content: "\e7ba"; } + +.el-icon-s-operation:before { + content: "\e7bb"; } + +.el-icon-s-unfold:before { + content: "\e7bc"; } + +.el-icon-s-fold:before { + content: "\e7a9"; } + +.el-icon-s-platform:before { + content: "\e7bd"; } + +.el-icon-s-order:before { + content: "\e7be"; } + +.el-icon-s-cooperation:before { + content: "\e7bf"; } + +.el-icon-bell:before { + content: "\e725"; } + +.el-icon-message-solid:before { + content: "\e799"; } + +.el-icon-video-camera:before { + content: "\e772"; } + +.el-icon-video-camera-solid:before { + content: "\e796"; } + +.el-icon-camera:before { + content: "\e779"; } + +.el-icon-camera-solid:before { + content: "\e79b"; } + +.el-icon-download:before { + content: "\e77c"; } + +.el-icon-upload2:before { + content: "\e77b"; } + +.el-icon-upload:before { + content: "\e7c3"; } + +.el-icon-picture-outline-round:before { + content: "\e75f"; } + +.el-icon-picture-outline:before { + content: "\e75e"; } + +.el-icon-picture:before { + content: "\e79f"; } + +.el-icon-close:before { + content: "\e6db"; } + +.el-icon-check:before { + content: "\e6da"; } + +.el-icon-plus:before { + content: "\e6d9"; } + +.el-icon-minus:before { + content: "\e6d8"; } + +.el-icon-help:before { + content: "\e73d"; } + +.el-icon-s-help:before { + content: "\e7b3"; } + +.el-icon-circle-close:before { + content: "\e78d"; } + +.el-icon-circle-check:before { + content: "\e720"; } + +.el-icon-circle-plus-outline:before { + content: "\e723"; } + +.el-icon-remove-outline:before { + content: "\e722"; } + +.el-icon-zoom-out:before { + content: "\e776"; } + +.el-icon-zoom-in:before { + content: "\e777"; } + +.el-icon-error:before { + content: "\e79d"; } + +.el-icon-success:before { + content: "\e79c"; } + +.el-icon-circle-plus:before { + content: "\e7a0"; } + +.el-icon-remove:before { + content: "\e7a2"; } + +.el-icon-info:before { + content: "\e7a1"; } + +.el-icon-question:before { + content: "\e7a4"; } + +.el-icon-warning-outline:before { + content: "\e6c9"; } + +.el-icon-warning:before { + content: "\e7a3"; } + +.el-icon-goods:before { + content: "\e7c2"; } + +.el-icon-s-goods:before { + content: "\e7b2"; } + +.el-icon-star-off:before { + content: "\e717"; } + +.el-icon-star-on:before { + content: "\e797"; } + +.el-icon-more-outline:before { + content: "\e6cc"; } + +.el-icon-more:before { + content: "\e794"; } + +.el-icon-phone-outline:before { + content: "\e6cb"; } + +.el-icon-phone:before { + content: "\e795"; } + +.el-icon-user:before { + content: "\e6e3"; } + +.el-icon-user-solid:before { + content: "\e7a5"; } + +.el-icon-setting:before { + content: "\e6ca"; } + +.el-icon-s-tools:before { + content: "\e7ac"; } + +.el-icon-delete:before { + content: "\e6d7"; } + +.el-icon-delete-solid:before { + content: "\e7c9"; } + +.el-icon-eleme:before { + content: "\e7c7"; } + +.el-icon-platform-eleme:before { + content: "\e7ca"; } + +.el-icon-loading { + -webkit-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; } + +.el-icon--right { + margin-left: 5px; } + +.el-icon--left { + margin-right: 5px; } + +@-webkit-keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } + +@keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/breadcrumb-item.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/breadcrumb-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/breadcrumb.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/breadcrumb.css new file mode 100644 index 00000000..80884ebf --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/breadcrumb.css @@ -0,0 +1,287 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-breadcrumb { + font-size: 14px; + line-height: 1; } + .el-breadcrumb::before, + .el-breadcrumb::after { + display: table; + content: ""; } + .el-breadcrumb::after { + clear: both; } + .el-breadcrumb__separator { + margin: 0 9px; + font-weight: bold; + color: #C0C4CC; } + .el-breadcrumb__separator[class*=icon] { + margin: 0 6px; + font-weight: normal; } + .el-breadcrumb__item { + float: left; } + .el-breadcrumb__inner { + color: #606266; } + .el-breadcrumb__inner.is-link, .el-breadcrumb__inner a { + font-weight: bold; + text-decoration: none; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + color: #303133; } + .el-breadcrumb__inner.is-link:hover, .el-breadcrumb__inner a:hover { + color: #409EFF; + cursor: pointer; } + .el-breadcrumb__item:last-child .el-breadcrumb__inner, .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover, + .el-breadcrumb__item:last-child .el-breadcrumb__inner a, + .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover { + font-weight: normal; + color: #606266; + cursor: text; } + .el-breadcrumb__item:last-child .el-breadcrumb__separator { + display: none; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/button-group.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/button-group.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/button.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/button.css new file mode 100644 index 00000000..fd339ab4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/button.css @@ -0,0 +1,762 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/calendar.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/calendar.css new file mode 100644 index 00000000..78ef6366 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/calendar.css @@ -0,0 +1,1065 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +.el-calendar { + background-color: #fff; } + .el-calendar__header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 12px 20px; + border-bottom: 1px solid #EBEEF5; } + .el-calendar__title { + color: #000000; + -ms-flex-item-align: center; + align-self: center; } + .el-calendar__body { + padding: 12px 20px 35px; } + +.el-calendar-table { + table-layout: fixed; + width: 100%; } + .el-calendar-table thead th { + padding: 12px 0; + color: #606266; + font-weight: normal; } + .el-calendar-table:not(.is-range) td.prev, + .el-calendar-table:not(.is-range) td.next { + color: #C0C4CC; } + .el-calendar-table td { + border-bottom: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + vertical-align: top; + -webkit-transition: background-color 0.2s ease; + transition: background-color 0.2s ease; } + .el-calendar-table td.is-selected { + background-color: #F2F8FE; } + .el-calendar-table td.is-today { + color: #409EFF; } + .el-calendar-table tr:first-child td { + border-top: 1px solid #EBEEF5; } + .el-calendar-table tr td:first-child { + border-left: 1px solid #EBEEF5; } + .el-calendar-table tr.el-calendar-table__row--hide-border td { + border-top: none; } + .el-calendar-table .el-calendar-day { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 8px; + height: 85px; } + .el-calendar-table .el-calendar-day:hover { + cursor: pointer; + background-color: #F2F8FE; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/card.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/card.css new file mode 100644 index 00000000..66139320 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/card.css @@ -0,0 +1,271 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-card { + border-radius: 4px; + border: 1px solid #EBEEF5; + background-color: #FFFFFF; + overflow: hidden; + color: #303133; + -webkit-transition: 0.3s; + transition: 0.3s; } + .el-card.is-always-shadow { + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-card.is-hover-shadow:hover, .el-card.is-hover-shadow:focus { + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-card__header { + padding: 18px 20px; + border-bottom: 1px solid #EBEEF5; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-card__body { + padding: 20px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/carousel-item.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/carousel-item.css new file mode 100644 index 00000000..ad06193d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/carousel-item.css @@ -0,0 +1,291 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-carousel__item { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: inline-block; + overflow: hidden; + z-index: 0; } + .el-carousel__item.is-active { + z-index: 2; } + .el-carousel__item.is-animating { + -webkit-transition: -webkit-transform .4s ease-in-out; + transition: -webkit-transform .4s ease-in-out; + transition: transform .4s ease-in-out; + transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; } + .el-carousel__item--card { + width: 50%; + -webkit-transition: -webkit-transform .4s ease-in-out; + transition: -webkit-transform .4s ease-in-out; + transition: transform .4s ease-in-out; + transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; } + .el-carousel__item--card.is-in-stage { + cursor: pointer; + z-index: 1; } + .el-carousel__item--card.is-in-stage:hover .el-carousel__mask, + .el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask { + opacity: 0.12; } + .el-carousel__item--card.is-active { + z-index: 2; } + +.el-carousel__mask { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: #FFFFFF; + opacity: 0.24; + -webkit-transition: .2s; + transition: .2s; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/carousel.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/carousel.css new file mode 100644 index 00000000..a22c8c86 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/carousel.css @@ -0,0 +1,367 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-carousel { + position: relative; } + .el-carousel--horizontal { + overflow-x: hidden; } + .el-carousel--vertical { + overflow-y: hidden; } + .el-carousel__container { + position: relative; + height: 300px; } + .el-carousel__arrow { + border: none; + outline: none; + padding: 0; + margin: 0; + height: 36px; + width: 36px; + cursor: pointer; + -webkit-transition: .3s; + transition: .3s; + border-radius: 50%; + background-color: rgba(31, 45, 61, 0.11); + color: #FFFFFF; + position: absolute; + top: 50%; + z-index: 10; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + text-align: center; + font-size: 12px; } + .el-carousel__arrow--left { + left: 16px; } + .el-carousel__arrow--right { + right: 16px; } + .el-carousel__arrow:hover { + background-color: rgba(31, 45, 61, 0.23); } + .el-carousel__arrow i { + cursor: pointer; } + .el-carousel__indicators { + position: absolute; + list-style: none; + margin: 0; + padding: 0; + z-index: 2; } + .el-carousel__indicators--horizontal { + bottom: 0; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + .el-carousel__indicators--vertical { + right: 0; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .el-carousel__indicators--outside { + bottom: 26px; + text-align: center; + position: static; + -webkit-transform: none; + transform: none; } + .el-carousel__indicators--outside .el-carousel__indicator:hover button { + opacity: 0.64; } + .el-carousel__indicators--outside button { + background-color: #C0C4CC; + opacity: 0.24; } + .el-carousel__indicators--labels { + left: 0; + right: 0; + -webkit-transform: none; + transform: none; + text-align: center; } + .el-carousel__indicators--labels .el-carousel__button { + height: auto; + width: auto; + padding: 2px 18px; + font-size: 12px; } + .el-carousel__indicators--labels .el-carousel__indicator { + padding: 6px 4px; } + .el-carousel__indicator { + background-color: transparent; + cursor: pointer; } + .el-carousel__indicator:hover button { + opacity: 0.72; } + .el-carousel__indicator--horizontal { + display: inline-block; + padding: 12px 4px; } + .el-carousel__indicator--vertical { + padding: 4px 12px; } + .el-carousel__indicator--vertical .el-carousel__button { + width: 2px; + height: 15px; } + .el-carousel__indicator.is-active button { + opacity: 1; } + .el-carousel__button { + display: block; + opacity: 0.48; + width: 30px; + height: 2px; + background-color: #FFFFFF; + border: none; + outline: none; + padding: 0; + margin: 0; + cursor: pointer; + -webkit-transition: .3s; + transition: .3s; } + +.carousel-arrow-left-enter, +.carousel-arrow-left-leave-active { + -webkit-transform: translateY(-50%) translateX(-10px); + transform: translateY(-50%) translateX(-10px); + opacity: 0; } + +.carousel-arrow-right-enter, +.carousel-arrow-right-leave-active { + -webkit-transform: translateY(-50%) translateX(10px); + transform: translateY(-50%) translateX(10px); + opacity: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/cascader-panel.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/cascader-panel.css new file mode 100644 index 00000000..ac054909 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/cascader-panel.css @@ -0,0 +1,1781 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-cascader-panel { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: 4px; + font-size: 14px; } + .el-cascader-panel.is-bordered { + border: solid 1px #E4E7ED; + border-radius: 4px; } + +.el-cascader-menu { + min-width: 180px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + border-right: solid 1px #E4E7ED; } + .el-cascader-menu:last-child { + border-right: none; } + .el-cascader-menu:last-child .el-cascader-node { + padding-right: 20px; } + .el-cascader-menu__wrap { + height: 204px; } + .el-cascader-menu__list { + position: relative; + min-height: 100%; + margin: 0; + padding: 6px 0; + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader-menu__hover-zone { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; } + .el-cascader-menu__empty-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + color: #C0C4CC; } + +.el-cascader-node { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0 30px 0 20px; + height: 34px; + line-height: 34px; + outline: none; } + .el-cascader-node.is-selectable.in-active-path { + color: #606266; } + .el-cascader-node.in-active-path, .el-cascader-node.is-selectable.in-checked-path, .el-cascader-node.is-active { + color: #409EFF; + font-weight: bold; } + .el-cascader-node:not(.is-disabled) { + cursor: pointer; } + .el-cascader-node:not(.is-disabled):hover, .el-cascader-node:not(.is-disabled):focus { + background: #F5F7FA; } + .el-cascader-node.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-cascader-node__prefix { + position: absolute; + left: 10px; } + .el-cascader-node__postfix { + position: absolute; + right: 10px; } + .el-cascader-node__label { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader-node > .el-radio { + margin-right: 0; } + .el-cascader-node > .el-radio .el-radio__label { + padding-left: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/cascader.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/cascader.css new file mode 100644 index 00000000..64058d7d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/cascader.css @@ -0,0 +1,3504 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-cascader-panel { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: 4px; + font-size: 14px; } + .el-cascader-panel.is-bordered { + border: solid 1px #E4E7ED; + border-radius: 4px; } + +.el-cascader-menu { + min-width: 180px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + border-right: solid 1px #E4E7ED; } + .el-cascader-menu:last-child { + border-right: none; } + .el-cascader-menu:last-child .el-cascader-node { + padding-right: 20px; } + .el-cascader-menu__wrap { + height: 204px; } + .el-cascader-menu__list { + position: relative; + min-height: 100%; + margin: 0; + padding: 6px 0; + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader-menu__hover-zone { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; } + .el-cascader-menu__empty-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + color: #C0C4CC; } + +.el-cascader-node { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0 30px 0 20px; + height: 34px; + line-height: 34px; + outline: none; } + .el-cascader-node.is-selectable.in-active-path { + color: #606266; } + .el-cascader-node.in-active-path, .el-cascader-node.is-selectable.in-checked-path, .el-cascader-node.is-active { + color: #409EFF; + font-weight: bold; } + .el-cascader-node:not(.is-disabled) { + cursor: pointer; } + .el-cascader-node:not(.is-disabled):hover, .el-cascader-node:not(.is-disabled):focus { + background: #F5F7FA; } + .el-cascader-node.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-cascader-node__prefix { + position: absolute; + left: 10px; } + .el-cascader-node__postfix { + position: absolute; + right: 10px; } + .el-cascader-node__label { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader-node > .el-radio { + margin-right: 0; } + .el-cascader-node > .el-radio .el-radio__label { + padding-left: 0; } + +.el-cascader { + display: inline-block; + position: relative; + font-size: 14px; + line-height: 40px; } + .el-cascader:not(.is-disabled):hover .el-input__inner { + cursor: pointer; + border-color: #C0C4CC; } + .el-cascader .el-input { + cursor: pointer; } + .el-cascader .el-input .el-input__inner { + text-overflow: ellipsis; } + .el-cascader .el-input .el-input__inner:focus { + border-color: #409EFF; } + .el-cascader .el-input .el-icon-arrow-down { + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-size: 14px; } + .el-cascader .el-input .el-icon-arrow-down.is-reverse { + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); } + .el-cascader .el-input .el-icon-circle-close:hover { + color: #909399; } + .el-cascader .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-cascader--medium { + font-size: 14px; + line-height: 36px; } + .el-cascader--small { + font-size: 13px; + line-height: 32px; } + .el-cascader--mini { + font-size: 12px; + line-height: 28px; } + .el-cascader.is-disabled .el-cascader__label { + z-index: 2; + color: #C0C4CC; } + .el-cascader__dropdown { + margin: 5px 0; + font-size: 14px; + background: #FFFFFF; + border: solid 1px #E4E7ED; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-cascader__tags { + position: absolute; + left: 0; + right: 30px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + line-height: normal; + text-align: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader__tags .el-tag { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + max-width: 100%; + margin: 2px 0 2px 6px; + text-overflow: ellipsis; + background: #f0f2f5; } + .el-cascader__tags .el-tag:not(.is-hit) { + border-color: transparent; } + .el-cascader__tags .el-tag > span { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader__tags .el-tag .el-icon-close { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + background-color: #C0C4CC; + color: #FFFFFF; } + .el-cascader__tags .el-tag .el-icon-close:hover { + background-color: #909399; } + .el-cascader__suggestion-panel { + border-radius: 4px; } + .el-cascader__suggestion-list { + max-height: 204px; + margin: 0; + padding: 6px 0; + font-size: 14px; + color: #606266; + text-align: center; } + .el-cascader__suggestion-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 34px; + padding: 0 15px; + text-align: left; + outline: none; + cursor: pointer; } + .el-cascader__suggestion-item:hover, .el-cascader__suggestion-item:focus { + background: #F5F7FA; } + .el-cascader__suggestion-item.is-checked { + color: #409EFF; + font-weight: bold; } + .el-cascader__suggestion-item > span { + margin-right: 10px; } + .el-cascader__empty-text { + margin: 10px 0; + color: #C0C4CC; } + .el-cascader__search-input { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + height: 24px; + min-width: 60px; + margin: 2px 0 2px 15px; + padding: 0; + color: #606266; + border: none; + outline: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader__search-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::-moz-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::placeholder { + color: #C0C4CC; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/checkbox-button.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/checkbox-button.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/checkbox-group.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/checkbox-group.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/checkbox.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/checkbox.css new file mode 100644 index 00000000..056492bf --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/checkbox.css @@ -0,0 +1,636 @@ +@charset "UTF-8"; +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/col.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/col.css new file mode 100644 index 00000000..d14ed5ab --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/col.css @@ -0,0 +1,1877 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +[class*="el-col-"] { + float: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-col-0 { + display: none; } + +.el-col-0 { + width: 0%; } + +.el-col-offset-0 { + margin-left: 0%; } + +.el-col-pull-0 { + position: relative; + right: 0%; } + +.el-col-push-0 { + position: relative; + left: 0%; } + +.el-col-1 { + width: 4.16667%; } + +.el-col-offset-1 { + margin-left: 4.16667%; } + +.el-col-pull-1 { + position: relative; + right: 4.16667%; } + +.el-col-push-1 { + position: relative; + left: 4.16667%; } + +.el-col-2 { + width: 8.33333%; } + +.el-col-offset-2 { + margin-left: 8.33333%; } + +.el-col-pull-2 { + position: relative; + right: 8.33333%; } + +.el-col-push-2 { + position: relative; + left: 8.33333%; } + +.el-col-3 { + width: 12.5%; } + +.el-col-offset-3 { + margin-left: 12.5%; } + +.el-col-pull-3 { + position: relative; + right: 12.5%; } + +.el-col-push-3 { + position: relative; + left: 12.5%; } + +.el-col-4 { + width: 16.66667%; } + +.el-col-offset-4 { + margin-left: 16.66667%; } + +.el-col-pull-4 { + position: relative; + right: 16.66667%; } + +.el-col-push-4 { + position: relative; + left: 16.66667%; } + +.el-col-5 { + width: 20.83333%; } + +.el-col-offset-5 { + margin-left: 20.83333%; } + +.el-col-pull-5 { + position: relative; + right: 20.83333%; } + +.el-col-push-5 { + position: relative; + left: 20.83333%; } + +.el-col-6 { + width: 25%; } + +.el-col-offset-6 { + margin-left: 25%; } + +.el-col-pull-6 { + position: relative; + right: 25%; } + +.el-col-push-6 { + position: relative; + left: 25%; } + +.el-col-7 { + width: 29.16667%; } + +.el-col-offset-7 { + margin-left: 29.16667%; } + +.el-col-pull-7 { + position: relative; + right: 29.16667%; } + +.el-col-push-7 { + position: relative; + left: 29.16667%; } + +.el-col-8 { + width: 33.33333%; } + +.el-col-offset-8 { + margin-left: 33.33333%; } + +.el-col-pull-8 { + position: relative; + right: 33.33333%; } + +.el-col-push-8 { + position: relative; + left: 33.33333%; } + +.el-col-9 { + width: 37.5%; } + +.el-col-offset-9 { + margin-left: 37.5%; } + +.el-col-pull-9 { + position: relative; + right: 37.5%; } + +.el-col-push-9 { + position: relative; + left: 37.5%; } + +.el-col-10 { + width: 41.66667%; } + +.el-col-offset-10 { + margin-left: 41.66667%; } + +.el-col-pull-10 { + position: relative; + right: 41.66667%; } + +.el-col-push-10 { + position: relative; + left: 41.66667%; } + +.el-col-11 { + width: 45.83333%; } + +.el-col-offset-11 { + margin-left: 45.83333%; } + +.el-col-pull-11 { + position: relative; + right: 45.83333%; } + +.el-col-push-11 { + position: relative; + left: 45.83333%; } + +.el-col-12 { + width: 50%; } + +.el-col-offset-12 { + margin-left: 50%; } + +.el-col-pull-12 { + position: relative; + right: 50%; } + +.el-col-push-12 { + position: relative; + left: 50%; } + +.el-col-13 { + width: 54.16667%; } + +.el-col-offset-13 { + margin-left: 54.16667%; } + +.el-col-pull-13 { + position: relative; + right: 54.16667%; } + +.el-col-push-13 { + position: relative; + left: 54.16667%; } + +.el-col-14 { + width: 58.33333%; } + +.el-col-offset-14 { + margin-left: 58.33333%; } + +.el-col-pull-14 { + position: relative; + right: 58.33333%; } + +.el-col-push-14 { + position: relative; + left: 58.33333%; } + +.el-col-15 { + width: 62.5%; } + +.el-col-offset-15 { + margin-left: 62.5%; } + +.el-col-pull-15 { + position: relative; + right: 62.5%; } + +.el-col-push-15 { + position: relative; + left: 62.5%; } + +.el-col-16 { + width: 66.66667%; } + +.el-col-offset-16 { + margin-left: 66.66667%; } + +.el-col-pull-16 { + position: relative; + right: 66.66667%; } + +.el-col-push-16 { + position: relative; + left: 66.66667%; } + +.el-col-17 { + width: 70.83333%; } + +.el-col-offset-17 { + margin-left: 70.83333%; } + +.el-col-pull-17 { + position: relative; + right: 70.83333%; } + +.el-col-push-17 { + position: relative; + left: 70.83333%; } + +.el-col-18 { + width: 75%; } + +.el-col-offset-18 { + margin-left: 75%; } + +.el-col-pull-18 { + position: relative; + right: 75%; } + +.el-col-push-18 { + position: relative; + left: 75%; } + +.el-col-19 { + width: 79.16667%; } + +.el-col-offset-19 { + margin-left: 79.16667%; } + +.el-col-pull-19 { + position: relative; + right: 79.16667%; } + +.el-col-push-19 { + position: relative; + left: 79.16667%; } + +.el-col-20 { + width: 83.33333%; } + +.el-col-offset-20 { + margin-left: 83.33333%; } + +.el-col-pull-20 { + position: relative; + right: 83.33333%; } + +.el-col-push-20 { + position: relative; + left: 83.33333%; } + +.el-col-21 { + width: 87.5%; } + +.el-col-offset-21 { + margin-left: 87.5%; } + +.el-col-pull-21 { + position: relative; + right: 87.5%; } + +.el-col-push-21 { + position: relative; + left: 87.5%; } + +.el-col-22 { + width: 91.66667%; } + +.el-col-offset-22 { + margin-left: 91.66667%; } + +.el-col-pull-22 { + position: relative; + right: 91.66667%; } + +.el-col-push-22 { + position: relative; + left: 91.66667%; } + +.el-col-23 { + width: 95.83333%; } + +.el-col-offset-23 { + margin-left: 95.83333%; } + +.el-col-pull-23 { + position: relative; + right: 95.83333%; } + +.el-col-push-23 { + position: relative; + left: 95.83333%; } + +.el-col-24 { + width: 100%; } + +.el-col-offset-24 { + margin-left: 100%; } + +.el-col-pull-24 { + position: relative; + right: 100%; } + +.el-col-push-24 { + position: relative; + left: 100%; } + +@media only screen and (max-width: 767px) { + .el-col-xs-0 { + display: none; } + .el-col-xs-0 { + width: 0%; } + .el-col-xs-offset-0 { + margin-left: 0%; } + .el-col-xs-pull-0 { + position: relative; + right: 0%; } + .el-col-xs-push-0 { + position: relative; + left: 0%; } + .el-col-xs-1 { + width: 4.16667%; } + .el-col-xs-offset-1 { + margin-left: 4.16667%; } + .el-col-xs-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-xs-push-1 { + position: relative; + left: 4.16667%; } + .el-col-xs-2 { + width: 8.33333%; } + .el-col-xs-offset-2 { + margin-left: 8.33333%; } + .el-col-xs-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-xs-push-2 { + position: relative; + left: 8.33333%; } + .el-col-xs-3 { + width: 12.5%; } + .el-col-xs-offset-3 { + margin-left: 12.5%; } + .el-col-xs-pull-3 { + position: relative; + right: 12.5%; } + .el-col-xs-push-3 { + position: relative; + left: 12.5%; } + .el-col-xs-4 { + width: 16.66667%; } + .el-col-xs-offset-4 { + margin-left: 16.66667%; } + .el-col-xs-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-xs-push-4 { + position: relative; + left: 16.66667%; } + .el-col-xs-5 { + width: 20.83333%; } + .el-col-xs-offset-5 { + margin-left: 20.83333%; } + .el-col-xs-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-xs-push-5 { + position: relative; + left: 20.83333%; } + .el-col-xs-6 { + width: 25%; } + .el-col-xs-offset-6 { + margin-left: 25%; } + .el-col-xs-pull-6 { + position: relative; + right: 25%; } + .el-col-xs-push-6 { + position: relative; + left: 25%; } + .el-col-xs-7 { + width: 29.16667%; } + .el-col-xs-offset-7 { + margin-left: 29.16667%; } + .el-col-xs-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-xs-push-7 { + position: relative; + left: 29.16667%; } + .el-col-xs-8 { + width: 33.33333%; } + .el-col-xs-offset-8 { + margin-left: 33.33333%; } + .el-col-xs-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-xs-push-8 { + position: relative; + left: 33.33333%; } + .el-col-xs-9 { + width: 37.5%; } + .el-col-xs-offset-9 { + margin-left: 37.5%; } + .el-col-xs-pull-9 { + position: relative; + right: 37.5%; } + .el-col-xs-push-9 { + position: relative; + left: 37.5%; } + .el-col-xs-10 { + width: 41.66667%; } + .el-col-xs-offset-10 { + margin-left: 41.66667%; } + .el-col-xs-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-xs-push-10 { + position: relative; + left: 41.66667%; } + .el-col-xs-11 { + width: 45.83333%; } + .el-col-xs-offset-11 { + margin-left: 45.83333%; } + .el-col-xs-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-xs-push-11 { + position: relative; + left: 45.83333%; } + .el-col-xs-12 { + width: 50%; } + .el-col-xs-offset-12 { + margin-left: 50%; } + .el-col-xs-pull-12 { + position: relative; + right: 50%; } + .el-col-xs-push-12 { + position: relative; + left: 50%; } + .el-col-xs-13 { + width: 54.16667%; } + .el-col-xs-offset-13 { + margin-left: 54.16667%; } + .el-col-xs-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-xs-push-13 { + position: relative; + left: 54.16667%; } + .el-col-xs-14 { + width: 58.33333%; } + .el-col-xs-offset-14 { + margin-left: 58.33333%; } + .el-col-xs-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-xs-push-14 { + position: relative; + left: 58.33333%; } + .el-col-xs-15 { + width: 62.5%; } + .el-col-xs-offset-15 { + margin-left: 62.5%; } + .el-col-xs-pull-15 { + position: relative; + right: 62.5%; } + .el-col-xs-push-15 { + position: relative; + left: 62.5%; } + .el-col-xs-16 { + width: 66.66667%; } + .el-col-xs-offset-16 { + margin-left: 66.66667%; } + .el-col-xs-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-xs-push-16 { + position: relative; + left: 66.66667%; } + .el-col-xs-17 { + width: 70.83333%; } + .el-col-xs-offset-17 { + margin-left: 70.83333%; } + .el-col-xs-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-xs-push-17 { + position: relative; + left: 70.83333%; } + .el-col-xs-18 { + width: 75%; } + .el-col-xs-offset-18 { + margin-left: 75%; } + .el-col-xs-pull-18 { + position: relative; + right: 75%; } + .el-col-xs-push-18 { + position: relative; + left: 75%; } + .el-col-xs-19 { + width: 79.16667%; } + .el-col-xs-offset-19 { + margin-left: 79.16667%; } + .el-col-xs-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-xs-push-19 { + position: relative; + left: 79.16667%; } + .el-col-xs-20 { + width: 83.33333%; } + .el-col-xs-offset-20 { + margin-left: 83.33333%; } + .el-col-xs-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-xs-push-20 { + position: relative; + left: 83.33333%; } + .el-col-xs-21 { + width: 87.5%; } + .el-col-xs-offset-21 { + margin-left: 87.5%; } + .el-col-xs-pull-21 { + position: relative; + right: 87.5%; } + .el-col-xs-push-21 { + position: relative; + left: 87.5%; } + .el-col-xs-22 { + width: 91.66667%; } + .el-col-xs-offset-22 { + margin-left: 91.66667%; } + .el-col-xs-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-xs-push-22 { + position: relative; + left: 91.66667%; } + .el-col-xs-23 { + width: 95.83333%; } + .el-col-xs-offset-23 { + margin-left: 95.83333%; } + .el-col-xs-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-xs-push-23 { + position: relative; + left: 95.83333%; } + .el-col-xs-24 { + width: 100%; } + .el-col-xs-offset-24 { + margin-left: 100%; } + .el-col-xs-pull-24 { + position: relative; + right: 100%; } + .el-col-xs-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 768px) { + .el-col-sm-0 { + display: none; } + .el-col-sm-0 { + width: 0%; } + .el-col-sm-offset-0 { + margin-left: 0%; } + .el-col-sm-pull-0 { + position: relative; + right: 0%; } + .el-col-sm-push-0 { + position: relative; + left: 0%; } + .el-col-sm-1 { + width: 4.16667%; } + .el-col-sm-offset-1 { + margin-left: 4.16667%; } + .el-col-sm-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-sm-push-1 { + position: relative; + left: 4.16667%; } + .el-col-sm-2 { + width: 8.33333%; } + .el-col-sm-offset-2 { + margin-left: 8.33333%; } + .el-col-sm-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-sm-push-2 { + position: relative; + left: 8.33333%; } + .el-col-sm-3 { + width: 12.5%; } + .el-col-sm-offset-3 { + margin-left: 12.5%; } + .el-col-sm-pull-3 { + position: relative; + right: 12.5%; } + .el-col-sm-push-3 { + position: relative; + left: 12.5%; } + .el-col-sm-4 { + width: 16.66667%; } + .el-col-sm-offset-4 { + margin-left: 16.66667%; } + .el-col-sm-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-sm-push-4 { + position: relative; + left: 16.66667%; } + .el-col-sm-5 { + width: 20.83333%; } + .el-col-sm-offset-5 { + margin-left: 20.83333%; } + .el-col-sm-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-sm-push-5 { + position: relative; + left: 20.83333%; } + .el-col-sm-6 { + width: 25%; } + .el-col-sm-offset-6 { + margin-left: 25%; } + .el-col-sm-pull-6 { + position: relative; + right: 25%; } + .el-col-sm-push-6 { + position: relative; + left: 25%; } + .el-col-sm-7 { + width: 29.16667%; } + .el-col-sm-offset-7 { + margin-left: 29.16667%; } + .el-col-sm-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-sm-push-7 { + position: relative; + left: 29.16667%; } + .el-col-sm-8 { + width: 33.33333%; } + .el-col-sm-offset-8 { + margin-left: 33.33333%; } + .el-col-sm-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-sm-push-8 { + position: relative; + left: 33.33333%; } + .el-col-sm-9 { + width: 37.5%; } + .el-col-sm-offset-9 { + margin-left: 37.5%; } + .el-col-sm-pull-9 { + position: relative; + right: 37.5%; } + .el-col-sm-push-9 { + position: relative; + left: 37.5%; } + .el-col-sm-10 { + width: 41.66667%; } + .el-col-sm-offset-10 { + margin-left: 41.66667%; } + .el-col-sm-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-sm-push-10 { + position: relative; + left: 41.66667%; } + .el-col-sm-11 { + width: 45.83333%; } + .el-col-sm-offset-11 { + margin-left: 45.83333%; } + .el-col-sm-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-sm-push-11 { + position: relative; + left: 45.83333%; } + .el-col-sm-12 { + width: 50%; } + .el-col-sm-offset-12 { + margin-left: 50%; } + .el-col-sm-pull-12 { + position: relative; + right: 50%; } + .el-col-sm-push-12 { + position: relative; + left: 50%; } + .el-col-sm-13 { + width: 54.16667%; } + .el-col-sm-offset-13 { + margin-left: 54.16667%; } + .el-col-sm-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-sm-push-13 { + position: relative; + left: 54.16667%; } + .el-col-sm-14 { + width: 58.33333%; } + .el-col-sm-offset-14 { + margin-left: 58.33333%; } + .el-col-sm-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-sm-push-14 { + position: relative; + left: 58.33333%; } + .el-col-sm-15 { + width: 62.5%; } + .el-col-sm-offset-15 { + margin-left: 62.5%; } + .el-col-sm-pull-15 { + position: relative; + right: 62.5%; } + .el-col-sm-push-15 { + position: relative; + left: 62.5%; } + .el-col-sm-16 { + width: 66.66667%; } + .el-col-sm-offset-16 { + margin-left: 66.66667%; } + .el-col-sm-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-sm-push-16 { + position: relative; + left: 66.66667%; } + .el-col-sm-17 { + width: 70.83333%; } + .el-col-sm-offset-17 { + margin-left: 70.83333%; } + .el-col-sm-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-sm-push-17 { + position: relative; + left: 70.83333%; } + .el-col-sm-18 { + width: 75%; } + .el-col-sm-offset-18 { + margin-left: 75%; } + .el-col-sm-pull-18 { + position: relative; + right: 75%; } + .el-col-sm-push-18 { + position: relative; + left: 75%; } + .el-col-sm-19 { + width: 79.16667%; } + .el-col-sm-offset-19 { + margin-left: 79.16667%; } + .el-col-sm-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-sm-push-19 { + position: relative; + left: 79.16667%; } + .el-col-sm-20 { + width: 83.33333%; } + .el-col-sm-offset-20 { + margin-left: 83.33333%; } + .el-col-sm-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-sm-push-20 { + position: relative; + left: 83.33333%; } + .el-col-sm-21 { + width: 87.5%; } + .el-col-sm-offset-21 { + margin-left: 87.5%; } + .el-col-sm-pull-21 { + position: relative; + right: 87.5%; } + .el-col-sm-push-21 { + position: relative; + left: 87.5%; } + .el-col-sm-22 { + width: 91.66667%; } + .el-col-sm-offset-22 { + margin-left: 91.66667%; } + .el-col-sm-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-sm-push-22 { + position: relative; + left: 91.66667%; } + .el-col-sm-23 { + width: 95.83333%; } + .el-col-sm-offset-23 { + margin-left: 95.83333%; } + .el-col-sm-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-sm-push-23 { + position: relative; + left: 95.83333%; } + .el-col-sm-24 { + width: 100%; } + .el-col-sm-offset-24 { + margin-left: 100%; } + .el-col-sm-pull-24 { + position: relative; + right: 100%; } + .el-col-sm-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 992px) { + .el-col-md-0 { + display: none; } + .el-col-md-0 { + width: 0%; } + .el-col-md-offset-0 { + margin-left: 0%; } + .el-col-md-pull-0 { + position: relative; + right: 0%; } + .el-col-md-push-0 { + position: relative; + left: 0%; } + .el-col-md-1 { + width: 4.16667%; } + .el-col-md-offset-1 { + margin-left: 4.16667%; } + .el-col-md-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-md-push-1 { + position: relative; + left: 4.16667%; } + .el-col-md-2 { + width: 8.33333%; } + .el-col-md-offset-2 { + margin-left: 8.33333%; } + .el-col-md-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-md-push-2 { + position: relative; + left: 8.33333%; } + .el-col-md-3 { + width: 12.5%; } + .el-col-md-offset-3 { + margin-left: 12.5%; } + .el-col-md-pull-3 { + position: relative; + right: 12.5%; } + .el-col-md-push-3 { + position: relative; + left: 12.5%; } + .el-col-md-4 { + width: 16.66667%; } + .el-col-md-offset-4 { + margin-left: 16.66667%; } + .el-col-md-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-md-push-4 { + position: relative; + left: 16.66667%; } + .el-col-md-5 { + width: 20.83333%; } + .el-col-md-offset-5 { + margin-left: 20.83333%; } + .el-col-md-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-md-push-5 { + position: relative; + left: 20.83333%; } + .el-col-md-6 { + width: 25%; } + .el-col-md-offset-6 { + margin-left: 25%; } + .el-col-md-pull-6 { + position: relative; + right: 25%; } + .el-col-md-push-6 { + position: relative; + left: 25%; } + .el-col-md-7 { + width: 29.16667%; } + .el-col-md-offset-7 { + margin-left: 29.16667%; } + .el-col-md-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-md-push-7 { + position: relative; + left: 29.16667%; } + .el-col-md-8 { + width: 33.33333%; } + .el-col-md-offset-8 { + margin-left: 33.33333%; } + .el-col-md-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-md-push-8 { + position: relative; + left: 33.33333%; } + .el-col-md-9 { + width: 37.5%; } + .el-col-md-offset-9 { + margin-left: 37.5%; } + .el-col-md-pull-9 { + position: relative; + right: 37.5%; } + .el-col-md-push-9 { + position: relative; + left: 37.5%; } + .el-col-md-10 { + width: 41.66667%; } + .el-col-md-offset-10 { + margin-left: 41.66667%; } + .el-col-md-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-md-push-10 { + position: relative; + left: 41.66667%; } + .el-col-md-11 { + width: 45.83333%; } + .el-col-md-offset-11 { + margin-left: 45.83333%; } + .el-col-md-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-md-push-11 { + position: relative; + left: 45.83333%; } + .el-col-md-12 { + width: 50%; } + .el-col-md-offset-12 { + margin-left: 50%; } + .el-col-md-pull-12 { + position: relative; + right: 50%; } + .el-col-md-push-12 { + position: relative; + left: 50%; } + .el-col-md-13 { + width: 54.16667%; } + .el-col-md-offset-13 { + margin-left: 54.16667%; } + .el-col-md-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-md-push-13 { + position: relative; + left: 54.16667%; } + .el-col-md-14 { + width: 58.33333%; } + .el-col-md-offset-14 { + margin-left: 58.33333%; } + .el-col-md-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-md-push-14 { + position: relative; + left: 58.33333%; } + .el-col-md-15 { + width: 62.5%; } + .el-col-md-offset-15 { + margin-left: 62.5%; } + .el-col-md-pull-15 { + position: relative; + right: 62.5%; } + .el-col-md-push-15 { + position: relative; + left: 62.5%; } + .el-col-md-16 { + width: 66.66667%; } + .el-col-md-offset-16 { + margin-left: 66.66667%; } + .el-col-md-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-md-push-16 { + position: relative; + left: 66.66667%; } + .el-col-md-17 { + width: 70.83333%; } + .el-col-md-offset-17 { + margin-left: 70.83333%; } + .el-col-md-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-md-push-17 { + position: relative; + left: 70.83333%; } + .el-col-md-18 { + width: 75%; } + .el-col-md-offset-18 { + margin-left: 75%; } + .el-col-md-pull-18 { + position: relative; + right: 75%; } + .el-col-md-push-18 { + position: relative; + left: 75%; } + .el-col-md-19 { + width: 79.16667%; } + .el-col-md-offset-19 { + margin-left: 79.16667%; } + .el-col-md-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-md-push-19 { + position: relative; + left: 79.16667%; } + .el-col-md-20 { + width: 83.33333%; } + .el-col-md-offset-20 { + margin-left: 83.33333%; } + .el-col-md-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-md-push-20 { + position: relative; + left: 83.33333%; } + .el-col-md-21 { + width: 87.5%; } + .el-col-md-offset-21 { + margin-left: 87.5%; } + .el-col-md-pull-21 { + position: relative; + right: 87.5%; } + .el-col-md-push-21 { + position: relative; + left: 87.5%; } + .el-col-md-22 { + width: 91.66667%; } + .el-col-md-offset-22 { + margin-left: 91.66667%; } + .el-col-md-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-md-push-22 { + position: relative; + left: 91.66667%; } + .el-col-md-23 { + width: 95.83333%; } + .el-col-md-offset-23 { + margin-left: 95.83333%; } + .el-col-md-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-md-push-23 { + position: relative; + left: 95.83333%; } + .el-col-md-24 { + width: 100%; } + .el-col-md-offset-24 { + margin-left: 100%; } + .el-col-md-pull-24 { + position: relative; + right: 100%; } + .el-col-md-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 1200px) { + .el-col-lg-0 { + display: none; } + .el-col-lg-0 { + width: 0%; } + .el-col-lg-offset-0 { + margin-left: 0%; } + .el-col-lg-pull-0 { + position: relative; + right: 0%; } + .el-col-lg-push-0 { + position: relative; + left: 0%; } + .el-col-lg-1 { + width: 4.16667%; } + .el-col-lg-offset-1 { + margin-left: 4.16667%; } + .el-col-lg-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-lg-push-1 { + position: relative; + left: 4.16667%; } + .el-col-lg-2 { + width: 8.33333%; } + .el-col-lg-offset-2 { + margin-left: 8.33333%; } + .el-col-lg-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-lg-push-2 { + position: relative; + left: 8.33333%; } + .el-col-lg-3 { + width: 12.5%; } + .el-col-lg-offset-3 { + margin-left: 12.5%; } + .el-col-lg-pull-3 { + position: relative; + right: 12.5%; } + .el-col-lg-push-3 { + position: relative; + left: 12.5%; } + .el-col-lg-4 { + width: 16.66667%; } + .el-col-lg-offset-4 { + margin-left: 16.66667%; } + .el-col-lg-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-lg-push-4 { + position: relative; + left: 16.66667%; } + .el-col-lg-5 { + width: 20.83333%; } + .el-col-lg-offset-5 { + margin-left: 20.83333%; } + .el-col-lg-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-lg-push-5 { + position: relative; + left: 20.83333%; } + .el-col-lg-6 { + width: 25%; } + .el-col-lg-offset-6 { + margin-left: 25%; } + .el-col-lg-pull-6 { + position: relative; + right: 25%; } + .el-col-lg-push-6 { + position: relative; + left: 25%; } + .el-col-lg-7 { + width: 29.16667%; } + .el-col-lg-offset-7 { + margin-left: 29.16667%; } + .el-col-lg-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-lg-push-7 { + position: relative; + left: 29.16667%; } + .el-col-lg-8 { + width: 33.33333%; } + .el-col-lg-offset-8 { + margin-left: 33.33333%; } + .el-col-lg-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-lg-push-8 { + position: relative; + left: 33.33333%; } + .el-col-lg-9 { + width: 37.5%; } + .el-col-lg-offset-9 { + margin-left: 37.5%; } + .el-col-lg-pull-9 { + position: relative; + right: 37.5%; } + .el-col-lg-push-9 { + position: relative; + left: 37.5%; } + .el-col-lg-10 { + width: 41.66667%; } + .el-col-lg-offset-10 { + margin-left: 41.66667%; } + .el-col-lg-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-lg-push-10 { + position: relative; + left: 41.66667%; } + .el-col-lg-11 { + width: 45.83333%; } + .el-col-lg-offset-11 { + margin-left: 45.83333%; } + .el-col-lg-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-lg-push-11 { + position: relative; + left: 45.83333%; } + .el-col-lg-12 { + width: 50%; } + .el-col-lg-offset-12 { + margin-left: 50%; } + .el-col-lg-pull-12 { + position: relative; + right: 50%; } + .el-col-lg-push-12 { + position: relative; + left: 50%; } + .el-col-lg-13 { + width: 54.16667%; } + .el-col-lg-offset-13 { + margin-left: 54.16667%; } + .el-col-lg-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-lg-push-13 { + position: relative; + left: 54.16667%; } + .el-col-lg-14 { + width: 58.33333%; } + .el-col-lg-offset-14 { + margin-left: 58.33333%; } + .el-col-lg-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-lg-push-14 { + position: relative; + left: 58.33333%; } + .el-col-lg-15 { + width: 62.5%; } + .el-col-lg-offset-15 { + margin-left: 62.5%; } + .el-col-lg-pull-15 { + position: relative; + right: 62.5%; } + .el-col-lg-push-15 { + position: relative; + left: 62.5%; } + .el-col-lg-16 { + width: 66.66667%; } + .el-col-lg-offset-16 { + margin-left: 66.66667%; } + .el-col-lg-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-lg-push-16 { + position: relative; + left: 66.66667%; } + .el-col-lg-17 { + width: 70.83333%; } + .el-col-lg-offset-17 { + margin-left: 70.83333%; } + .el-col-lg-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-lg-push-17 { + position: relative; + left: 70.83333%; } + .el-col-lg-18 { + width: 75%; } + .el-col-lg-offset-18 { + margin-left: 75%; } + .el-col-lg-pull-18 { + position: relative; + right: 75%; } + .el-col-lg-push-18 { + position: relative; + left: 75%; } + .el-col-lg-19 { + width: 79.16667%; } + .el-col-lg-offset-19 { + margin-left: 79.16667%; } + .el-col-lg-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-lg-push-19 { + position: relative; + left: 79.16667%; } + .el-col-lg-20 { + width: 83.33333%; } + .el-col-lg-offset-20 { + margin-left: 83.33333%; } + .el-col-lg-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-lg-push-20 { + position: relative; + left: 83.33333%; } + .el-col-lg-21 { + width: 87.5%; } + .el-col-lg-offset-21 { + margin-left: 87.5%; } + .el-col-lg-pull-21 { + position: relative; + right: 87.5%; } + .el-col-lg-push-21 { + position: relative; + left: 87.5%; } + .el-col-lg-22 { + width: 91.66667%; } + .el-col-lg-offset-22 { + margin-left: 91.66667%; } + .el-col-lg-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-lg-push-22 { + position: relative; + left: 91.66667%; } + .el-col-lg-23 { + width: 95.83333%; } + .el-col-lg-offset-23 { + margin-left: 95.83333%; } + .el-col-lg-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-lg-push-23 { + position: relative; + left: 95.83333%; } + .el-col-lg-24 { + width: 100%; } + .el-col-lg-offset-24 { + margin-left: 100%; } + .el-col-lg-pull-24 { + position: relative; + right: 100%; } + .el-col-lg-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 1920px) { + .el-col-xl-0 { + display: none; } + .el-col-xl-0 { + width: 0%; } + .el-col-xl-offset-0 { + margin-left: 0%; } + .el-col-xl-pull-0 { + position: relative; + right: 0%; } + .el-col-xl-push-0 { + position: relative; + left: 0%; } + .el-col-xl-1 { + width: 4.16667%; } + .el-col-xl-offset-1 { + margin-left: 4.16667%; } + .el-col-xl-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-xl-push-1 { + position: relative; + left: 4.16667%; } + .el-col-xl-2 { + width: 8.33333%; } + .el-col-xl-offset-2 { + margin-left: 8.33333%; } + .el-col-xl-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-xl-push-2 { + position: relative; + left: 8.33333%; } + .el-col-xl-3 { + width: 12.5%; } + .el-col-xl-offset-3 { + margin-left: 12.5%; } + .el-col-xl-pull-3 { + position: relative; + right: 12.5%; } + .el-col-xl-push-3 { + position: relative; + left: 12.5%; } + .el-col-xl-4 { + width: 16.66667%; } + .el-col-xl-offset-4 { + margin-left: 16.66667%; } + .el-col-xl-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-xl-push-4 { + position: relative; + left: 16.66667%; } + .el-col-xl-5 { + width: 20.83333%; } + .el-col-xl-offset-5 { + margin-left: 20.83333%; } + .el-col-xl-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-xl-push-5 { + position: relative; + left: 20.83333%; } + .el-col-xl-6 { + width: 25%; } + .el-col-xl-offset-6 { + margin-left: 25%; } + .el-col-xl-pull-6 { + position: relative; + right: 25%; } + .el-col-xl-push-6 { + position: relative; + left: 25%; } + .el-col-xl-7 { + width: 29.16667%; } + .el-col-xl-offset-7 { + margin-left: 29.16667%; } + .el-col-xl-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-xl-push-7 { + position: relative; + left: 29.16667%; } + .el-col-xl-8 { + width: 33.33333%; } + .el-col-xl-offset-8 { + margin-left: 33.33333%; } + .el-col-xl-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-xl-push-8 { + position: relative; + left: 33.33333%; } + .el-col-xl-9 { + width: 37.5%; } + .el-col-xl-offset-9 { + margin-left: 37.5%; } + .el-col-xl-pull-9 { + position: relative; + right: 37.5%; } + .el-col-xl-push-9 { + position: relative; + left: 37.5%; } + .el-col-xl-10 { + width: 41.66667%; } + .el-col-xl-offset-10 { + margin-left: 41.66667%; } + .el-col-xl-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-xl-push-10 { + position: relative; + left: 41.66667%; } + .el-col-xl-11 { + width: 45.83333%; } + .el-col-xl-offset-11 { + margin-left: 45.83333%; } + .el-col-xl-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-xl-push-11 { + position: relative; + left: 45.83333%; } + .el-col-xl-12 { + width: 50%; } + .el-col-xl-offset-12 { + margin-left: 50%; } + .el-col-xl-pull-12 { + position: relative; + right: 50%; } + .el-col-xl-push-12 { + position: relative; + left: 50%; } + .el-col-xl-13 { + width: 54.16667%; } + .el-col-xl-offset-13 { + margin-left: 54.16667%; } + .el-col-xl-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-xl-push-13 { + position: relative; + left: 54.16667%; } + .el-col-xl-14 { + width: 58.33333%; } + .el-col-xl-offset-14 { + margin-left: 58.33333%; } + .el-col-xl-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-xl-push-14 { + position: relative; + left: 58.33333%; } + .el-col-xl-15 { + width: 62.5%; } + .el-col-xl-offset-15 { + margin-left: 62.5%; } + .el-col-xl-pull-15 { + position: relative; + right: 62.5%; } + .el-col-xl-push-15 { + position: relative; + left: 62.5%; } + .el-col-xl-16 { + width: 66.66667%; } + .el-col-xl-offset-16 { + margin-left: 66.66667%; } + .el-col-xl-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-xl-push-16 { + position: relative; + left: 66.66667%; } + .el-col-xl-17 { + width: 70.83333%; } + .el-col-xl-offset-17 { + margin-left: 70.83333%; } + .el-col-xl-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-xl-push-17 { + position: relative; + left: 70.83333%; } + .el-col-xl-18 { + width: 75%; } + .el-col-xl-offset-18 { + margin-left: 75%; } + .el-col-xl-pull-18 { + position: relative; + right: 75%; } + .el-col-xl-push-18 { + position: relative; + left: 75%; } + .el-col-xl-19 { + width: 79.16667%; } + .el-col-xl-offset-19 { + margin-left: 79.16667%; } + .el-col-xl-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-xl-push-19 { + position: relative; + left: 79.16667%; } + .el-col-xl-20 { + width: 83.33333%; } + .el-col-xl-offset-20 { + margin-left: 83.33333%; } + .el-col-xl-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-xl-push-20 { + position: relative; + left: 83.33333%; } + .el-col-xl-21 { + width: 87.5%; } + .el-col-xl-offset-21 { + margin-left: 87.5%; } + .el-col-xl-pull-21 { + position: relative; + right: 87.5%; } + .el-col-xl-push-21 { + position: relative; + left: 87.5%; } + .el-col-xl-22 { + width: 91.66667%; } + .el-col-xl-offset-22 { + margin-left: 91.66667%; } + .el-col-xl-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-xl-push-22 { + position: relative; + left: 91.66667%; } + .el-col-xl-23 { + width: 95.83333%; } + .el-col-xl-offset-23 { + margin-left: 95.83333%; } + .el-col-xl-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-xl-push-23 { + position: relative; + left: 95.83333%; } + .el-col-xl-24 { + width: 100%; } + .el-col-xl-offset-24 { + margin-left: 100%; } + .el-col-xl-pull-24 { + position: relative; + right: 100%; } + .el-col-xl-push-24 { + position: relative; + left: 100%; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/collapse-item.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/collapse-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/collapse.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/collapse.css new file mode 100644 index 00000000..2a9cd5eb --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/collapse.css @@ -0,0 +1,543 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-collapse { + border-top: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; } + +.el-collapse-item.is-disabled .el-collapse-item__header { + color: #bbb; + cursor: not-allowed; } + +.el-collapse-item__header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 48px; + line-height: 48px; + background-color: #FFFFFF; + color: #303133; + cursor: pointer; + border-bottom: 1px solid #EBEEF5; + font-size: 13px; + font-weight: 500; + -webkit-transition: border-bottom-color .3s; + transition: border-bottom-color .3s; + outline: none; } + .el-collapse-item__arrow { + margin: 0 8px 0 auto; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-weight: 300; } + .el-collapse-item__arrow.is-active { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-collapse-item__header.focusing:focus:not(:hover) { + color: #409EFF; } + .el-collapse-item__header.is-active { + border-bottom-color: transparent; } + +.el-collapse-item__wrap { + will-change: height; + background-color: #FFFFFF; + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-bottom: 1px solid #EBEEF5; } + +.el-collapse-item__content { + padding-bottom: 25px; + font-size: 13px; + color: #303133; + line-height: 1.769230769230769; } + +.el-collapse-item:last-child { + margin-bottom: -1px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/color-picker.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/color-picker.css new file mode 100644 index 00000000..f7490856 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/color-picker.css @@ -0,0 +1,545 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-color-predefine { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-size: 12px; + margin-top: 8px; + width: 280px; } + .el-color-predefine__colors { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-color-predefine__color-selector { + margin: 0 0 8px 8px; + width: 20px; + height: 20px; + border-radius: 4px; + cursor: pointer; } + .el-color-predefine__color-selector:nth-child(10n + 1) { + margin-left: 0; } + .el-color-predefine__color-selector.selected { + -webkit-box-shadow: 0 0 3px 2px #409EFF; + box-shadow: 0 0 3px 2px #409EFF; } + .el-color-predefine__color-selector > div { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 100%; + border-radius: 3px; } + .el-color-predefine__color-selector.is-alpha { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + +.el-color-hue-slider { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 280px; + height: 12px; + background-color: #f00; + padding: 0 2px; } + .el-color-hue-slider__bar { + position: relative; + background: -webkit-gradient(linear, left top, right top, from(#f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00)); + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); + height: 100%; } + .el-color-hue-slider__thumb { + position: absolute; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + left: 0; + top: 0; + width: 4px; + height: 100%; + border-radius: 1px; + background: #fff; + border: 1px solid #f0f0f0; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + z-index: 1; } + .el-color-hue-slider.is-vertical { + width: 12px; + height: 180px; + padding: 2px 0; } + .el-color-hue-slider.is-vertical .el-color-hue-slider__bar { + background: -webkit-gradient(linear, left top, left bottom, from(#f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00)); + background: linear-gradient(to bottom, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); } + .el-color-hue-slider.is-vertical .el-color-hue-slider__thumb { + left: 0; + top: 0; + width: 100%; + height: 4px; } + +.el-color-svpanel { + position: relative; + width: 280px; + height: 180px; } + .el-color-svpanel__white, .el-color-svpanel__black { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; } + .el-color-svpanel__white { + background: -webkit-gradient(linear, left top, right top, from(#fff), to(rgba(255, 255, 255, 0))); + background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0)); } + .el-color-svpanel__black { + background: -webkit-gradient(linear, left bottom, left top, from(#000), to(rgba(0, 0, 0, 0))); + background: linear-gradient(to top, #000, rgba(0, 0, 0, 0)); } + .el-color-svpanel__cursor { + position: absolute; } + .el-color-svpanel__cursor > div { + cursor: head; + width: 4px; + height: 4px; + -webkit-box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4); + border-radius: 50%; + -webkit-transform: translate(-2px, -2px); + transform: translate(-2px, -2px); } + +.el-color-alpha-slider { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 280px; + height: 12px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + .el-color-alpha-slider__bar { + position: relative; + background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), to(white)); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, white 100%); + height: 100%; } + .el-color-alpha-slider__thumb { + position: absolute; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + left: 0; + top: 0; + width: 4px; + height: 100%; + border-radius: 1px; + background: #fff; + border: 1px solid #f0f0f0; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + z-index: 1; } + .el-color-alpha-slider.is-vertical { + width: 20px; + height: 180px; } + .el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar { + background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(white)); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, white 100%); } + .el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb { + left: 0; + top: 0; + width: 100%; + height: 4px; } + +.el-color-dropdown { + width: 300px; } + .el-color-dropdown__main-wrapper { + margin-bottom: 6px; } + .el-color-dropdown__main-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-color-dropdown__btns { + margin-top: 6px; + text-align: right; } + .el-color-dropdown__value { + float: left; + line-height: 26px; + font-size: 12px; + color: #000000; + width: 160px; } + .el-color-dropdown__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-color-dropdown__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-color-dropdown__btn:hover { + color: #409EFF; + border-color: #409EFF; } + .el-color-dropdown__link-btn { + cursor: pointer; + color: #409EFF; + text-decoration: none; + padding: 15px; + font-size: 12px; } + .el-color-dropdown__link-btn:hover { + color: tint(#409EFF, 20%); } + +.el-color-picker { + display: inline-block; + position: relative; + line-height: normal; + height: 40px; } + .el-color-picker.is-disabled .el-color-picker__trigger { + cursor: not-allowed; } + .el-color-picker--medium { + height: 36px; } + .el-color-picker--medium .el-color-picker__trigger { + height: 36px; + width: 36px; } + .el-color-picker--medium .el-color-picker__mask { + height: 34px; + width: 34px; } + .el-color-picker--small { + height: 32px; } + .el-color-picker--small .el-color-picker__trigger { + height: 32px; + width: 32px; } + .el-color-picker--small .el-color-picker__mask { + height: 30px; + width: 30px; } + .el-color-picker--small .el-color-picker__icon, + .el-color-picker--small .el-color-picker__empty { + -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8); + transform: translate3d(-50%, -50%, 0) scale(0.8); } + .el-color-picker--mini { + height: 28px; } + .el-color-picker--mini .el-color-picker__trigger { + height: 28px; + width: 28px; } + .el-color-picker--mini .el-color-picker__mask { + height: 26px; + width: 26px; } + .el-color-picker--mini .el-color-picker__icon, + .el-color-picker--mini .el-color-picker__empty { + -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8); + transform: translate3d(-50%, -50%, 0) scale(0.8); } + .el-color-picker__mask { + height: 38px; + width: 38px; + border-radius: 4px; + position: absolute; + top: 1px; + left: 1px; + z-index: 1; + cursor: not-allowed; + background-color: rgba(255, 255, 255, 0.7); } + .el-color-picker__trigger { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; + width: 40px; + padding: 4px; + border: 1px solid #e6e6e6; + border-radius: 4px; + font-size: 0; + position: relative; + cursor: pointer; } + .el-color-picker__color { + position: relative; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #999; + border-radius: 2px; + width: 100%; + height: 100%; + text-align: center; } + .el-color-picker__color.is-alpha { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + .el-color-picker__color-inner { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; } + .el-color-picker__empty { + font-size: 12px; + color: #999; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); } + .el-color-picker__icon { + display: inline-block; + position: absolute; + width: 100%; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); + color: #FFFFFF; + text-align: center; + font-size: 12px; } + .el-color-picker__panel { + position: absolute; + z-index: 10; + padding: 6px; + -webkit-box-sizing: content-box; + box-sizing: content-box; + background-color: #FFFFFF; + border: 1px solid #EBEEF5; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/container.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/container.css new file mode 100644 index 00000000..d6418086 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/container.css @@ -0,0 +1,151 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-preferred-size: auto; + flex-basis: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + min-width: 0; } + .el-container.is-vertical { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/date-picker.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/date-picker.css new file mode 100644 index 00000000..e9c086c1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/date-picker.css @@ -0,0 +1,3698 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-date-table { + font-size: 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .el-date-table.is-week-mode .el-date-table__row:hover div { + background-color: #F2F6FC; } + .el-date-table.is-week-mode .el-date-table__row:hover td.available:hover { + color: #606266; } + .el-date-table.is-week-mode .el-date-table__row:hover td:first-child div { + margin-left: 5px; + border-top-left-radius: 15px; + border-bottom-left-radius: 15px; } + .el-date-table.is-week-mode .el-date-table__row:hover td:last-child div { + margin-right: 5px; + border-top-right-radius: 15px; + border-bottom-right-radius: 15px; } + .el-date-table.is-week-mode .el-date-table__row.current div { + background-color: #F2F6FC; } + .el-date-table td { + width: 32px; + height: 30px; + padding: 4px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + cursor: pointer; + position: relative; } + .el-date-table td div { + height: 30px; + padding: 3px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-table td span { + width: 24px; + height: 24px; + display: block; + margin: 0 auto; + line-height: 24px; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + border-radius: 50%; } + .el-date-table td.next-month, .el-date-table td.prev-month { + color: #C0C4CC; } + .el-date-table td.today { + position: relative; } + .el-date-table td.today span { + color: #409EFF; + font-weight: bold; } + .el-date-table td.today.start-date span, + .el-date-table td.today.end-date span { + color: #FFFFFF; } + .el-date-table td.available:hover { + color: #409EFF; } + .el-date-table td.in-range div { + background-color: #F2F6FC; } + .el-date-table td.in-range div:hover { + background-color: #F2F6FC; } + .el-date-table td.current:not(.disabled) span { + color: #FFFFFF; + background-color: #409EFF; } + .el-date-table td.start-date div, + .el-date-table td.end-date div { + color: #FFFFFF; } + .el-date-table td.start-date span, + .el-date-table td.end-date span { + background-color: #409EFF; } + .el-date-table td.start-date div { + margin-left: 5px; + border-top-left-radius: 15px; + border-bottom-left-radius: 15px; } + .el-date-table td.end-date div { + margin-right: 5px; + border-top-right-radius: 15px; + border-bottom-right-radius: 15px; } + .el-date-table td.disabled div { + background-color: #F5F7FA; + opacity: 1; + cursor: not-allowed; + color: #C0C4CC; } + .el-date-table td.selected div { + margin-left: 5px; + margin-right: 5px; + background-color: #F2F6FC; + border-radius: 15px; } + .el-date-table td.selected div:hover { + background-color: #F2F6FC; } + .el-date-table td.selected span { + background-color: #409EFF; + color: #FFFFFF; + border-radius: 15px; } + .el-date-table td.week { + font-size: 80%; + color: #606266; } + .el-date-table th { + padding: 5px; + color: #606266; + font-weight: 400; + border-bottom: solid 1px #EBEEF5; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-month-table { + font-size: 12px; + margin: -1px; + border-collapse: collapse; } + .el-month-table td { + text-align: center; + padding: 8px 0px; + cursor: pointer; } + .el-month-table td div { + height: 48px; + padding: 6px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-month-table td.today .cell { + color: #409EFF; + font-weight: bold; } + .el-month-table td.today.start-date .cell, + .el-month-table td.today.end-date .cell { + color: #FFFFFF; } + .el-month-table td.disabled .cell { + background-color: #F5F7FA; + cursor: not-allowed; + color: #C0C4CC; } + .el-month-table td.disabled .cell:hover { + color: #C0C4CC; } + .el-month-table td .cell { + width: 60px; + height: 36px; + display: block; + line-height: 36px; + color: #606266; + margin: 0 auto; + border-radius: 18px; } + .el-month-table td .cell:hover { + color: #409EFF; } + .el-month-table td.in-range div { + background-color: #F2F6FC; } + .el-month-table td.in-range div:hover { + background-color: #F2F6FC; } + .el-month-table td.start-date div, + .el-month-table td.end-date div { + color: #FFFFFF; } + .el-month-table td.start-date .cell, + .el-month-table td.end-date .cell { + color: #FFFFFF; + background-color: #409EFF; } + .el-month-table td.start-date div { + border-top-left-radius: 24px; + border-bottom-left-radius: 24px; } + .el-month-table td.end-date div { + border-top-right-radius: 24px; + border-bottom-right-radius: 24px; } + .el-month-table td.current:not(.disabled) .cell { + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-year-table { + font-size: 12px; + margin: -1px; + border-collapse: collapse; } + .el-year-table .el-icon { + color: #303133; } + .el-year-table td { + text-align: center; + padding: 20px 3px; + cursor: pointer; } + .el-year-table td.today .cell { + color: #409EFF; + font-weight: bold; } + .el-year-table td.disabled .cell { + background-color: #F5F7FA; + cursor: not-allowed; + color: #C0C4CC; } + .el-year-table td.disabled .cell:hover { + color: #C0C4CC; } + .el-year-table td .cell { + width: 48px; + height: 32px; + display: block; + line-height: 32px; + color: #606266; + margin: 0 auto; } + .el-year-table td .cell:hover { + color: #409EFF; } + .el-year-table td.current:not(.disabled) .cell { + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-spinner.has-seconds .el-time-spinner__wrapper { + width: 33.3%; } + +.el-time-spinner__wrapper { + max-height: 190px; + overflow: auto; + display: inline-block; + width: 50%; + vertical-align: top; + position: relative; } + .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) { + padding-bottom: 15px; } + .el-time-spinner__wrapper.is-arrow { + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__list { + -webkit-transform: translateY(-32px); + transform: translateY(-32px); } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #FFFFFF; + cursor: default; } + +.el-time-spinner__arrow { + font-size: 12px; + color: #909399; + position: absolute; + left: 0; + width: 100%; + z-index: 1; + text-align: center; + height: 30px; + line-height: 30px; + cursor: pointer; } + .el-time-spinner__arrow:hover { + color: #409EFF; } + .el-time-spinner__arrow.el-icon-arrow-up { + top: 10px; } + .el-time-spinner__arrow.el-icon-arrow-down { + bottom: 10px; } + +.el-time-spinner__input.el-input { + width: 70%; } + .el-time-spinner__input.el-input .el-input__inner { + padding: 0; + text-align: center; } + +.el-time-spinner__list { + padding: 0; + margin: 0; + list-style: none; + text-align: center; } + .el-time-spinner__list::after, .el-time-spinner__list::before { + content: ''; + display: block; + width: 100%; + height: 80px; } + +.el-time-spinner__item { + height: 32px; + line-height: 32px; + font-size: 12px; + color: #606266; } + .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #F5F7FA; + cursor: pointer; } + .el-time-spinner__item.active:not(.disabled) { + color: #303133; + font-weight: bold; } + .el-time-spinner__item.disabled { + color: #C0C4CC; + cursor: not-allowed; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +.el-date-picker { + width: 322px; } + .el-date-picker.has-sidebar.has-time { + width: 434px; } + .el-date-picker.has-sidebar { + width: 438px; } + .el-date-picker.has-time .el-picker-panel__body-wrapper { + position: relative; } + .el-date-picker .el-picker-panel__content { + width: 292px; } + .el-date-picker table { + table-layout: fixed; + width: 100%; } + .el-date-picker__editor-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-picker__header { + margin: 12px; + text-align: center; } + .el-date-picker__header--bordered { + margin-bottom: 0; + padding-bottom: 12px; + border-bottom: solid 1px #EBEEF5; } + .el-date-picker__header--bordered + .el-picker-panel__content { + margin-top: 0; } + .el-date-picker__header-label { + font-size: 16px; + font-weight: 500; + padding: 0 5px; + line-height: 22px; + text-align: center; + cursor: pointer; + color: #606266; } + .el-date-picker__header-label:hover { + color: #409EFF; } + .el-date-picker__header-label.active { + color: #409EFF; } + .el-date-picker__prev-btn { + float: left; } + .el-date-picker__next-btn { + float: right; } + .el-date-picker__time-wrap { + padding: 10px; + text-align: center; } + .el-date-picker__time-label { + float: left; + cursor: pointer; + line-height: 30px; + margin-left: 10px; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-date-range-picker { + width: 646px; } + .el-date-range-picker.has-sidebar { + width: 756px; } + .el-date-range-picker table { + table-layout: fixed; + width: 100%; } + .el-date-range-picker .el-picker-panel__body { + min-width: 513px; } + .el-date-range-picker .el-picker-panel__content { + margin: 0; } + .el-date-range-picker__header { + position: relative; + text-align: center; + height: 28px; } + .el-date-range-picker__header [class*=arrow-left] { + float: left; } + .el-date-range-picker__header [class*=arrow-right] { + float: right; } + .el-date-range-picker__header div { + font-size: 16px; + font-weight: 500; + margin-right: 50px; } + .el-date-range-picker__content { + float: left; + width: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 16px; } + .el-date-range-picker__content.is-left { + border-right: 1px solid #e4e4e4; } + .el-date-range-picker__content .el-date-range-picker__header div { + margin-left: 50px; + margin-right: 50px; } + .el-date-range-picker__editors-wrap { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: table-cell; } + .el-date-range-picker__editors-wrap.is-right { + text-align: right; } + .el-date-range-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-range-picker__time-header > .el-icon-arrow-right { + font-size: 20px; + vertical-align: middle; + display: table-cell; + color: #303133; } + .el-date-range-picker__time-picker-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-range-picker__time-picker-wrap .el-picker-panel { + position: absolute; + top: 13px; + right: 0; + z-index: 1; + background: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-range-picker { + width: 354px; + overflow: visible; } + .el-time-range-picker__content { + position: relative; + text-align: center; + padding: 10px; } + .el-time-range-picker__cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 4px 7px 7px; + width: 50%; + display: inline-block; } + .el-time-range-picker__header { + margin-bottom: 5px; + text-align: center; + font-size: 14px; } + .el-time-range-picker__body { + border-radius: 2px; + border: 1px solid #E4E7ED; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-panel { + margin: 5px 0; + border: solid 1px #E4E7ED; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 2px; + position: absolute; + width: 180px; + left: 0; + z-index: 1000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .el-time-panel__content { + font-size: 0; + position: relative; + overflow: hidden; } + .el-time-panel__content::after, .el-time-panel__content::before { + content: ""; + top: 50%; + position: absolute; + margin-top: -15px; + height: 32px; + z-index: -1; + left: 0; + right: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + text-align: left; + border-top: 1px solid #E4E7ED; + border-bottom: 1px solid #E4E7ED; } + .el-time-panel__content::after { + left: 50%; + margin-left: 12%; + margin-right: 12%; } + .el-time-panel__content::before { + padding-left: 50%; + margin-right: 12%; + margin-left: 12%; } + .el-time-panel__content.has-seconds::after { + left: calc(100% / 3 * 2); } + .el-time-panel__content.has-seconds::before { + padding-left: calc(100% / 3); } + .el-time-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + height: 36px; + line-height: 25px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-time-panel__btn { + border: none; + line-height: 28px; + padding: 0 5px; + margin: 0 5px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; + color: #303133; } + .el-time-panel__btn.confirm { + font-weight: 800; + color: #409EFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dialog.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dialog.css new file mode 100644 index 00000000..56697226 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dialog.css @@ -0,0 +1,651 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.v-modal-enter { + -webkit-animation: v-modal-in .2s ease; + animation: v-modal-in .2s ease; } + +.v-modal-leave { + -webkit-animation: v-modal-out .2s ease forwards; + animation: v-modal-out .2s ease forwards; } + +@-webkit-keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@-webkit-keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +@keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +.v-modal { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.5; + background: #000000; } + +.el-popup-parent--hidden { + overflow: hidden; } + +.el-dialog { + position: relative; + margin: 0 auto 50px; + background: #FFFFFF; + border-radius: 2px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 50%; } + .el-dialog.is-fullscreen { + width: 100%; + margin-top: 0; + margin-bottom: 0; + height: 100%; + overflow: auto; } + .el-dialog__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: auto; + margin: 0; } + .el-dialog__header { + padding: 20px; + padding-bottom: 10px; } + .el-dialog__headerbtn { + position: absolute; + top: 20px; + right: 20px; + padding: 0; + background: transparent; + border: none; + outline: none; + cursor: pointer; + font-size: 16px; } + .el-dialog__headerbtn .el-dialog__close { + color: #909399; } + .el-dialog__headerbtn:focus .el-dialog__close, .el-dialog__headerbtn:hover .el-dialog__close { + color: #409EFF; } + .el-dialog__title { + line-height: 24px; + font-size: 18px; + color: #303133; } + .el-dialog__body { + padding: 30px 20px; + color: #606266; + font-size: 14px; + word-break: break-all; } + .el-dialog__footer { + padding: 20px; + padding-top: 10px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-dialog--center { + text-align: center; } + .el-dialog--center .el-dialog__body { + text-align: initial; + padding: 25px 25px 30px; } + .el-dialog--center .el-dialog__footer { + text-align: inherit; } + +.dialog-fade-enter-active { + -webkit-animation: dialog-fade-in .3s; + animation: dialog-fade-in .3s; } + +.dialog-fade-leave-active { + -webkit-animation: dialog-fade-out .3s; + animation: dialog-fade-out .3s; } + +@-webkit-keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/display.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/display.css new file mode 100644 index 00000000..fdd5fa97 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/display.css @@ -0,0 +1,293 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +@media only screen and (max-width: 767px) { + .hidden-xs-only { + display: none !important; } } + +@media only screen and (min-width: 768px) { + .hidden-sm-and-up { + display: none !important; } } + +@media only screen and (min-width: 768px) and (max-width: 991px) { + .hidden-sm-only { + display: none !important; } } + +@media only screen and (max-width: 991px) { + .hidden-sm-and-down { + display: none !important; } } + +@media only screen and (min-width: 992px) { + .hidden-md-and-up { + display: none !important; } } + +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .hidden-md-only { + display: none !important; } } + +@media only screen and (max-width: 1199px) { + .hidden-md-and-down { + display: none !important; } } + +@media only screen and (min-width: 1200px) { + .hidden-lg-and-up { + display: none !important; } } + +@media only screen and (min-width: 1200px) and (max-width: 1919px) { + .hidden-lg-only { + display: none !important; } } + +@media only screen and (max-width: 1919px) { + .hidden-lg-and-down { + display: none !important; } } + +@media only screen and (min-width: 1920px) { + .hidden-xl-only { + display: none !important; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/divider.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/divider.css new file mode 100644 index 00000000..1896251b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/divider.css @@ -0,0 +1,284 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-divider { + background-color: #DCDFE6; + position: relative; } + .el-divider--horizontal { + display: block; + height: 1px; + width: 100%; + margin: 24px 0; } + .el-divider--vertical { + display: inline-block; + width: 1px; + height: 1em; + margin: 0 8px; + vertical-align: middle; + position: relative; } + .el-divider__text { + position: absolute; + background-color: #FFFFFF; + padding: 0 20px; + font-weight: 500; + color: #303133; + font-size: 14px; } + .el-divider__text.is-left { + left: 20px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .el-divider__text.is-center { + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + .el-divider__text.is-right { + right: 20px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/drawer.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/drawer.css new file mode 100644 index 00000000..da742d4c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/drawer.css @@ -0,0 +1,503 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@-webkit-keyframes el-drawer-fade-in { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } +@keyframes el-drawer-fade-in { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } + +@-webkit-keyframes rtl-drawer-in { + 0% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes rtl-drawer-in { + 0% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes rtl-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } } + +@keyframes rtl-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } } + +@-webkit-keyframes ltr-drawer-in { + 0% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes ltr-drawer-in { + 0% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes ltr-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } } + +@keyframes ltr-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } } + +@-webkit-keyframes ttb-drawer-in { + 0% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes ttb-drawer-in { + 0% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes ttb-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } } + +@keyframes ttb-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } } + +@-webkit-keyframes btt-drawer-in { + 0% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes btt-drawer-in { + 0% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes btt-drawer-out { + 0% { + -webkit-transform: translate(0px, 0); + transform: translate(0px, 0); } + 100% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } } + +@keyframes btt-drawer-out { + 0% { + -webkit-transform: translate(0px, 0); + transform: translate(0px, 0); } + 100% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } } + +.el-drawer { + position: absolute; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background-color: #FFFFFF; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.2), 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12); + box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.2), 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12); + overflow: hidden; } + .el-drawer.rtl { + -webkit-animation: rtl-drawer-out 0.3s; + animation: rtl-drawer-out 0.3s; } + .el-drawer__open .el-drawer.rtl { + -webkit-animation: rtl-drawer-in 0.3s 1ms; + animation: rtl-drawer-in 0.3s 1ms; } + .el-drawer.ltr { + -webkit-animation: ltr-drawer-out 0.3s; + animation: ltr-drawer-out 0.3s; } + .el-drawer__open .el-drawer.ltr { + -webkit-animation: ltr-drawer-in 0.3s 1ms; + animation: ltr-drawer-in 0.3s 1ms; } + .el-drawer.ttb { + -webkit-animation: ttb-drawer-out 0.3s; + animation: ttb-drawer-out 0.3s; } + .el-drawer__open .el-drawer.ttb { + -webkit-animation: ttb-drawer-in 0.3s 1ms; + animation: ttb-drawer-in 0.3s 1ms; } + .el-drawer.btt { + -webkit-animation: btt-drawer-out 0.3s; + animation: btt-drawer-out 0.3s; } + .el-drawer__open .el-drawer.btt { + -webkit-animation: btt-drawer-in 0.3s 1ms; + animation: btt-drawer-in 0.3s 1ms; } + .el-drawer__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + margin: 0; } + .el-drawer__header { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #72767b; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-bottom: 32px; + padding: 20px; + padding-bottom: 0; } + .el-drawer__header > :first-child { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; } + .el-drawer__title { + margin: 0; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + line-height: inherit; + font-size: 1rem; } + .el-drawer__close-btn { + border: none; + cursor: pointer; + font-size: 20px; + color: inherit; + background-color: transparent; } + .el-drawer__body { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; } + .el-drawer__body > * { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-drawer.ltr, .el-drawer.rtl { + height: 100%; + top: 0; + bottom: 0; } + .el-drawer.ttb, .el-drawer.btt { + width: 100%; + left: 0; + right: 0; } + .el-drawer.ltr { + left: 0; } + .el-drawer.rtl { + right: 0; } + .el-drawer.ttb { + top: 0; } + .el-drawer.btt { + bottom: 0; } + +.el-drawer__container { + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + height: 100%; + width: 100%; } + +.el-drawer-fade-enter-active { + -webkit-animation: el-drawer-fade-in .3s; + animation: el-drawer-fade-in .3s; } + +.el-drawer-fade-leave-active { + animation: el-drawer-fade-in .3s reverse; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dropdown-item.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dropdown-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dropdown-menu.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dropdown-menu.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dropdown.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dropdown.css new file mode 100644 index 00000000..efe9d7ab --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/dropdown.css @@ -0,0 +1,1451 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-dropdown { + display: inline-block; + position: relative; + color: #606266; + font-size: 14px; } + .el-dropdown .el-button-group { + display: block; } + .el-dropdown .el-button-group .el-button { + float: none; } + .el-dropdown .el-dropdown__caret-button { + padding-left: 5px; + padding-right: 5px; + position: relative; + border-left: none; } + .el-dropdown .el-dropdown__caret-button::before { + content: ''; + position: absolute; + display: block; + width: 1px; + top: 5px; + bottom: 5px; + left: 0; + background: rgba(255, 255, 255, 0.5); } + .el-dropdown .el-dropdown__caret-button.el-button--default::before { + background: rgba(220, 223, 230, 0.5); } + .el-dropdown .el-dropdown__caret-button:hover::before { + top: 0; + bottom: 0; } + .el-dropdown .el-dropdown__caret-button .el-dropdown__icon { + padding-left: 0; } + .el-dropdown__icon { + font-size: 12px; + margin: 0 3px; } + .el-dropdown .el-dropdown-selfdefine:focus:active, .el-dropdown .el-dropdown-selfdefine:focus:not(.focusing) { + outline-width: 0; } + +.el-dropdown-menu { + position: absolute; + top: 0; + left: 0; + z-index: 10; + padding: 10px 0; + margin: 5px 0; + background-color: #FFFFFF; + border: 1px solid #EBEEF5; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-dropdown-menu__item { + list-style: none; + line-height: 36px; + padding: 0 20px; + margin: 0; + font-size: 14px; + color: #606266; + cursor: pointer; + outline: none; } + .el-dropdown-menu__item:not(.is-disabled):hover, .el-dropdown-menu__item:focus { + background-color: #409EFF; + color: #FFFFFF; } + .el-dropdown-menu__item i { + margin-right: 5px; } + .el-dropdown-menu__item--divided { + position: relative; + margin-top: 6px; + border-top: 1px solid #EBEEF5; } + .el-dropdown-menu__item--divided:before { + content: ''; + height: 6px; + display: block; + margin: 0 -20px; + background-color: #FFFFFF; } + .el-dropdown-menu__item.is-disabled { + cursor: default; + color: #bbb; + pointer-events: none; } + .el-dropdown-menu--medium { + padding: 6px 0; } + .el-dropdown-menu--medium .el-dropdown-menu__item { + line-height: 30px; + padding: 0 17px; + font-size: 14px; } + .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 6px; } + .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 6px; + margin: 0 -17px; } + .el-dropdown-menu--small { + padding: 6px 0; } + .el-dropdown-menu--small .el-dropdown-menu__item { + line-height: 27px; + padding: 0 15px; + font-size: 13px; } + .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 4px; } + .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 4px; + margin: 0 -15px; } + .el-dropdown-menu--mini { + padding: 3px 0; } + .el-dropdown-menu--mini .el-dropdown-menu__item { + line-height: 24px; + padding: 0 10px; + font-size: 12px; } + .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 3px; } + .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 3px; + margin: 0 -10px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-blue.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-blue.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-blue.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-dark.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-dark.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-dark.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-green.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-green.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-green.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-light.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-light.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-light.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-orange.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-orange.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables-orange.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/element-variables.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/fonts/element-icons.ttf b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/fonts/element-icons.ttf new file mode 100644 index 00000000..91b74de3 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/fonts/element-icons.ttf differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/fonts/element-icons.woff b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/fonts/element-icons.woff new file mode 100644 index 00000000..02b9a253 Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/fonts/element-icons.woff differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/footer.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/footer.css new file mode 100644 index 00000000..36cf5cf8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/footer.css @@ -0,0 +1,256 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-footer { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/form-item.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/form-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/form.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/form.css new file mode 100644 index 00000000..8644193c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/form.css @@ -0,0 +1,364 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-form--label-left .el-form-item__label { + text-align: left; } + +.el-form--label-top .el-form-item__label { + float: none; + display: inline-block; + text-align: left; + padding: 0 0 10px 0; } + +.el-form--inline .el-form-item { + display: inline-block; + margin-right: 10px; + vertical-align: top; } + +.el-form--inline .el-form-item__label { + float: none; + display: inline-block; } + +.el-form--inline .el-form-item__content { + display: inline-block; + vertical-align: top; } + +.el-form--inline.el-form--label-top .el-form-item__content { + display: block; } + +.el-form-item { + margin-bottom: 22px; } + .el-form-item::before, + .el-form-item::after { + display: table; + content: ""; } + .el-form-item::after { + clear: both; } + .el-form-item .el-form-item { + margin-bottom: 0; } + .el-form-item .el-input__validateIcon { + display: none; } + .el-form-item--medium .el-form-item__label { + line-height: 36px; } + .el-form-item--medium .el-form-item__content { + line-height: 36px; } + .el-form-item--small .el-form-item__label { + line-height: 32px; } + .el-form-item--small .el-form-item__content { + line-height: 32px; } + .el-form-item--small.el-form-item { + margin-bottom: 18px; } + .el-form-item--small .el-form-item__error { + padding-top: 2px; } + .el-form-item--mini .el-form-item__label { + line-height: 28px; } + .el-form-item--mini .el-form-item__content { + line-height: 28px; } + .el-form-item--mini.el-form-item { + margin-bottom: 18px; } + .el-form-item--mini .el-form-item__error { + padding-top: 1px; } + .el-form-item__label-wrap { + float: left; } + .el-form-item__label-wrap .el-form-item__label { + display: inline-block; + float: none; } + .el-form-item__label { + text-align: right; + vertical-align: middle; + float: left; + font-size: 14px; + color: #606266; + line-height: 40px; + padding: 0 12px 0 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-form-item__content { + line-height: 40px; + position: relative; + font-size: 14px; } + .el-form-item__content::before, + .el-form-item__content::after { + display: table; + content: ""; } + .el-form-item__content::after { + clear: both; } + .el-form-item__content .el-input-group { + vertical-align: top; } + .el-form-item__error { + color: #F56C6C; + font-size: 12px; + line-height: 1; + padding-top: 4px; + position: absolute; + top: 100%; + left: 0; } + .el-form-item__error--inline { + position: relative; + top: auto; + left: auto; + display: inline-block; + margin-left: 10px; } + .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before, + .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap > .el-form-item__label:before { + content: '*'; + color: #F56C6C; + margin-right: 4px; } + .el-form-item.is-error .el-input__inner, .el-form-item.is-error .el-input__inner:focus, + .el-form-item.is-error .el-textarea__inner, + .el-form-item.is-error .el-textarea__inner:focus { + border-color: #F56C6C; } + .el-form-item.is-error .el-input-group__append .el-input__inner, + .el-form-item.is-error .el-input-group__prepend .el-input__inner { + border-color: transparent; } + .el-form-item.is-error .el-input__validateIcon { + color: #F56C6C; } + .el-form-item--feedback .el-input__validateIcon { + display: inline-block; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/header.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/header.css new file mode 100644 index 00000000..ec740ca6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/header.css @@ -0,0 +1,256 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-header { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/icon.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/icon.css new file mode 100644 index 00000000..8bc8c6b5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/icon.css @@ -0,0 +1,1008 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@font-face { + font-family: 'element-icons'; + src: url("fonts/element-icons.woff") format("woff"), url("fonts/element-icons.ttf") format("truetype"); + /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + font-weight: normal; + font-display: "auto"; + font-style: normal; } + +[class^="el-icon-"], [class*=" el-icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'element-icons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: baseline; + display: inline-block; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.el-icon-ice-cream-round:before { + content: "\e6a0"; } + +.el-icon-ice-cream-square:before { + content: "\e6a3"; } + +.el-icon-lollipop:before { + content: "\e6a4"; } + +.el-icon-potato-strips:before { + content: "\e6a5"; } + +.el-icon-milk-tea:before { + content: "\e6a6"; } + +.el-icon-ice-drink:before { + content: "\e6a7"; } + +.el-icon-ice-tea:before { + content: "\e6a9"; } + +.el-icon-coffee:before { + content: "\e6aa"; } + +.el-icon-orange:before { + content: "\e6ab"; } + +.el-icon-pear:before { + content: "\e6ac"; } + +.el-icon-apple:before { + content: "\e6ad"; } + +.el-icon-cherry:before { + content: "\e6ae"; } + +.el-icon-watermelon:before { + content: "\e6af"; } + +.el-icon-grape:before { + content: "\e6b0"; } + +.el-icon-refrigerator:before { + content: "\e6b1"; } + +.el-icon-goblet-square-full:before { + content: "\e6b2"; } + +.el-icon-goblet-square:before { + content: "\e6b3"; } + +.el-icon-goblet-full:before { + content: "\e6b4"; } + +.el-icon-goblet:before { + content: "\e6b5"; } + +.el-icon-cold-drink:before { + content: "\e6b6"; } + +.el-icon-coffee-cup:before { + content: "\e6b8"; } + +.el-icon-water-cup:before { + content: "\e6b9"; } + +.el-icon-hot-water:before { + content: "\e6ba"; } + +.el-icon-ice-cream:before { + content: "\e6bb"; } + +.el-icon-dessert:before { + content: "\e6bc"; } + +.el-icon-sugar:before { + content: "\e6bd"; } + +.el-icon-tableware:before { + content: "\e6be"; } + +.el-icon-burger:before { + content: "\e6bf"; } + +.el-icon-knife-fork:before { + content: "\e6c1"; } + +.el-icon-fork-spoon:before { + content: "\e6c2"; } + +.el-icon-chicken:before { + content: "\e6c3"; } + +.el-icon-food:before { + content: "\e6c4"; } + +.el-icon-dish-1:before { + content: "\e6c5"; } + +.el-icon-dish:before { + content: "\e6c6"; } + +.el-icon-moon-night:before { + content: "\e6ee"; } + +.el-icon-moon:before { + content: "\e6f0"; } + +.el-icon-cloudy-and-sunny:before { + content: "\e6f1"; } + +.el-icon-partly-cloudy:before { + content: "\e6f2"; } + +.el-icon-cloudy:before { + content: "\e6f3"; } + +.el-icon-sunny:before { + content: "\e6f6"; } + +.el-icon-sunset:before { + content: "\e6f7"; } + +.el-icon-sunrise-1:before { + content: "\e6f8"; } + +.el-icon-sunrise:before { + content: "\e6f9"; } + +.el-icon-heavy-rain:before { + content: "\e6fa"; } + +.el-icon-lightning:before { + content: "\e6fb"; } + +.el-icon-light-rain:before { + content: "\e6fc"; } + +.el-icon-wind-power:before { + content: "\e6fd"; } + +.el-icon-baseball:before { + content: "\e712"; } + +.el-icon-soccer:before { + content: "\e713"; } + +.el-icon-football:before { + content: "\e715"; } + +.el-icon-basketball:before { + content: "\e716"; } + +.el-icon-ship:before { + content: "\e73f"; } + +.el-icon-truck:before { + content: "\e740"; } + +.el-icon-bicycle:before { + content: "\e741"; } + +.el-icon-mobile-phone:before { + content: "\e6d3"; } + +.el-icon-service:before { + content: "\e6d4"; } + +.el-icon-key:before { + content: "\e6e2"; } + +.el-icon-unlock:before { + content: "\e6e4"; } + +.el-icon-lock:before { + content: "\e6e5"; } + +.el-icon-watch:before { + content: "\e6fe"; } + +.el-icon-watch-1:before { + content: "\e6ff"; } + +.el-icon-timer:before { + content: "\e702"; } + +.el-icon-alarm-clock:before { + content: "\e703"; } + +.el-icon-map-location:before { + content: "\e704"; } + +.el-icon-delete-location:before { + content: "\e705"; } + +.el-icon-add-location:before { + content: "\e706"; } + +.el-icon-location-information:before { + content: "\e707"; } + +.el-icon-location-outline:before { + content: "\e708"; } + +.el-icon-location:before { + content: "\e79e"; } + +.el-icon-place:before { + content: "\e709"; } + +.el-icon-discover:before { + content: "\e70a"; } + +.el-icon-first-aid-kit:before { + content: "\e70b"; } + +.el-icon-trophy-1:before { + content: "\e70c"; } + +.el-icon-trophy:before { + content: "\e70d"; } + +.el-icon-medal:before { + content: "\e70e"; } + +.el-icon-medal-1:before { + content: "\e70f"; } + +.el-icon-stopwatch:before { + content: "\e710"; } + +.el-icon-mic:before { + content: "\e711"; } + +.el-icon-copy-document:before { + content: "\e718"; } + +.el-icon-full-screen:before { + content: "\e719"; } + +.el-icon-switch-button:before { + content: "\e71b"; } + +.el-icon-aim:before { + content: "\e71c"; } + +.el-icon-crop:before { + content: "\e71d"; } + +.el-icon-odometer:before { + content: "\e71e"; } + +.el-icon-time:before { + content: "\e71f"; } + +.el-icon-bangzhu:before { + content: "\e724"; } + +.el-icon-close-notification:before { + content: "\e726"; } + +.el-icon-microphone:before { + content: "\e727"; } + +.el-icon-turn-off-microphone:before { + content: "\e728"; } + +.el-icon-position:before { + content: "\e729"; } + +.el-icon-postcard:before { + content: "\e72a"; } + +.el-icon-message:before { + content: "\e72b"; } + +.el-icon-chat-line-square:before { + content: "\e72d"; } + +.el-icon-chat-dot-square:before { + content: "\e72e"; } + +.el-icon-chat-dot-round:before { + content: "\e72f"; } + +.el-icon-chat-square:before { + content: "\e730"; } + +.el-icon-chat-line-round:before { + content: "\e731"; } + +.el-icon-chat-round:before { + content: "\e732"; } + +.el-icon-set-up:before { + content: "\e733"; } + +.el-icon-turn-off:before { + content: "\e734"; } + +.el-icon-open:before { + content: "\e735"; } + +.el-icon-connection:before { + content: "\e736"; } + +.el-icon-link:before { + content: "\e737"; } + +.el-icon-cpu:before { + content: "\e738"; } + +.el-icon-thumb:before { + content: "\e739"; } + +.el-icon-female:before { + content: "\e73a"; } + +.el-icon-male:before { + content: "\e73b"; } + +.el-icon-guide:before { + content: "\e73c"; } + +.el-icon-news:before { + content: "\e73e"; } + +.el-icon-price-tag:before { + content: "\e744"; } + +.el-icon-discount:before { + content: "\e745"; } + +.el-icon-wallet:before { + content: "\e747"; } + +.el-icon-coin:before { + content: "\e748"; } + +.el-icon-money:before { + content: "\e749"; } + +.el-icon-bank-card:before { + content: "\e74a"; } + +.el-icon-box:before { + content: "\e74b"; } + +.el-icon-present:before { + content: "\e74c"; } + +.el-icon-sell:before { + content: "\e6d5"; } + +.el-icon-sold-out:before { + content: "\e6d6"; } + +.el-icon-shopping-bag-2:before { + content: "\e74d"; } + +.el-icon-shopping-bag-1:before { + content: "\e74e"; } + +.el-icon-shopping-cart-2:before { + content: "\e74f"; } + +.el-icon-shopping-cart-1:before { + content: "\e750"; } + +.el-icon-shopping-cart-full:before { + content: "\e751"; } + +.el-icon-smoking:before { + content: "\e752"; } + +.el-icon-no-smoking:before { + content: "\e753"; } + +.el-icon-house:before { + content: "\e754"; } + +.el-icon-table-lamp:before { + content: "\e755"; } + +.el-icon-school:before { + content: "\e756"; } + +.el-icon-office-building:before { + content: "\e757"; } + +.el-icon-toilet-paper:before { + content: "\e758"; } + +.el-icon-notebook-2:before { + content: "\e759"; } + +.el-icon-notebook-1:before { + content: "\e75a"; } + +.el-icon-files:before { + content: "\e75b"; } + +.el-icon-collection:before { + content: "\e75c"; } + +.el-icon-receiving:before { + content: "\e75d"; } + +.el-icon-suitcase-1:before { + content: "\e760"; } + +.el-icon-suitcase:before { + content: "\e761"; } + +.el-icon-film:before { + content: "\e763"; } + +.el-icon-collection-tag:before { + content: "\e765"; } + +.el-icon-data-analysis:before { + content: "\e766"; } + +.el-icon-pie-chart:before { + content: "\e767"; } + +.el-icon-data-board:before { + content: "\e768"; } + +.el-icon-data-line:before { + content: "\e76d"; } + +.el-icon-reading:before { + content: "\e769"; } + +.el-icon-magic-stick:before { + content: "\e76a"; } + +.el-icon-coordinate:before { + content: "\e76b"; } + +.el-icon-mouse:before { + content: "\e76c"; } + +.el-icon-brush:before { + content: "\e76e"; } + +.el-icon-headset:before { + content: "\e76f"; } + +.el-icon-umbrella:before { + content: "\e770"; } + +.el-icon-scissors:before { + content: "\e771"; } + +.el-icon-mobile:before { + content: "\e773"; } + +.el-icon-attract:before { + content: "\e774"; } + +.el-icon-monitor:before { + content: "\e775"; } + +.el-icon-search:before { + content: "\e778"; } + +.el-icon-takeaway-box:before { + content: "\e77a"; } + +.el-icon-paperclip:before { + content: "\e77d"; } + +.el-icon-printer:before { + content: "\e77e"; } + +.el-icon-document-add:before { + content: "\e782"; } + +.el-icon-document:before { + content: "\e785"; } + +.el-icon-document-checked:before { + content: "\e786"; } + +.el-icon-document-copy:before { + content: "\e787"; } + +.el-icon-document-delete:before { + content: "\e788"; } + +.el-icon-document-remove:before { + content: "\e789"; } + +.el-icon-tickets:before { + content: "\e78b"; } + +.el-icon-folder-checked:before { + content: "\e77f"; } + +.el-icon-folder-delete:before { + content: "\e780"; } + +.el-icon-folder-remove:before { + content: "\e781"; } + +.el-icon-folder-add:before { + content: "\e783"; } + +.el-icon-folder-opened:before { + content: "\e784"; } + +.el-icon-folder:before { + content: "\e78a"; } + +.el-icon-edit-outline:before { + content: "\e764"; } + +.el-icon-edit:before { + content: "\e78c"; } + +.el-icon-date:before { + content: "\e78e"; } + +.el-icon-c-scale-to-original:before { + content: "\e7c6"; } + +.el-icon-view:before { + content: "\e6ce"; } + +.el-icon-loading:before { + content: "\e6cf"; } + +.el-icon-rank:before { + content: "\e6d1"; } + +.el-icon-sort-down:before { + content: "\e7c4"; } + +.el-icon-sort-up:before { + content: "\e7c5"; } + +.el-icon-sort:before { + content: "\e6d2"; } + +.el-icon-finished:before { + content: "\e6cd"; } + +.el-icon-refresh-left:before { + content: "\e6c7"; } + +.el-icon-refresh-right:before { + content: "\e6c8"; } + +.el-icon-refresh:before { + content: "\e6d0"; } + +.el-icon-video-play:before { + content: "\e7c0"; } + +.el-icon-video-pause:before { + content: "\e7c1"; } + +.el-icon-d-arrow-right:before { + content: "\e6dc"; } + +.el-icon-d-arrow-left:before { + content: "\e6dd"; } + +.el-icon-arrow-up:before { + content: "\e6e1"; } + +.el-icon-arrow-down:before { + content: "\e6df"; } + +.el-icon-arrow-right:before { + content: "\e6e0"; } + +.el-icon-arrow-left:before { + content: "\e6de"; } + +.el-icon-top-right:before { + content: "\e6e7"; } + +.el-icon-top-left:before { + content: "\e6e8"; } + +.el-icon-top:before { + content: "\e6e6"; } + +.el-icon-bottom:before { + content: "\e6eb"; } + +.el-icon-right:before { + content: "\e6e9"; } + +.el-icon-back:before { + content: "\e6ea"; } + +.el-icon-bottom-right:before { + content: "\e6ec"; } + +.el-icon-bottom-left:before { + content: "\e6ed"; } + +.el-icon-caret-top:before { + content: "\e78f"; } + +.el-icon-caret-bottom:before { + content: "\e790"; } + +.el-icon-caret-right:before { + content: "\e791"; } + +.el-icon-caret-left:before { + content: "\e792"; } + +.el-icon-d-caret:before { + content: "\e79a"; } + +.el-icon-share:before { + content: "\e793"; } + +.el-icon-menu:before { + content: "\e798"; } + +.el-icon-s-grid:before { + content: "\e7a6"; } + +.el-icon-s-check:before { + content: "\e7a7"; } + +.el-icon-s-data:before { + content: "\e7a8"; } + +.el-icon-s-opportunity:before { + content: "\e7aa"; } + +.el-icon-s-custom:before { + content: "\e7ab"; } + +.el-icon-s-claim:before { + content: "\e7ad"; } + +.el-icon-s-finance:before { + content: "\e7ae"; } + +.el-icon-s-comment:before { + content: "\e7af"; } + +.el-icon-s-flag:before { + content: "\e7b0"; } + +.el-icon-s-marketing:before { + content: "\e7b1"; } + +.el-icon-s-shop:before { + content: "\e7b4"; } + +.el-icon-s-open:before { + content: "\e7b5"; } + +.el-icon-s-management:before { + content: "\e7b6"; } + +.el-icon-s-ticket:before { + content: "\e7b7"; } + +.el-icon-s-release:before { + content: "\e7b8"; } + +.el-icon-s-home:before { + content: "\e7b9"; } + +.el-icon-s-promotion:before { + content: "\e7ba"; } + +.el-icon-s-operation:before { + content: "\e7bb"; } + +.el-icon-s-unfold:before { + content: "\e7bc"; } + +.el-icon-s-fold:before { + content: "\e7a9"; } + +.el-icon-s-platform:before { + content: "\e7bd"; } + +.el-icon-s-order:before { + content: "\e7be"; } + +.el-icon-s-cooperation:before { + content: "\e7bf"; } + +.el-icon-bell:before { + content: "\e725"; } + +.el-icon-message-solid:before { + content: "\e799"; } + +.el-icon-video-camera:before { + content: "\e772"; } + +.el-icon-video-camera-solid:before { + content: "\e796"; } + +.el-icon-camera:before { + content: "\e779"; } + +.el-icon-camera-solid:before { + content: "\e79b"; } + +.el-icon-download:before { + content: "\e77c"; } + +.el-icon-upload2:before { + content: "\e77b"; } + +.el-icon-upload:before { + content: "\e7c3"; } + +.el-icon-picture-outline-round:before { + content: "\e75f"; } + +.el-icon-picture-outline:before { + content: "\e75e"; } + +.el-icon-picture:before { + content: "\e79f"; } + +.el-icon-close:before { + content: "\e6db"; } + +.el-icon-check:before { + content: "\e6da"; } + +.el-icon-plus:before { + content: "\e6d9"; } + +.el-icon-minus:before { + content: "\e6d8"; } + +.el-icon-help:before { + content: "\e73d"; } + +.el-icon-s-help:before { + content: "\e7b3"; } + +.el-icon-circle-close:before { + content: "\e78d"; } + +.el-icon-circle-check:before { + content: "\e720"; } + +.el-icon-circle-plus-outline:before { + content: "\e723"; } + +.el-icon-remove-outline:before { + content: "\e722"; } + +.el-icon-zoom-out:before { + content: "\e776"; } + +.el-icon-zoom-in:before { + content: "\e777"; } + +.el-icon-error:before { + content: "\e79d"; } + +.el-icon-success:before { + content: "\e79c"; } + +.el-icon-circle-plus:before { + content: "\e7a0"; } + +.el-icon-remove:before { + content: "\e7a2"; } + +.el-icon-info:before { + content: "\e7a1"; } + +.el-icon-question:before { + content: "\e7a4"; } + +.el-icon-warning-outline:before { + content: "\e6c9"; } + +.el-icon-warning:before { + content: "\e7a3"; } + +.el-icon-goods:before { + content: "\e7c2"; } + +.el-icon-s-goods:before { + content: "\e7b2"; } + +.el-icon-star-off:before { + content: "\e717"; } + +.el-icon-star-on:before { + content: "\e797"; } + +.el-icon-more-outline:before { + content: "\e6cc"; } + +.el-icon-more:before { + content: "\e794"; } + +.el-icon-phone-outline:before { + content: "\e6cb"; } + +.el-icon-phone:before { + content: "\e795"; } + +.el-icon-user:before { + content: "\e6e3"; } + +.el-icon-user-solid:before { + content: "\e7a5"; } + +.el-icon-setting:before { + content: "\e6ca"; } + +.el-icon-s-tools:before { + content: "\e7ac"; } + +.el-icon-delete:before { + content: "\e6d7"; } + +.el-icon-delete-solid:before { + content: "\e7c9"; } + +.el-icon-eleme:before { + content: "\e7c7"; } + +.el-icon-platform-eleme:before { + content: "\e7ca"; } + +.el-icon-loading { + -webkit-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; } + +.el-icon--right { + margin-left: 5px; } + +.el-icon--left { + margin-right: 5px; } + +@-webkit-keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } + +@keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/image.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/image.css new file mode 100644 index 00000000..80973022 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/image.css @@ -0,0 +1,443 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-image__inner, .el-image__placeholder, .el-image__error { + width: 100%; + height: 100%; } + +.el-image { + position: relative; + display: inline-block; + overflow: hidden; } + .el-image__inner { + vertical-align: top; } + .el-image__inner--center { + position: relative; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + display: block; } + .el-image__placeholder { + background: #F5F7FA; } + .el-image__error { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: 14px; + background: #F5F7FA; + color: #C0C4CC; + vertical-align: middle; } + .el-image__preview { + cursor: pointer; } + +.el-image-viewer__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; } + +.el-image-viewer__btn { + position: absolute; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + border-radius: 50%; + opacity: .8; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.el-image-viewer__close { + top: 40px; + right: 40px; + width: 40px; + height: 40px; + font-size: 40px; } + +.el-image-viewer__canvas { + width: 100%; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.el-image-viewer__actions { + left: 50%; + bottom: 30px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + width: 282px; + height: 44px; + padding: 0 23px; + background-color: #606266; + border-color: #fff; + border-radius: 22px; } + .el-image-viewer__actions__inner { + width: 100%; + height: 100%; + text-align: justify; + cursor: default; + font-size: 23px; + color: #fff; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: distribute; + justify-content: space-around; } + +.el-image-viewer__prev { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 44px; + height: 44px; + font-size: 24px; + color: #fff; + background-color: #606266; + border-color: #fff; + left: 40px; } + +.el-image-viewer__next { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 44px; + height: 44px; + font-size: 24px; + color: #fff; + background-color: #606266; + border-color: #fff; + right: 40px; + text-indent: 2px; } + +.el-image-viewer__mask { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + opacity: .5; + background: #000; } + +.viewer-fade-enter-active { + -webkit-animation: viewer-fade-in .3s; + animation: viewer-fade-in .3s; } + +.viewer-fade-leave-active { + -webkit-animation: viewer-fade-out .3s; + animation: viewer-fade-out .3s; } + +@-webkit-keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/index.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/index.css new file mode 100644 index 00000000..b34f94c4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/index.css @@ -0,0 +1,57046 @@ +@charset "UTF-8"; +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@font-face { + font-family: 'element-icons'; + src: url("fonts/element-icons.woff") format("woff"), url("fonts/element-icons.ttf") format("truetype"); + /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + font-weight: normal; + font-display: "auto"; + font-style: normal; } + +[class^="el-icon-"], [class*=" el-icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'element-icons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: baseline; + display: inline-block; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.el-icon-ice-cream-round:before { + content: "\e6a0"; } + +.el-icon-ice-cream-square:before { + content: "\e6a3"; } + +.el-icon-lollipop:before { + content: "\e6a4"; } + +.el-icon-potato-strips:before { + content: "\e6a5"; } + +.el-icon-milk-tea:before { + content: "\e6a6"; } + +.el-icon-ice-drink:before { + content: "\e6a7"; } + +.el-icon-ice-tea:before { + content: "\e6a9"; } + +.el-icon-coffee:before { + content: "\e6aa"; } + +.el-icon-orange:before { + content: "\e6ab"; } + +.el-icon-pear:before { + content: "\e6ac"; } + +.el-icon-apple:before { + content: "\e6ad"; } + +.el-icon-cherry:before { + content: "\e6ae"; } + +.el-icon-watermelon:before { + content: "\e6af"; } + +.el-icon-grape:before { + content: "\e6b0"; } + +.el-icon-refrigerator:before { + content: "\e6b1"; } + +.el-icon-goblet-square-full:before { + content: "\e6b2"; } + +.el-icon-goblet-square:before { + content: "\e6b3"; } + +.el-icon-goblet-full:before { + content: "\e6b4"; } + +.el-icon-goblet:before { + content: "\e6b5"; } + +.el-icon-cold-drink:before { + content: "\e6b6"; } + +.el-icon-coffee-cup:before { + content: "\e6b8"; } + +.el-icon-water-cup:before { + content: "\e6b9"; } + +.el-icon-hot-water:before { + content: "\e6ba"; } + +.el-icon-ice-cream:before { + content: "\e6bb"; } + +.el-icon-dessert:before { + content: "\e6bc"; } + +.el-icon-sugar:before { + content: "\e6bd"; } + +.el-icon-tableware:before { + content: "\e6be"; } + +.el-icon-burger:before { + content: "\e6bf"; } + +.el-icon-knife-fork:before { + content: "\e6c1"; } + +.el-icon-fork-spoon:before { + content: "\e6c2"; } + +.el-icon-chicken:before { + content: "\e6c3"; } + +.el-icon-food:before { + content: "\e6c4"; } + +.el-icon-dish-1:before { + content: "\e6c5"; } + +.el-icon-dish:before { + content: "\e6c6"; } + +.el-icon-moon-night:before { + content: "\e6ee"; } + +.el-icon-moon:before { + content: "\e6f0"; } + +.el-icon-cloudy-and-sunny:before { + content: "\e6f1"; } + +.el-icon-partly-cloudy:before { + content: "\e6f2"; } + +.el-icon-cloudy:before { + content: "\e6f3"; } + +.el-icon-sunny:before { + content: "\e6f6"; } + +.el-icon-sunset:before { + content: "\e6f7"; } + +.el-icon-sunrise-1:before { + content: "\e6f8"; } + +.el-icon-sunrise:before { + content: "\e6f9"; } + +.el-icon-heavy-rain:before { + content: "\e6fa"; } + +.el-icon-lightning:before { + content: "\e6fb"; } + +.el-icon-light-rain:before { + content: "\e6fc"; } + +.el-icon-wind-power:before { + content: "\e6fd"; } + +.el-icon-baseball:before { + content: "\e712"; } + +.el-icon-soccer:before { + content: "\e713"; } + +.el-icon-football:before { + content: "\e715"; } + +.el-icon-basketball:before { + content: "\e716"; } + +.el-icon-ship:before { + content: "\e73f"; } + +.el-icon-truck:before { + content: "\e740"; } + +.el-icon-bicycle:before { + content: "\e741"; } + +.el-icon-mobile-phone:before { + content: "\e6d3"; } + +.el-icon-service:before { + content: "\e6d4"; } + +.el-icon-key:before { + content: "\e6e2"; } + +.el-icon-unlock:before { + content: "\e6e4"; } + +.el-icon-lock:before { + content: "\e6e5"; } + +.el-icon-watch:before { + content: "\e6fe"; } + +.el-icon-watch-1:before { + content: "\e6ff"; } + +.el-icon-timer:before { + content: "\e702"; } + +.el-icon-alarm-clock:before { + content: "\e703"; } + +.el-icon-map-location:before { + content: "\e704"; } + +.el-icon-delete-location:before { + content: "\e705"; } + +.el-icon-add-location:before { + content: "\e706"; } + +.el-icon-location-information:before { + content: "\e707"; } + +.el-icon-location-outline:before { + content: "\e708"; } + +.el-icon-location:before { + content: "\e79e"; } + +.el-icon-place:before { + content: "\e709"; } + +.el-icon-discover:before { + content: "\e70a"; } + +.el-icon-first-aid-kit:before { + content: "\e70b"; } + +.el-icon-trophy-1:before { + content: "\e70c"; } + +.el-icon-trophy:before { + content: "\e70d"; } + +.el-icon-medal:before { + content: "\e70e"; } + +.el-icon-medal-1:before { + content: "\e70f"; } + +.el-icon-stopwatch:before { + content: "\e710"; } + +.el-icon-mic:before { + content: "\e711"; } + +.el-icon-copy-document:before { + content: "\e718"; } + +.el-icon-full-screen:before { + content: "\e719"; } + +.el-icon-switch-button:before { + content: "\e71b"; } + +.el-icon-aim:before { + content: "\e71c"; } + +.el-icon-crop:before { + content: "\e71d"; } + +.el-icon-odometer:before { + content: "\e71e"; } + +.el-icon-time:before { + content: "\e71f"; } + +.el-icon-bangzhu:before { + content: "\e724"; } + +.el-icon-close-notification:before { + content: "\e726"; } + +.el-icon-microphone:before { + content: "\e727"; } + +.el-icon-turn-off-microphone:before { + content: "\e728"; } + +.el-icon-position:before { + content: "\e729"; } + +.el-icon-postcard:before { + content: "\e72a"; } + +.el-icon-message:before { + content: "\e72b"; } + +.el-icon-chat-line-square:before { + content: "\e72d"; } + +.el-icon-chat-dot-square:before { + content: "\e72e"; } + +.el-icon-chat-dot-round:before { + content: "\e72f"; } + +.el-icon-chat-square:before { + content: "\e730"; } + +.el-icon-chat-line-round:before { + content: "\e731"; } + +.el-icon-chat-round:before { + content: "\e732"; } + +.el-icon-set-up:before { + content: "\e733"; } + +.el-icon-turn-off:before { + content: "\e734"; } + +.el-icon-open:before { + content: "\e735"; } + +.el-icon-connection:before { + content: "\e736"; } + +.el-icon-link:before { + content: "\e737"; } + +.el-icon-cpu:before { + content: "\e738"; } + +.el-icon-thumb:before { + content: "\e739"; } + +.el-icon-female:before { + content: "\e73a"; } + +.el-icon-male:before { + content: "\e73b"; } + +.el-icon-guide:before { + content: "\e73c"; } + +.el-icon-news:before { + content: "\e73e"; } + +.el-icon-price-tag:before { + content: "\e744"; } + +.el-icon-discount:before { + content: "\e745"; } + +.el-icon-wallet:before { + content: "\e747"; } + +.el-icon-coin:before { + content: "\e748"; } + +.el-icon-money:before { + content: "\e749"; } + +.el-icon-bank-card:before { + content: "\e74a"; } + +.el-icon-box:before { + content: "\e74b"; } + +.el-icon-present:before { + content: "\e74c"; } + +.el-icon-sell:before { + content: "\e6d5"; } + +.el-icon-sold-out:before { + content: "\e6d6"; } + +.el-icon-shopping-bag-2:before { + content: "\e74d"; } + +.el-icon-shopping-bag-1:before { + content: "\e74e"; } + +.el-icon-shopping-cart-2:before { + content: "\e74f"; } + +.el-icon-shopping-cart-1:before { + content: "\e750"; } + +.el-icon-shopping-cart-full:before { + content: "\e751"; } + +.el-icon-smoking:before { + content: "\e752"; } + +.el-icon-no-smoking:before { + content: "\e753"; } + +.el-icon-house:before { + content: "\e754"; } + +.el-icon-table-lamp:before { + content: "\e755"; } + +.el-icon-school:before { + content: "\e756"; } + +.el-icon-office-building:before { + content: "\e757"; } + +.el-icon-toilet-paper:before { + content: "\e758"; } + +.el-icon-notebook-2:before { + content: "\e759"; } + +.el-icon-notebook-1:before { + content: "\e75a"; } + +.el-icon-files:before { + content: "\e75b"; } + +.el-icon-collection:before { + content: "\e75c"; } + +.el-icon-receiving:before { + content: "\e75d"; } + +.el-icon-suitcase-1:before { + content: "\e760"; } + +.el-icon-suitcase:before { + content: "\e761"; } + +.el-icon-film:before { + content: "\e763"; } + +.el-icon-collection-tag:before { + content: "\e765"; } + +.el-icon-data-analysis:before { + content: "\e766"; } + +.el-icon-pie-chart:before { + content: "\e767"; } + +.el-icon-data-board:before { + content: "\e768"; } + +.el-icon-data-line:before { + content: "\e76d"; } + +.el-icon-reading:before { + content: "\e769"; } + +.el-icon-magic-stick:before { + content: "\e76a"; } + +.el-icon-coordinate:before { + content: "\e76b"; } + +.el-icon-mouse:before { + content: "\e76c"; } + +.el-icon-brush:before { + content: "\e76e"; } + +.el-icon-headset:before { + content: "\e76f"; } + +.el-icon-umbrella:before { + content: "\e770"; } + +.el-icon-scissors:before { + content: "\e771"; } + +.el-icon-mobile:before { + content: "\e773"; } + +.el-icon-attract:before { + content: "\e774"; } + +.el-icon-monitor:before { + content: "\e775"; } + +.el-icon-search:before { + content: "\e778"; } + +.el-icon-takeaway-box:before { + content: "\e77a"; } + +.el-icon-paperclip:before { + content: "\e77d"; } + +.el-icon-printer:before { + content: "\e77e"; } + +.el-icon-document-add:before { + content: "\e782"; } + +.el-icon-document:before { + content: "\e785"; } + +.el-icon-document-checked:before { + content: "\e786"; } + +.el-icon-document-copy:before { + content: "\e787"; } + +.el-icon-document-delete:before { + content: "\e788"; } + +.el-icon-document-remove:before { + content: "\e789"; } + +.el-icon-tickets:before { + content: "\e78b"; } + +.el-icon-folder-checked:before { + content: "\e77f"; } + +.el-icon-folder-delete:before { + content: "\e780"; } + +.el-icon-folder-remove:before { + content: "\e781"; } + +.el-icon-folder-add:before { + content: "\e783"; } + +.el-icon-folder-opened:before { + content: "\e784"; } + +.el-icon-folder:before { + content: "\e78a"; } + +.el-icon-edit-outline:before { + content: "\e764"; } + +.el-icon-edit:before { + content: "\e78c"; } + +.el-icon-date:before { + content: "\e78e"; } + +.el-icon-c-scale-to-original:before { + content: "\e7c6"; } + +.el-icon-view:before { + content: "\e6ce"; } + +.el-icon-loading:before { + content: "\e6cf"; } + +.el-icon-rank:before { + content: "\e6d1"; } + +.el-icon-sort-down:before { + content: "\e7c4"; } + +.el-icon-sort-up:before { + content: "\e7c5"; } + +.el-icon-sort:before { + content: "\e6d2"; } + +.el-icon-finished:before { + content: "\e6cd"; } + +.el-icon-refresh-left:before { + content: "\e6c7"; } + +.el-icon-refresh-right:before { + content: "\e6c8"; } + +.el-icon-refresh:before { + content: "\e6d0"; } + +.el-icon-video-play:before { + content: "\e7c0"; } + +.el-icon-video-pause:before { + content: "\e7c1"; } + +.el-icon-d-arrow-right:before { + content: "\e6dc"; } + +.el-icon-d-arrow-left:before { + content: "\e6dd"; } + +.el-icon-arrow-up:before { + content: "\e6e1"; } + +.el-icon-arrow-down:before { + content: "\e6df"; } + +.el-icon-arrow-right:before { + content: "\e6e0"; } + +.el-icon-arrow-left:before { + content: "\e6de"; } + +.el-icon-top-right:before { + content: "\e6e7"; } + +.el-icon-top-left:before { + content: "\e6e8"; } + +.el-icon-top:before { + content: "\e6e6"; } + +.el-icon-bottom:before { + content: "\e6eb"; } + +.el-icon-right:before { + content: "\e6e9"; } + +.el-icon-back:before { + content: "\e6ea"; } + +.el-icon-bottom-right:before { + content: "\e6ec"; } + +.el-icon-bottom-left:before { + content: "\e6ed"; } + +.el-icon-caret-top:before { + content: "\e78f"; } + +.el-icon-caret-bottom:before { + content: "\e790"; } + +.el-icon-caret-right:before { + content: "\e791"; } + +.el-icon-caret-left:before { + content: "\e792"; } + +.el-icon-d-caret:before { + content: "\e79a"; } + +.el-icon-share:before { + content: "\e793"; } + +.el-icon-menu:before { + content: "\e798"; } + +.el-icon-s-grid:before { + content: "\e7a6"; } + +.el-icon-s-check:before { + content: "\e7a7"; } + +.el-icon-s-data:before { + content: "\e7a8"; } + +.el-icon-s-opportunity:before { + content: "\e7aa"; } + +.el-icon-s-custom:before { + content: "\e7ab"; } + +.el-icon-s-claim:before { + content: "\e7ad"; } + +.el-icon-s-finance:before { + content: "\e7ae"; } + +.el-icon-s-comment:before { + content: "\e7af"; } + +.el-icon-s-flag:before { + content: "\e7b0"; } + +.el-icon-s-marketing:before { + content: "\e7b1"; } + +.el-icon-s-shop:before { + content: "\e7b4"; } + +.el-icon-s-open:before { + content: "\e7b5"; } + +.el-icon-s-management:before { + content: "\e7b6"; } + +.el-icon-s-ticket:before { + content: "\e7b7"; } + +.el-icon-s-release:before { + content: "\e7b8"; } + +.el-icon-s-home:before { + content: "\e7b9"; } + +.el-icon-s-promotion:before { + content: "\e7ba"; } + +.el-icon-s-operation:before { + content: "\e7bb"; } + +.el-icon-s-unfold:before { + content: "\e7bc"; } + +.el-icon-s-fold:before { + content: "\e7a9"; } + +.el-icon-s-platform:before { + content: "\e7bd"; } + +.el-icon-s-order:before { + content: "\e7be"; } + +.el-icon-s-cooperation:before { + content: "\e7bf"; } + +.el-icon-bell:before { + content: "\e725"; } + +.el-icon-message-solid:before { + content: "\e799"; } + +.el-icon-video-camera:before { + content: "\e772"; } + +.el-icon-video-camera-solid:before { + content: "\e796"; } + +.el-icon-camera:before { + content: "\e779"; } + +.el-icon-camera-solid:before { + content: "\e79b"; } + +.el-icon-download:before { + content: "\e77c"; } + +.el-icon-upload2:before { + content: "\e77b"; } + +.el-icon-upload:before { + content: "\e7c3"; } + +.el-icon-picture-outline-round:before { + content: "\e75f"; } + +.el-icon-picture-outline:before { + content: "\e75e"; } + +.el-icon-picture:before { + content: "\e79f"; } + +.el-icon-close:before { + content: "\e6db"; } + +.el-icon-check:before { + content: "\e6da"; } + +.el-icon-plus:before { + content: "\e6d9"; } + +.el-icon-minus:before { + content: "\e6d8"; } + +.el-icon-help:before { + content: "\e73d"; } + +.el-icon-s-help:before { + content: "\e7b3"; } + +.el-icon-circle-close:before { + content: "\e78d"; } + +.el-icon-circle-check:before { + content: "\e720"; } + +.el-icon-circle-plus-outline:before { + content: "\e723"; } + +.el-icon-remove-outline:before { + content: "\e722"; } + +.el-icon-zoom-out:before { + content: "\e776"; } + +.el-icon-zoom-in:before { + content: "\e777"; } + +.el-icon-error:before { + content: "\e79d"; } + +.el-icon-success:before { + content: "\e79c"; } + +.el-icon-circle-plus:before { + content: "\e7a0"; } + +.el-icon-remove:before { + content: "\e7a2"; } + +.el-icon-info:before { + content: "\e7a1"; } + +.el-icon-question:before { + content: "\e7a4"; } + +.el-icon-warning-outline:before { + content: "\e6c9"; } + +.el-icon-warning:before { + content: "\e7a3"; } + +.el-icon-goods:before { + content: "\e7c2"; } + +.el-icon-s-goods:before { + content: "\e7b2"; } + +.el-icon-star-off:before { + content: "\e717"; } + +.el-icon-star-on:before { + content: "\e797"; } + +.el-icon-more-outline:before { + content: "\e6cc"; } + +.el-icon-more:before { + content: "\e794"; } + +.el-icon-phone-outline:before { + content: "\e6cb"; } + +.el-icon-phone:before { + content: "\e795"; } + +.el-icon-user:before { + content: "\e6e3"; } + +.el-icon-user-solid:before { + content: "\e7a5"; } + +.el-icon-setting:before { + content: "\e6ca"; } + +.el-icon-s-tools:before { + content: "\e7ac"; } + +.el-icon-delete:before { + content: "\e6d7"; } + +.el-icon-delete-solid:before { + content: "\e7c9"; } + +.el-icon-eleme:before { + content: "\e7c7"; } + +.el-icon-platform-eleme:before { + content: "\e7ca"; } + +.el-icon-loading { + -webkit-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; } + +.el-icon--right { + margin-left: 5px; } + +.el-icon--left { + margin-right: 5px; } + +@-webkit-keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } + +@keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-select { + display: inline-block; + position: relative; } + .el-select .el-select__tags > span { + display: contents; } + .el-select:hover .el-input__inner { + border-color: #C0C4CC; } + .el-select .el-input__inner { + cursor: pointer; + padding-right: 35px; } + .el-select .el-input__inner:focus { + border-color: #409EFF; } + .el-select .el-input .el-select__caret { + color: #C0C4CC; + font-size: 14px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + cursor: pointer; } + .el-select .el-input .el-select__caret.is-reverse { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + .el-select .el-input .el-select__caret.is-show-close { + font-size: 14px; + text-align: center; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + border-radius: 100%; + color: #C0C4CC; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-select .el-input .el-select__caret.is-show-close:hover { + color: #909399; } + .el-select .el-input.is-disabled .el-input__inner { + cursor: not-allowed; } + .el-select .el-input.is-disabled .el-input__inner:hover { + border-color: #E4E7ED; } + .el-select .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-select > .el-input { + display: block; } + .el-select__input { + border: none; + outline: none; + padding: 0; + margin-left: 15px; + color: #666; + font-size: 14px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 28px; + background-color: transparent; } + .el-select__input.is-mini { + height: 14px; } + .el-select__close { + cursor: pointer; + position: absolute; + top: 8px; + z-index: 1000; + right: 25px; + color: #C0C4CC; + line-height: 18px; + font-size: 14px; } + .el-select__close:hover { + color: #909399; } + .el-select__tags { + position: absolute; + line-height: normal; + white-space: normal; + z-index: 1; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-select .el-tag__close { + margin-top: -2px; } + .el-select .el-tag { + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-color: transparent; + margin: 2px 0 2px 6px; + background-color: #f0f2f5; } + .el-select .el-tag__close.el-icon-close { + background-color: #C0C4CC; + right: -7px; + top: 0; + color: #FFFFFF; } + .el-select .el-tag__close.el-icon-close:hover { + background-color: #909399; } + .el-select .el-tag__close.el-icon-close::before { + display: block; + -webkit-transform: translate(0, 0.5px); + transform: translate(0, 0.5px); } + +.el-pagination { + white-space: nowrap; + padding: 2px 5px; + color: #303133; + font-weight: bold; } + .el-pagination::before, + .el-pagination::after { + display: table; + content: ""; } + .el-pagination::after { + clear: both; } + .el-pagination span:not([class*=suffix]), + .el-pagination button { + display: inline-block; + font-size: 13px; + min-width: 35.5px; + height: 28px; + line-height: 28px; + vertical-align: top; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-pagination .el-input__inner { + text-align: center; + -moz-appearance: textfield; + line-height: normal; } + .el-pagination .el-input__suffix { + right: 0; + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-pagination .el-select .el-input { + width: 100px; + margin: 0 5px; } + .el-pagination .el-select .el-input .el-input__inner { + padding-right: 25px; + border-radius: 3px; } + .el-pagination button { + border: none; + padding: 0 6px; + background: transparent; } + .el-pagination button:focus { + outline: none; } + .el-pagination button:hover { + color: #409EFF; } + .el-pagination button:disabled { + color: #C0C4CC; + background-color: #FFFFFF; + cursor: not-allowed; } + .el-pagination .btn-prev, + .el-pagination .btn-next { + background: center center no-repeat; + background-size: 16px; + background-color: #FFFFFF; + cursor: pointer; + margin: 0; + color: #303133; } + .el-pagination .btn-prev .el-icon, + .el-pagination .btn-next .el-icon { + display: block; + font-size: 12px; + font-weight: bold; } + .el-pagination .btn-prev { + padding-right: 12px; } + .el-pagination .btn-next { + padding-left: 12px; } + .el-pagination .el-pager li.disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-pagination--small .btn-prev, + .el-pagination--small .btn-next, + .el-pagination--small .el-pager li, + .el-pagination--small .el-pager li.btn-quicknext, + .el-pagination--small .el-pager li.btn-quickprev, + .el-pagination--small .el-pager li:last-child { + border-color: transparent; + font-size: 12px; + line-height: 22px; + height: 22px; + min-width: 22px; } + .el-pagination--small .arrow.disabled { + visibility: hidden; } + .el-pagination--small .more::before, + .el-pagination--small li.more::before { + line-height: 24px; } + .el-pagination--small span:not([class*=suffix]), + .el-pagination--small button { + height: 22px; + line-height: 22px; } + .el-pagination--small .el-pagination__editor { + height: 22px; } + .el-pagination--small .el-pagination__editor.el-input .el-input__inner { + height: 22px; } + .el-pagination__sizes { + margin: 0 10px 0 0; + font-weight: normal; + color: #606266; } + .el-pagination__sizes .el-input .el-input__inner { + font-size: 13px; + padding-left: 8px; } + .el-pagination__sizes .el-input .el-input__inner:hover { + border-color: #409EFF; } + .el-pagination__total { + margin-right: 10px; + font-weight: normal; + color: #606266; } + .el-pagination__jump { + margin-left: 24px; + font-weight: normal; + color: #606266; } + .el-pagination__jump .el-input__inner { + padding: 0 3px; } + .el-pagination__rightwrapper { + float: right; } + .el-pagination__editor { + line-height: 18px; + padding: 0 2px; + height: 28px; + text-align: center; + margin: 0 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; } + .el-pagination__editor.el-input { + width: 50px; } + .el-pagination__editor.el-input .el-input__inner { + height: 28px; } + .el-pagination__editor .el-input__inner::-webkit-inner-spin-button, + .el-pagination__editor .el-input__inner::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; } + .el-pagination.is-background .btn-prev, + .el-pagination.is-background .btn-next, + .el-pagination.is-background .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; } + .el-pagination.is-background .btn-prev.disabled, + .el-pagination.is-background .btn-next.disabled, + .el-pagination.is-background .el-pager li.disabled { + color: #C0C4CC; } + .el-pagination.is-background .btn-prev, .el-pagination.is-background .btn-next { + padding: 0; } + .el-pagination.is-background .btn-prev:disabled, .el-pagination.is-background .btn-next:disabled { + color: #C0C4CC; } + .el-pagination.is-background .el-pager li:not(.disabled):hover { + color: #409EFF; } + .el-pagination.is-background .el-pager li:not(.disabled).active { + background-color: #409EFF; + color: #FFFFFF; } + .el-pagination.is-background.el-pagination--small .btn-prev, + .el-pagination.is-background.el-pagination--small .btn-next, + .el-pagination.is-background.el-pagination--small .el-pager li { + margin: 0 3px; + min-width: 22px; } + +.el-pager { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + list-style: none; + display: inline-block; + vertical-align: top; + font-size: 0; + padding: 0; + margin: 0; } + .el-pager .more::before { + line-height: 30px; } + .el-pager li { + padding: 0 4px; + background: #FFFFFF; + vertical-align: top; + display: inline-block; + font-size: 13px; + min-width: 35.5px; + height: 28px; + line-height: 28px; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + margin: 0; } + .el-pager li.btn-quicknext, .el-pager li.btn-quickprev { + line-height: 28px; + color: #303133; } + .el-pager li.btn-quicknext.disabled, .el-pager li.btn-quickprev.disabled { + color: #C0C4CC; } + .el-pager li.btn-quickprev:hover { + cursor: pointer; } + .el-pager li.btn-quicknext:hover { + cursor: pointer; } + .el-pager li.active + li { + border-left: 0; } + .el-pager li:hover { + color: #409EFF; } + .el-pager li.active { + color: #409EFF; + cursor: default; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.v-modal-enter { + -webkit-animation: v-modal-in .2s ease; + animation: v-modal-in .2s ease; } + +.v-modal-leave { + -webkit-animation: v-modal-out .2s ease forwards; + animation: v-modal-out .2s ease forwards; } + +@-webkit-keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@-webkit-keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +@keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +.v-modal { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.5; + background: #000000; } + +.el-popup-parent--hidden { + overflow: hidden; } + +.el-dialog { + position: relative; + margin: 0 auto 50px; + background: #FFFFFF; + border-radius: 2px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 50%; } + .el-dialog.is-fullscreen { + width: 100%; + margin-top: 0; + margin-bottom: 0; + height: 100%; + overflow: auto; } + .el-dialog__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: auto; + margin: 0; } + .el-dialog__header { + padding: 20px; + padding-bottom: 10px; } + .el-dialog__headerbtn { + position: absolute; + top: 20px; + right: 20px; + padding: 0; + background: transparent; + border: none; + outline: none; + cursor: pointer; + font-size: 16px; } + .el-dialog__headerbtn .el-dialog__close { + color: #909399; } + .el-dialog__headerbtn:focus .el-dialog__close, .el-dialog__headerbtn:hover .el-dialog__close { + color: #409EFF; } + .el-dialog__title { + line-height: 24px; + font-size: 18px; + color: #303133; } + .el-dialog__body { + padding: 30px 20px; + color: #606266; + font-size: 14px; + word-break: break-all; } + .el-dialog__footer { + padding: 20px; + padding-top: 10px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-dialog--center { + text-align: center; } + .el-dialog--center .el-dialog__body { + text-align: initial; + padding: 25px 25px 30px; } + .el-dialog--center .el-dialog__footer { + text-align: inherit; } + +.dialog-fade-enter-active { + -webkit-animation: dialog-fade-in .3s; + animation: dialog-fade-in .3s; } + +.dialog-fade-leave-active { + -webkit-animation: dialog-fade-out .3s; + animation: dialog-fade-out .3s; } + +@-webkit-keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-autocomplete { + position: relative; + display: inline-block; } + +.el-autocomplete-suggestion { + margin: 5px 0; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 4px; + border: 1px solid #E4E7ED; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background-color: #FFFFFF; } + .el-autocomplete-suggestion__wrap { + max-height: 280px; + padding: 10px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-autocomplete-suggestion__list { + margin: 0; + padding: 0; } + .el-autocomplete-suggestion li { + padding: 0 20px; + margin: 0; + line-height: 34px; + cursor: pointer; + color: #606266; + font-size: 14px; + list-style: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-autocomplete-suggestion li:hover { + background-color: #F5F7FA; } + .el-autocomplete-suggestion li.highlighted { + background-color: #F5F7FA; } + .el-autocomplete-suggestion li.divider { + margin-top: 6px; + border-top: 1px solid #000000; } + .el-autocomplete-suggestion li.divider:last-child { + margin-bottom: -6px; } + .el-autocomplete-suggestion.is-loading li { + text-align: center; + height: 100px; + line-height: 100px; + font-size: 20px; + color: #999; } + .el-autocomplete-suggestion.is-loading li::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-autocomplete-suggestion.is-loading li:hover { + background-color: #FFFFFF; } + .el-autocomplete-suggestion.is-loading .el-icon-loading { + vertical-align: middle; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-dropdown { + display: inline-block; + position: relative; + color: #606266; + font-size: 14px; } + .el-dropdown .el-button-group { + display: block; } + .el-dropdown .el-button-group .el-button { + float: none; } + .el-dropdown .el-dropdown__caret-button { + padding-left: 5px; + padding-right: 5px; + position: relative; + border-left: none; } + .el-dropdown .el-dropdown__caret-button::before { + content: ''; + position: absolute; + display: block; + width: 1px; + top: 5px; + bottom: 5px; + left: 0; + background: rgba(255, 255, 255, 0.5); } + .el-dropdown .el-dropdown__caret-button.el-button--default::before { + background: rgba(220, 223, 230, 0.5); } + .el-dropdown .el-dropdown__caret-button:hover::before { + top: 0; + bottom: 0; } + .el-dropdown .el-dropdown__caret-button .el-dropdown__icon { + padding-left: 0; } + .el-dropdown__icon { + font-size: 12px; + margin: 0 3px; } + .el-dropdown .el-dropdown-selfdefine:focus:active, .el-dropdown .el-dropdown-selfdefine:focus:not(.focusing) { + outline-width: 0; } + +.el-dropdown-menu { + position: absolute; + top: 0; + left: 0; + z-index: 10; + padding: 10px 0; + margin: 5px 0; + background-color: #FFFFFF; + border: 1px solid #EBEEF5; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-dropdown-menu__item { + list-style: none; + line-height: 36px; + padding: 0 20px; + margin: 0; + font-size: 14px; + color: #606266; + cursor: pointer; + outline: none; } + .el-dropdown-menu__item:not(.is-disabled):hover, .el-dropdown-menu__item:focus { + background-color: #409EFF; + color: #FFFFFF; } + .el-dropdown-menu__item i { + margin-right: 5px; } + .el-dropdown-menu__item--divided { + position: relative; + margin-top: 6px; + border-top: 1px solid #EBEEF5; } + .el-dropdown-menu__item--divided:before { + content: ''; + height: 6px; + display: block; + margin: 0 -20px; + background-color: #FFFFFF; } + .el-dropdown-menu__item.is-disabled { + cursor: default; + color: #bbb; + pointer-events: none; } + .el-dropdown-menu--medium { + padding: 6px 0; } + .el-dropdown-menu--medium .el-dropdown-menu__item { + line-height: 30px; + padding: 0 17px; + font-size: 14px; } + .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 6px; } + .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 6px; + margin: 0 -17px; } + .el-dropdown-menu--small { + padding: 6px 0; } + .el-dropdown-menu--small .el-dropdown-menu__item { + line-height: 27px; + padding: 0 15px; + font-size: 13px; } + .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 4px; } + .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 4px; + margin: 0 -15px; } + .el-dropdown-menu--mini { + padding: 3px 0; } + .el-dropdown-menu--mini .el-dropdown-menu__item { + line-height: 24px; + padding: 0 10px; + font-size: 12px; } + .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 3px; } + .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 3px; + margin: 0 -10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-menu { + border-right: solid 1px #e6e6e6; + list-style: none; + position: relative; + margin: 0; + padding-left: 0; + background-color: #272C34; } + .el-menu::before, + .el-menu::after { + display: table; + content: ""; } + .el-menu::after { + clear: both; } + .el-menu.el-menu--horizontal { + border-bottom: solid 1px #e6e6e6; } + .el-menu--horizontal { + border-right: none; } + .el-menu--horizontal > .el-menu-item { + float: left; + height: 60px; + line-height: 60px; + margin: 0; + border-bottom: 2px solid transparent; + color: #909399; } + .el-menu--horizontal > .el-menu-item a, + .el-menu--horizontal > .el-menu-item a:hover { + color: inherit; } + .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus { + background-color: #fff; } + .el-menu--horizontal > .el-submenu { + float: left; } + .el-menu--horizontal > .el-submenu:focus, .el-menu--horizontal > .el-submenu:hover { + outline: none; } + .el-menu--horizontal > .el-submenu:focus .el-submenu__title, .el-menu--horizontal > .el-submenu:hover .el-submenu__title { + color: #303133; } + .el-menu--horizontal > .el-submenu.is-active .el-submenu__title { + border-bottom: 2px solid #409EFF; + color: #303133; } + .el-menu--horizontal > .el-submenu .el-submenu__title { + height: 60px; + line-height: 60px; + border-bottom: 2px solid transparent; + color: #909399; } + .el-menu--horizontal > .el-submenu .el-submenu__title:hover { + background-color: #fff; } + .el-menu--horizontal > .el-submenu .el-submenu__icon-arrow { + position: static; + vertical-align: middle; + margin-left: 8px; + margin-top: -3px; } + .el-menu--horizontal .el-menu .el-menu-item, + .el-menu--horizontal .el-menu .el-submenu__title { + background-color: #FFFFFF; + float: none; + height: 36px; + line-height: 36px; + padding: 0 10px; + color: #909399; } + .el-menu--horizontal .el-menu .el-menu-item.is-active, + .el-menu--horizontal .el-menu .el-submenu.is-active > .el-submenu__title { + color: #303133; } + .el-menu--horizontal .el-menu-item:not(.is-disabled):hover, + .el-menu--horizontal .el-menu-item:not(.is-disabled):focus { + outline: none; + color: #303133; } + .el-menu--horizontal > .el-menu-item.is-active { + border-bottom: 2px solid #409EFF; + color: #303133; } + .el-menu--collapse { + width: 64px; } + .el-menu--collapse > .el-menu-item [class^="el-icon-"], + .el-menu--collapse > .el-submenu > .el-submenu__title [class^="el-icon-"] { + margin: 0; + vertical-align: middle; + width: 24px; + text-align: center; } + .el-menu--collapse > .el-menu-item .el-submenu__icon-arrow, + .el-menu--collapse > .el-submenu > .el-submenu__title .el-submenu__icon-arrow { + display: none; } + .el-menu--collapse > .el-menu-item span, + .el-menu--collapse > .el-submenu > .el-submenu__title span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; } + .el-menu--collapse > .el-menu-item.is-active i { + color: inherit; } + .el-menu--collapse .el-menu .el-submenu { + min-width: 200px; } + .el-menu--collapse .el-submenu { + position: relative; } + .el-menu--collapse .el-submenu .el-menu { + position: absolute; + margin-left: 5px; + top: 0; + left: 100%; + z-index: 10; + border: 1px solid #E4E7ED; + border-radius: 2px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-menu--collapse .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow { + -webkit-transform: none; + transform: none; } + .el-menu--popup { + z-index: 100; + min-width: 200px; + border: none; + padding: 5px 0; + border-radius: 2px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-menu--popup-bottom-start { + margin-top: 5px; } + .el-menu--popup-right-start { + margin-left: 5px; + margin-right: 5px; } + +.el-menu-item { + height: 56px; + line-height: 56px; + font-size: 14px; + color: #FFFFFF; + padding: 0 20px; + list-style: none; + cursor: pointer; + position: relative; + -webkit-transition: border-color .3s, background-color .3s, color .3s; + transition: border-color .3s, background-color .3s, color .3s; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-menu-item * { + vertical-align: middle; } + .el-menu-item i { + color: #909399; } + .el-menu-item:hover, .el-menu-item:focus { + outline: none; + background-color: #409EFF; } + .el-menu-item.is-disabled { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-menu-item [class^="el-icon-"] { + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; + vertical-align: middle; } + .el-menu-item.is-active { + color: #409EFF; } + .el-menu-item.is-active i { + color: inherit; } + +.el-submenu { + list-style: none; + margin: 0; + padding-left: 0; } + .el-submenu__title { + height: 56px; + line-height: 56px; + font-size: 14px; + color: #FFFFFF; + padding: 0 20px; + list-style: none; + cursor: pointer; + position: relative; + -webkit-transition: border-color .3s, background-color .3s, color .3s; + transition: border-color .3s, background-color .3s, color .3s; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-submenu__title * { + vertical-align: middle; } + .el-submenu__title i { + color: #909399; } + .el-submenu__title:hover, .el-submenu__title:focus { + outline: none; + background-color: #409EFF; } + .el-submenu__title.is-disabled { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-submenu__title:hover { + background-color: #409EFF; } + .el-submenu .el-menu { + border: none; } + .el-submenu .el-menu-item { + height: 50px; + line-height: 50px; + padding: 0 45px; + min-width: 200px; } + .el-submenu__icon-arrow { + position: absolute; + top: 50%; + right: 20px; + margin-top: -7px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-size: 12px; } + .el-submenu.is-active .el-submenu__title { + border-bottom-color: #409EFF; } + .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow { + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); } + .el-submenu.is-disabled .el-submenu__title, + .el-submenu.is-disabled .el-menu-item { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-submenu [class^="el-icon-"] { + vertical-align: middle; + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; } + +.el-menu-item-group > ul { + padding: 0; } + +.el-menu-item-group__title { + padding: 7px 0 7px 20px; + line-height: normal; + font-size: 12px; + color: #909399; } + +.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow { + -webkit-transition: .2s; + transition: .2s; + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-input-number { + position: relative; + display: inline-block; + width: 180px; + line-height: 38px; } + .el-input-number .el-input { + display: block; } + .el-input-number .el-input__inner { + -webkit-appearance: none; + padding-left: 50px; + padding-right: 50px; + text-align: center; } + .el-input-number__increase, .el-input-number__decrease { + position: absolute; + z-index: 1; + top: 1px; + width: 40px; + height: auto; + text-align: center; + background: #F5F7FA; + color: #606266; + cursor: pointer; + font-size: 13px; } + .el-input-number__increase:hover, .el-input-number__decrease:hover { + color: #409EFF; } + .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled), .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) { + border-color: #409EFF; } + .el-input-number__increase.is-disabled, .el-input-number__decrease.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-input-number__increase { + right: 1px; + border-radius: 0 4px 4px 0; + border-left: 1px solid #DCDFE6; } + .el-input-number__decrease { + left: 1px; + border-radius: 4px 0 0 4px; + border-right: 1px solid #DCDFE6; } + .el-input-number.is-disabled .el-input-number__increase, .el-input-number.is-disabled .el-input-number__decrease { + border-color: #E4E7ED; + color: #E4E7ED; } + .el-input-number.is-disabled .el-input-number__increase:hover, .el-input-number.is-disabled .el-input-number__decrease:hover { + color: #E4E7ED; + cursor: not-allowed; } + .el-input-number--medium { + width: 200px; + line-height: 34px; } + .el-input-number--medium .el-input-number__increase, .el-input-number--medium .el-input-number__decrease { + width: 36px; + font-size: 14px; } + .el-input-number--medium .el-input__inner { + padding-left: 43px; + padding-right: 43px; } + .el-input-number--small { + width: 130px; + line-height: 30px; } + .el-input-number--small .el-input-number__increase, .el-input-number--small .el-input-number__decrease { + width: 32px; + font-size: 13px; } + .el-input-number--small .el-input-number__increase [class*=el-icon], .el-input-number--small .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.9); + transform: scale(0.9); } + .el-input-number--small .el-input__inner { + padding-left: 39px; + padding-right: 39px; } + .el-input-number--mini { + width: 130px; + line-height: 26px; } + .el-input-number--mini .el-input-number__increase, .el-input-number--mini .el-input-number__decrease { + width: 28px; + font-size: 12px; } + .el-input-number--mini .el-input-number__increase [class*=el-icon], .el-input-number--mini .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number--mini .el-input__inner { + padding-left: 35px; + padding-right: 35px; } + .el-input-number.is-without-controls .el-input__inner { + padding-left: 15px; + padding-right: 15px; } + .el-input-number.is-controls-right .el-input__inner { + padding-left: 15px; + padding-right: 50px; } + .el-input-number.is-controls-right .el-input-number__increase, .el-input-number.is-controls-right .el-input-number__decrease { + height: auto; + line-height: 19px; } + .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon], .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number.is-controls-right .el-input-number__increase { + border-radius: 0 4px 0 0; + border-bottom: 1px solid #DCDFE6; } + .el-input-number.is-controls-right .el-input-number__decrease { + right: 1px; + bottom: 1px; + top: auto; + left: auto; + border-right: none; + border-left: 1px solid #DCDFE6; + border-radius: 0 0 4px 0; } + .el-input-number.is-controls-right[class*=medium] [class*=increase], .el-input-number.is-controls-right[class*=medium] [class*=decrease] { + line-height: 17px; } + .el-input-number.is-controls-right[class*=small] [class*=increase], .el-input-number.is-controls-right[class*=small] [class*=decrease] { + line-height: 15px; } + .el-input-number.is-controls-right[class*=mini] [class*=increase], .el-input-number.is-controls-right[class*=mini] [class*=decrease] { + line-height: 13px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio-group { + display: inline-block; + line-height: 1; + vertical-align: middle; + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio-button { + position: relative; + display: inline-block; + outline: none; } + .el-radio-button__inner { + display: inline-block; + line-height: 1; + white-space: nowrap; + vertical-align: middle; + background: #FFFFFF; + border: 1px solid #DCDFE6; + font-weight: 500; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + cursor: pointer; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-radio-button__inner.is-round { + padding: 12px 20px; } + .el-radio-button__inner:hover { + color: #409EFF; } + .el-radio-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-radio-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-radio-button:first-child .el-radio-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-radio-button__orig-radio { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; } + .el-radio-button__orig-radio:checked + .el-radio-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #409EFF; + box-shadow: -1px 0 0 0 #409EFF; } + .el-radio-button__orig-radio:disabled + .el-radio-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-radio-button__orig-radio:disabled:checked + .el-radio-button__inner { + background-color: #F2F6FC; } + .el-radio-button:last-child .el-radio-button__inner { + border-radius: 0 4px 4px 0; } + .el-radio-button:first-child:last-child .el-radio-button__inner { + border-radius: 4px; } + .el-radio-button--medium .el-radio-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-radio-button--medium .el-radio-button__inner.is-round { + padding: 10px 20px; } + .el-radio-button--small .el-radio-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-radio-button--small .el-radio-button__inner.is-round { + padding: 9px 15px; } + .el-radio-button--mini .el-radio-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-radio-button--mini .el-radio-button__inner.is-round { + padding: 7px 15px; } + .el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-switch { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + font-size: 14px; + line-height: 20px; + height: 20px; + vertical-align: middle; } + .el-switch.is-disabled .el-switch__core, + .el-switch.is-disabled .el-switch__label { + cursor: not-allowed; } + .el-switch__label { + -webkit-transition: .2s; + transition: .2s; + height: 20px; + display: inline-block; + font-size: 14px; + font-weight: 500; + cursor: pointer; + vertical-align: middle; + color: #303133; } + .el-switch__label.is-active { + color: #409EFF; } + .el-switch__label--left { + margin-right: 10px; } + .el-switch__label--right { + margin-left: 10px; } + .el-switch__label * { + line-height: 1; + font-size: 14px; + display: inline-block; } + .el-switch__input { + position: absolute; + width: 0; + height: 0; + opacity: 0; + margin: 0; } + .el-switch__core { + margin: 0; + display: inline-block; + position: relative; + width: 40px; + height: 20px; + border: 1px solid #DCDFE6; + outline: none; + border-radius: 10px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #DCDFE6; + cursor: pointer; + -webkit-transition: border-color .3s, background-color .3s; + transition: border-color .3s, background-color .3s; + vertical-align: middle; } + .el-switch__core:after { + content: ""; + position: absolute; + top: 1px; + left: 1px; + border-radius: 100%; + -webkit-transition: all .3s; + transition: all .3s; + width: 16px; + height: 16px; + background-color: #FFFFFF; } + .el-switch.is-checked .el-switch__core { + border-color: #409EFF; + background-color: #409EFF; } + .el-switch.is-checked .el-switch__core::after { + left: 100%; + margin-left: -17px; } + .el-switch.is-disabled { + opacity: 0.6; } + .el-switch--wide .el-switch__label.el-switch__label--left span { + left: 10px; } + .el-switch--wide .el-switch__label.el-switch__label--right span { + right: 10px; } + .el-switch .label-fade-enter, + .el-switch .label-fade-leave-active { + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-select { + display: inline-block; + position: relative; } + .el-select .el-select__tags > span { + display: contents; } + .el-select:hover .el-input__inner { + border-color: #C0C4CC; } + .el-select .el-input__inner { + cursor: pointer; + padding-right: 35px; } + .el-select .el-input__inner:focus { + border-color: #409EFF; } + .el-select .el-input .el-select__caret { + color: #C0C4CC; + font-size: 14px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + cursor: pointer; } + .el-select .el-input .el-select__caret.is-reverse { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + .el-select .el-input .el-select__caret.is-show-close { + font-size: 14px; + text-align: center; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + border-radius: 100%; + color: #C0C4CC; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-select .el-input .el-select__caret.is-show-close:hover { + color: #909399; } + .el-select .el-input.is-disabled .el-input__inner { + cursor: not-allowed; } + .el-select .el-input.is-disabled .el-input__inner:hover { + border-color: #E4E7ED; } + .el-select .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-select > .el-input { + display: block; } + .el-select__input { + border: none; + outline: none; + padding: 0; + margin-left: 15px; + color: #666; + font-size: 14px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 28px; + background-color: transparent; } + .el-select__input.is-mini { + height: 14px; } + .el-select__close { + cursor: pointer; + position: absolute; + top: 8px; + z-index: 1000; + right: 25px; + color: #C0C4CC; + line-height: 18px; + font-size: 14px; } + .el-select__close:hover { + color: #909399; } + .el-select__tags { + position: absolute; + line-height: normal; + white-space: normal; + z-index: 1; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-select .el-tag__close { + margin-top: -2px; } + .el-select .el-tag { + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-color: transparent; + margin: 2px 0 2px 6px; + background-color: #f0f2f5; } + .el-select .el-tag__close.el-icon-close { + background-color: #C0C4CC; + right: -7px; + top: 0; + color: #FFFFFF; } + .el-select .el-tag__close.el-icon-close:hover { + background-color: #909399; } + .el-select .el-tag__close.el-icon-close::before { + display: block; + -webkit-transform: translate(0, 0.5px); + transform: translate(0, 0.5px); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-table { + position: relative; + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + width: 100%; + max-width: 100%; + background-color: #FFFFFF; + font-size: 14px; + color: #606266; } + .el-table__empty-block { + min-height: 60px; + text-align: center; + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-table__empty-text { + line-height: 60px; + width: 50%; + color: #909399; } + .el-table__expand-column .cell { + padding: 0; + text-align: center; } + .el-table__expand-icon { + position: relative; + cursor: pointer; + color: #666; + font-size: 12px; + -webkit-transition: -webkit-transform 0.2s ease-in-out; + transition: -webkit-transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out; + height: 20px; } + .el-table__expand-icon--expanded { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-table__expand-icon > .el-icon { + position: absolute; + left: 50%; + top: 50%; + margin-left: -5px; + margin-top: -5px; } + .el-table__expanded-cell { + background-color: #FFFFFF; } + .el-table__expanded-cell[class*=cell] { + padding: 20px 50px; } + .el-table__expanded-cell:hover { + background-color: transparent !important; } + .el-table__placeholder { + display: inline-block; + width: 20px; } + .el-table__append-wrapper { + overflow: hidden; } + .el-table--fit { + border-right: 0; + border-bottom: 0; } + .el-table--fit th.gutter, .el-table--fit td.gutter { + border-right-width: 1px; } + .el-table--scrollable-x .el-table__body-wrapper { + overflow-x: auto; } + .el-table--scrollable-y .el-table__body-wrapper { + overflow-y: auto; } + .el-table thead { + color: #909399; + font-weight: 500; } + .el-table thead.is-group th { + background: #F5F7FA; } + .el-table th, .el-table td { + padding: 12px 0; + min-width: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-overflow: ellipsis; + vertical-align: middle; + position: relative; + text-align: left; } + .el-table th.is-center, .el-table td.is-center { + text-align: center; } + .el-table th.is-right, .el-table td.is-right { + text-align: right; } + .el-table th.gutter, .el-table td.gutter { + width: 15px; + border-right-width: 0; + border-bottom-width: 0; + padding: 0; } + .el-table th.is-hidden > *, .el-table td.is-hidden > * { + visibility: hidden; } + .el-table--medium th, .el-table--medium td { + padding: 10px 0; } + .el-table--small { + font-size: 12px; } + .el-table--small th, .el-table--small td { + padding: 8px 0; } + .el-table--mini { + font-size: 12px; } + .el-table--mini th, .el-table--mini td { + padding: 6px 0; } + .el-table tr { + background-color: #FFFFFF; } + .el-table tr input[type="checkbox"] { + margin: 0; } + .el-table th.is-leaf, .el-table td { + border-bottom: 1px solid #EBEEF5; } + .el-table th.is-sortable { + cursor: pointer; } + .el-table th { + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #FFFFFF; } + .el-table th > .cell { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; + vertical-align: middle; + padding-left: 10px; + padding-right: 10px; + width: 100%; } + .el-table th > .cell.highlight { + color: #409EFF; } + .el-table th.required > div::before { + display: inline-block; + content: ""; + width: 8px; + height: 8px; + border-radius: 50%; + background: #ff4d51; + margin-right: 5px; + vertical-align: middle; } + .el-table td div { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-table td.gutter { + width: 0; } + .el-table .cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + text-overflow: ellipsis; + white-space: normal; + word-break: break-all; + line-height: 23px; + padding-left: 10px; + padding-right: 10px; } + .el-table .cell.el-tooltip { + white-space: nowrap; + min-width: 50px; } + .el-table--group, .el-table--border { + border: 1px solid #EBEEF5; } + .el-table--group::after, .el-table--border::after, .el-table::before { + content: ''; + position: absolute; + background-color: #EBEEF5; + z-index: 1; } + .el-table--group::after, .el-table--border::after { + top: 0; + right: 0; + width: 1px; + height: 100%; } + .el-table::before { + left: 0; + bottom: 0; + width: 100%; + height: 1px; } + .el-table--border { + border-right: none; + border-bottom: none; } + .el-table--border.el-loading-parent--relative { + border-color: transparent; } + .el-table--border th, .el-table--border td { + border-right: 1px solid #EBEEF5; } + .el-table--border th:first-child .cell, .el-table--border td:first-child .cell { + padding-left: 10px; } + .el-table--border th.gutter:last-of-type { + border-bottom: 1px solid #EBEEF5; + border-bottom-width: 1px; } + .el-table--border th { + border-bottom: 1px solid #EBEEF5; } + .el-table--hidden { + visibility: hidden; } + .el-table__fixed, .el-table__fixed-right { + position: absolute; + top: 0; + left: 0; + overflow-x: hidden; + overflow-y: hidden; + -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.12); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.12); } + .el-table__fixed::before, .el-table__fixed-right::before { + content: ''; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 1px; + background-color: #EBEEF5; + z-index: 4; } + .el-table__fixed-right-patch { + position: absolute; + top: -1px; + right: 0; + background-color: #FFFFFF; + border-bottom: 1px solid #EBEEF5; } + .el-table__fixed-right { + top: 0; + left: auto; + right: 0; } + .el-table__fixed-right .el-table__fixed-header-wrapper, + .el-table__fixed-right .el-table__fixed-body-wrapper, + .el-table__fixed-right .el-table__fixed-footer-wrapper { + left: auto; + right: 0; } + .el-table__fixed-header-wrapper { + position: absolute; + left: 0; + top: 0; + z-index: 3; } + .el-table__fixed-footer-wrapper { + position: absolute; + left: 0; + bottom: 0; + z-index: 3; } + .el-table__fixed-footer-wrapper tbody td { + border-top: 1px solid #EBEEF5; + background-color: #F5F7FA; + color: #606266; } + .el-table__fixed-body-wrapper { + position: absolute; + left: 0; + top: 37px; + overflow: hidden; + z-index: 3; } + .el-table__header-wrapper, .el-table__body-wrapper, .el-table__footer-wrapper { + width: 100%; } + .el-table__footer-wrapper { + margin-top: -1px; } + .el-table__footer-wrapper td { + border-top: 1px solid #EBEEF5; } + .el-table__header, .el-table__body, .el-table__footer { + table-layout: fixed; + border-collapse: separate; } + .el-table__header-wrapper, .el-table__footer-wrapper { + overflow: hidden; } + .el-table__header-wrapper tbody td, .el-table__footer-wrapper tbody td { + background-color: #F5F7FA; + color: #606266; } + .el-table__body-wrapper { + overflow: hidden; + position: relative; } + .el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed, + .el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed-right { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper.is-scrolling-left ~ .el-table__fixed { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper.is-scrolling-right ~ .el-table__fixed-right { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper .el-table--border.is-scrolling-right ~ .el-table__fixed-right { + border-left: 1px solid #EBEEF5; } + .el-table__body-wrapper .el-table--border.is-scrolling-left ~ .el-table__fixed { + border-right: 1px solid #EBEEF5; } + .el-table .caret-wrapper { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 34px; + width: 24px; + vertical-align: middle; + cursor: pointer; + overflow: initial; + position: relative; } + .el-table .sort-caret { + width: 0; + height: 0; + border: solid 5px transparent; + position: absolute; + left: 7px; } + .el-table .sort-caret.ascending { + border-bottom-color: #C0C4CC; + top: 5px; } + .el-table .sort-caret.descending { + border-top-color: #C0C4CC; + bottom: 7px; } + .el-table .ascending .sort-caret.ascending { + border-bottom-color: #409EFF; } + .el-table .descending .sort-caret.descending { + border-top-color: #409EFF; } + .el-table .hidden-columns { + visibility: hidden; + position: absolute; + z-index: -1; } + .el-table--striped .el-table__body tr.el-table__row--striped td { + background: #FAFAFA; } + .el-table--striped .el-table__body tr.el-table__row--striped.current-row td { + background-color: #ecf5ff; } + .el-table__body tr.hover-row > td, .el-table__body tr.hover-row.current-row > td, .el-table__body tr.hover-row.el-table__row--striped > td, .el-table__body tr.hover-row.el-table__row--striped.current-row > td { + background-color: #F5F7FA; } + .el-table__body tr.current-row > td { + background-color: #ecf5ff; } + .el-table__column-resize-proxy { + position: absolute; + left: 200px; + top: 0; + bottom: 0; + width: 0; + border-left: 1px solid #EBEEF5; + z-index: 10; } + .el-table__column-filter-trigger { + display: inline-block; + line-height: 34px; + cursor: pointer; } + .el-table__column-filter-trigger i { + color: #909399; + font-size: 12px; + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .el-table--enable-row-transition .el-table__body td { + -webkit-transition: background-color .25s ease; + transition: background-color .25s ease; } + .el-table--enable-row-hover .el-table__body tr:hover > td { + background-color: #F5F7FA; } + .el-table--fluid-height .el-table__fixed, + .el-table--fluid-height .el-table__fixed-right { + bottom: 0; + overflow: hidden; } + .el-table [class*=el-table__row--level] .el-table__expand-icon { + display: inline-block; + width: 20px; + line-height: 20px; + height: 20px; + text-align: center; + margin-right: 3px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-table-column--selection .cell { + padding-left: 14px; + padding-right: 14px; } + +.el-table-filter { + border: solid 1px #EBEEF5; + border-radius: 2px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 2px 0; + /** used for dropdown mode */ } + .el-table-filter__list { + padding: 5px 0; + margin: 0; + list-style: none; + min-width: 100px; } + .el-table-filter__list-item { + line-height: 36px; + padding: 0 10px; + cursor: pointer; + font-size: 14px; } + .el-table-filter__list-item:hover { + background-color: #409EFF; + color: #FFFFFF; } + .el-table-filter__list-item.is-active { + background-color: #409EFF; + color: #FFFFFF; } + .el-table-filter__content { + min-width: 100px; } + .el-table-filter__bottom { + border-top: 1px solid #EBEEF5; + padding: 8px; } + .el-table-filter__bottom button { + background: transparent; + border: none; + color: #606266; + cursor: pointer; + font-size: 13px; + padding: 0 3px; } + .el-table-filter__bottom button:hover { + color: #409EFF; } + .el-table-filter__bottom button:focus { + outline: none; } + .el-table-filter__bottom button.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-table-filter__wrap { + max-height: 280px; } + .el-table-filter__checkbox-group { + padding: 10px; } + .el-table-filter__checkbox-group label.el-checkbox { + display: block; + margin-right: 5px; + margin-bottom: 8px; + margin-left: 5px; } + .el-table-filter__checkbox-group .el-checkbox:last-child { + margin-bottom: 0; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-date-table { + font-size: 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .el-date-table.is-week-mode .el-date-table__row:hover div { + background-color: #F2F6FC; } + .el-date-table.is-week-mode .el-date-table__row:hover td.available:hover { + color: #606266; } + .el-date-table.is-week-mode .el-date-table__row:hover td:first-child div { + margin-left: 5px; + border-top-left-radius: 15px; + border-bottom-left-radius: 15px; } + .el-date-table.is-week-mode .el-date-table__row:hover td:last-child div { + margin-right: 5px; + border-top-right-radius: 15px; + border-bottom-right-radius: 15px; } + .el-date-table.is-week-mode .el-date-table__row.current div { + background-color: #F2F6FC; } + .el-date-table td { + width: 32px; + height: 30px; + padding: 4px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + cursor: pointer; + position: relative; } + .el-date-table td div { + height: 30px; + padding: 3px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-table td span { + width: 24px; + height: 24px; + display: block; + margin: 0 auto; + line-height: 24px; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + border-radius: 50%; } + .el-date-table td.next-month, .el-date-table td.prev-month { + color: #C0C4CC; } + .el-date-table td.today { + position: relative; } + .el-date-table td.today span { + color: #409EFF; + font-weight: bold; } + .el-date-table td.today.start-date span, + .el-date-table td.today.end-date span { + color: #FFFFFF; } + .el-date-table td.available:hover { + color: #409EFF; } + .el-date-table td.in-range div { + background-color: #F2F6FC; } + .el-date-table td.in-range div:hover { + background-color: #F2F6FC; } + .el-date-table td.current:not(.disabled) span { + color: #FFFFFF; + background-color: #409EFF; } + .el-date-table td.start-date div, + .el-date-table td.end-date div { + color: #FFFFFF; } + .el-date-table td.start-date span, + .el-date-table td.end-date span { + background-color: #409EFF; } + .el-date-table td.start-date div { + margin-left: 5px; + border-top-left-radius: 15px; + border-bottom-left-radius: 15px; } + .el-date-table td.end-date div { + margin-right: 5px; + border-top-right-radius: 15px; + border-bottom-right-radius: 15px; } + .el-date-table td.disabled div { + background-color: #F5F7FA; + opacity: 1; + cursor: not-allowed; + color: #C0C4CC; } + .el-date-table td.selected div { + margin-left: 5px; + margin-right: 5px; + background-color: #F2F6FC; + border-radius: 15px; } + .el-date-table td.selected div:hover { + background-color: #F2F6FC; } + .el-date-table td.selected span { + background-color: #409EFF; + color: #FFFFFF; + border-radius: 15px; } + .el-date-table td.week { + font-size: 80%; + color: #606266; } + .el-date-table th { + padding: 5px; + color: #606266; + font-weight: 400; + border-bottom: solid 1px #EBEEF5; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-month-table { + font-size: 12px; + margin: -1px; + border-collapse: collapse; } + .el-month-table td { + text-align: center; + padding: 8px 0px; + cursor: pointer; } + .el-month-table td div { + height: 48px; + padding: 6px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-month-table td.today .cell { + color: #409EFF; + font-weight: bold; } + .el-month-table td.today.start-date .cell, + .el-month-table td.today.end-date .cell { + color: #FFFFFF; } + .el-month-table td.disabled .cell { + background-color: #F5F7FA; + cursor: not-allowed; + color: #C0C4CC; } + .el-month-table td.disabled .cell:hover { + color: #C0C4CC; } + .el-month-table td .cell { + width: 60px; + height: 36px; + display: block; + line-height: 36px; + color: #606266; + margin: 0 auto; + border-radius: 18px; } + .el-month-table td .cell:hover { + color: #409EFF; } + .el-month-table td.in-range div { + background-color: #F2F6FC; } + .el-month-table td.in-range div:hover { + background-color: #F2F6FC; } + .el-month-table td.start-date div, + .el-month-table td.end-date div { + color: #FFFFFF; } + .el-month-table td.start-date .cell, + .el-month-table td.end-date .cell { + color: #FFFFFF; + background-color: #409EFF; } + .el-month-table td.start-date div { + border-top-left-radius: 24px; + border-bottom-left-radius: 24px; } + .el-month-table td.end-date div { + border-top-right-radius: 24px; + border-bottom-right-radius: 24px; } + .el-month-table td.current:not(.disabled) .cell { + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-year-table { + font-size: 12px; + margin: -1px; + border-collapse: collapse; } + .el-year-table .el-icon { + color: #303133; } + .el-year-table td { + text-align: center; + padding: 20px 3px; + cursor: pointer; } + .el-year-table td.today .cell { + color: #409EFF; + font-weight: bold; } + .el-year-table td.disabled .cell { + background-color: #F5F7FA; + cursor: not-allowed; + color: #C0C4CC; } + .el-year-table td.disabled .cell:hover { + color: #C0C4CC; } + .el-year-table td .cell { + width: 48px; + height: 32px; + display: block; + line-height: 32px; + color: #606266; + margin: 0 auto; } + .el-year-table td .cell:hover { + color: #409EFF; } + .el-year-table td.current:not(.disabled) .cell { + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-spinner.has-seconds .el-time-spinner__wrapper { + width: 33.3%; } + +.el-time-spinner__wrapper { + max-height: 190px; + overflow: auto; + display: inline-block; + width: 50%; + vertical-align: top; + position: relative; } + .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) { + padding-bottom: 15px; } + .el-time-spinner__wrapper.is-arrow { + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__list { + -webkit-transform: translateY(-32px); + transform: translateY(-32px); } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #FFFFFF; + cursor: default; } + +.el-time-spinner__arrow { + font-size: 12px; + color: #909399; + position: absolute; + left: 0; + width: 100%; + z-index: 1; + text-align: center; + height: 30px; + line-height: 30px; + cursor: pointer; } + .el-time-spinner__arrow:hover { + color: #409EFF; } + .el-time-spinner__arrow.el-icon-arrow-up { + top: 10px; } + .el-time-spinner__arrow.el-icon-arrow-down { + bottom: 10px; } + +.el-time-spinner__input.el-input { + width: 70%; } + .el-time-spinner__input.el-input .el-input__inner { + padding: 0; + text-align: center; } + +.el-time-spinner__list { + padding: 0; + margin: 0; + list-style: none; + text-align: center; } + .el-time-spinner__list::after, .el-time-spinner__list::before { + content: ''; + display: block; + width: 100%; + height: 80px; } + +.el-time-spinner__item { + height: 32px; + line-height: 32px; + font-size: 12px; + color: #606266; } + .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #F5F7FA; + cursor: pointer; } + .el-time-spinner__item.active:not(.disabled) { + color: #303133; + font-weight: bold; } + .el-time-spinner__item.disabled { + color: #C0C4CC; + cursor: not-allowed; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +.el-date-picker { + width: 322px; } + .el-date-picker.has-sidebar.has-time { + width: 434px; } + .el-date-picker.has-sidebar { + width: 438px; } + .el-date-picker.has-time .el-picker-panel__body-wrapper { + position: relative; } + .el-date-picker .el-picker-panel__content { + width: 292px; } + .el-date-picker table { + table-layout: fixed; + width: 100%; } + .el-date-picker__editor-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-picker__header { + margin: 12px; + text-align: center; } + .el-date-picker__header--bordered { + margin-bottom: 0; + padding-bottom: 12px; + border-bottom: solid 1px #EBEEF5; } + .el-date-picker__header--bordered + .el-picker-panel__content { + margin-top: 0; } + .el-date-picker__header-label { + font-size: 16px; + font-weight: 500; + padding: 0 5px; + line-height: 22px; + text-align: center; + cursor: pointer; + color: #606266; } + .el-date-picker__header-label:hover { + color: #409EFF; } + .el-date-picker__header-label.active { + color: #409EFF; } + .el-date-picker__prev-btn { + float: left; } + .el-date-picker__next-btn { + float: right; } + .el-date-picker__time-wrap { + padding: 10px; + text-align: center; } + .el-date-picker__time-label { + float: left; + cursor: pointer; + line-height: 30px; + margin-left: 10px; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-date-range-picker { + width: 646px; } + .el-date-range-picker.has-sidebar { + width: 756px; } + .el-date-range-picker table { + table-layout: fixed; + width: 100%; } + .el-date-range-picker .el-picker-panel__body { + min-width: 513px; } + .el-date-range-picker .el-picker-panel__content { + margin: 0; } + .el-date-range-picker__header { + position: relative; + text-align: center; + height: 28px; } + .el-date-range-picker__header [class*=arrow-left] { + float: left; } + .el-date-range-picker__header [class*=arrow-right] { + float: right; } + .el-date-range-picker__header div { + font-size: 16px; + font-weight: 500; + margin-right: 50px; } + .el-date-range-picker__content { + float: left; + width: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 16px; } + .el-date-range-picker__content.is-left { + border-right: 1px solid #e4e4e4; } + .el-date-range-picker__content .el-date-range-picker__header div { + margin-left: 50px; + margin-right: 50px; } + .el-date-range-picker__editors-wrap { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: table-cell; } + .el-date-range-picker__editors-wrap.is-right { + text-align: right; } + .el-date-range-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-range-picker__time-header > .el-icon-arrow-right { + font-size: 20px; + vertical-align: middle; + display: table-cell; + color: #303133; } + .el-date-range-picker__time-picker-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-range-picker__time-picker-wrap .el-picker-panel { + position: absolute; + top: 13px; + right: 0; + z-index: 1; + background: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-range-picker { + width: 354px; + overflow: visible; } + .el-time-range-picker__content { + position: relative; + text-align: center; + padding: 10px; } + .el-time-range-picker__cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 4px 7px 7px; + width: 50%; + display: inline-block; } + .el-time-range-picker__header { + margin-bottom: 5px; + text-align: center; + font-size: 14px; } + .el-time-range-picker__body { + border-radius: 2px; + border: 1px solid #E4E7ED; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-panel { + margin: 5px 0; + border: solid 1px #E4E7ED; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 2px; + position: absolute; + width: 180px; + left: 0; + z-index: 1000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .el-time-panel__content { + font-size: 0; + position: relative; + overflow: hidden; } + .el-time-panel__content::after, .el-time-panel__content::before { + content: ""; + top: 50%; + position: absolute; + margin-top: -15px; + height: 32px; + z-index: -1; + left: 0; + right: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + text-align: left; + border-top: 1px solid #E4E7ED; + border-bottom: 1px solid #E4E7ED; } + .el-time-panel__content::after { + left: 50%; + margin-left: 12%; + margin-right: 12%; } + .el-time-panel__content::before { + padding-left: 50%; + margin-right: 12%; + margin-left: 12%; } + .el-time-panel__content.has-seconds::after { + left: calc(100% / 3 * 2); } + .el-time-panel__content.has-seconds::before { + padding-left: calc(100% / 3); } + .el-time-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + height: 36px; + line-height: 25px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-time-panel__btn { + border: none; + line-height: 28px; + padding: 0 5px; + margin: 0 5px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; + color: #303133; } + .el-time-panel__btn.confirm { + font-weight: 800; + color: #409EFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +.el-date-picker { + width: 322px; } + .el-date-picker.has-sidebar.has-time { + width: 434px; } + .el-date-picker.has-sidebar { + width: 438px; } + .el-date-picker.has-time .el-picker-panel__body-wrapper { + position: relative; } + .el-date-picker .el-picker-panel__content { + width: 292px; } + .el-date-picker table { + table-layout: fixed; + width: 100%; } + .el-date-picker__editor-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-picker__header { + margin: 12px; + text-align: center; } + .el-date-picker__header--bordered { + margin-bottom: 0; + padding-bottom: 12px; + border-bottom: solid 1px #EBEEF5; } + .el-date-picker__header--bordered + .el-picker-panel__content { + margin-top: 0; } + .el-date-picker__header-label { + font-size: 16px; + font-weight: 500; + padding: 0 5px; + line-height: 22px; + text-align: center; + cursor: pointer; + color: #606266; } + .el-date-picker__header-label:hover { + color: #409EFF; } + .el-date-picker__header-label.active { + color: #409EFF; } + .el-date-picker__prev-btn { + float: left; } + .el-date-picker__next-btn { + float: right; } + .el-date-picker__time-wrap { + padding: 10px; + text-align: center; } + .el-date-picker__time-label { + float: left; + cursor: pointer; + line-height: 30px; + margin-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.time-select { + margin: 5px 0; + min-width: 0; } + +.time-select .el-picker-panel__content { + max-height: 200px; + margin: 0; } + +.time-select-item { + padding: 8px 10px; + font-size: 14px; + line-height: 20px; } + +.time-select-item.selected:not(.disabled) { + color: #409EFF; + font-weight: bold; } + +.time-select-item.disabled { + color: #E4E7ED; + cursor: not-allowed; } + +.time-select-item:hover { + background-color: #F5F7FA; + font-weight: bold; + cursor: pointer; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-spinner.has-seconds .el-time-spinner__wrapper { + width: 33.3%; } + +.el-time-spinner__wrapper { + max-height: 190px; + overflow: auto; + display: inline-block; + width: 50%; + vertical-align: top; + position: relative; } + .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) { + padding-bottom: 15px; } + .el-time-spinner__wrapper.is-arrow { + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__list { + -webkit-transform: translateY(-32px); + transform: translateY(-32px); } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #FFFFFF; + cursor: default; } + +.el-time-spinner__arrow { + font-size: 12px; + color: #909399; + position: absolute; + left: 0; + width: 100%; + z-index: 1; + text-align: center; + height: 30px; + line-height: 30px; + cursor: pointer; } + .el-time-spinner__arrow:hover { + color: #409EFF; } + .el-time-spinner__arrow.el-icon-arrow-up { + top: 10px; } + .el-time-spinner__arrow.el-icon-arrow-down { + bottom: 10px; } + +.el-time-spinner__input.el-input { + width: 70%; } + .el-time-spinner__input.el-input .el-input__inner { + padding: 0; + text-align: center; } + +.el-time-spinner__list { + padding: 0; + margin: 0; + list-style: none; + text-align: center; } + .el-time-spinner__list::after, .el-time-spinner__list::before { + content: ''; + display: block; + width: 100%; + height: 80px; } + +.el-time-spinner__item { + height: 32px; + line-height: 32px; + font-size: 12px; + color: #606266; } + .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #F5F7FA; + cursor: pointer; } + .el-time-spinner__item.active:not(.disabled) { + color: #303133; + font-weight: bold; } + .el-time-spinner__item.disabled { + color: #C0C4CC; + cursor: not-allowed; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-panel { + margin: 5px 0; + border: solid 1px #E4E7ED; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 2px; + position: absolute; + width: 180px; + left: 0; + z-index: 1000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .el-time-panel__content { + font-size: 0; + position: relative; + overflow: hidden; } + .el-time-panel__content::after, .el-time-panel__content::before { + content: ""; + top: 50%; + position: absolute; + margin-top: -15px; + height: 32px; + z-index: -1; + left: 0; + right: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + text-align: left; + border-top: 1px solid #E4E7ED; + border-bottom: 1px solid #E4E7ED; } + .el-time-panel__content::after { + left: 50%; + margin-left: 12%; + margin-right: 12%; } + .el-time-panel__content::before { + padding-left: 50%; + margin-right: 12%; + margin-left: 12%; } + .el-time-panel__content.has-seconds::after { + left: calc(100% / 3 * 2); } + .el-time-panel__content.has-seconds::before { + padding-left: calc(100% / 3); } + .el-time-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + height: 36px; + line-height: 25px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-time-panel__btn { + border: none; + line-height: 28px; + padding: 0 5px; + margin: 0 5px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; + color: #303133; } + .el-time-panel__btn.confirm { + font-weight: 800; + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-range-picker { + width: 354px; + overflow: visible; } + .el-time-range-picker__content { + position: relative; + text-align: center; + padding: 10px; } + .el-time-range-picker__cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 4px 7px 7px; + width: 50%; + display: inline-block; } + .el-time-range-picker__header { + margin-bottom: 5px; + text-align: center; + font-size: 14px; } + .el-time-range-picker__body { + border-radius: 2px; + border: 1px solid #E4E7ED; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-popover { + position: absolute; + background: #FFFFFF; + min-width: 150px; + border-radius: 4px; + border: 1px solid #EBEEF5; + padding: 12px; + z-index: 2000; + color: #606266; + line-height: 1.4; + text-align: justify; + font-size: 14px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + word-break: break-all; } + .el-popover--plain { + padding: 18px 20px; } + .el-popover__title { + color: #303133; + font-size: 16px; + line-height: 1; + margin-bottom: 12px; } + .el-popover__reference:focus:not(.focusing), .el-popover__reference:focus:hover { + outline-width: 0; } + .el-popover:focus:active, .el-popover:focus { + outline-width: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.v-modal-enter { + -webkit-animation: v-modal-in .2s ease; + animation: v-modal-in .2s ease; } + +.v-modal-leave { + -webkit-animation: v-modal-out .2s ease forwards; + animation: v-modal-out .2s ease forwards; } + +@keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +.v-modal { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.5; + background: #000000; } + +.el-popup-parent--hidden { + overflow: hidden; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-message-box { + display: inline-block; + width: 420px; + padding-bottom: 10px; + vertical-align: middle; + background-color: #FFFFFF; + border-radius: 4px; + border: 1px solid #EBEEF5; + font-size: 18px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + text-align: left; + overflow: hidden; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .el-message-box__wrapper { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + text-align: center; } + .el-message-box__wrapper::after { + content: ""; + display: inline-block; + height: 100%; + width: 0; + vertical-align: middle; } + .el-message-box__header { + position: relative; + padding: 15px; + padding-bottom: 10px; } + .el-message-box__title { + padding-left: 0; + margin-bottom: 0; + font-size: 18px; + line-height: 1; + color: #303133; } + .el-message-box__headerbtn { + position: absolute; + top: 15px; + right: 15px; + padding: 0; + border: none; + outline: none; + background: transparent; + font-size: 16px; + cursor: pointer; } + .el-message-box__headerbtn .el-message-box__close { + color: #909399; } + .el-message-box__headerbtn:focus .el-message-box__close, .el-message-box__headerbtn:hover .el-message-box__close { + color: #409EFF; } + .el-message-box__content { + padding: 10px 15px; + color: #606266; + font-size: 14px; } + .el-message-box__container { + position: relative; } + .el-message-box__input { + padding-top: 15px; } + .el-message-box__input input.invalid { + border-color: #F56C6C; } + .el-message-box__input input.invalid:focus { + border-color: #F56C6C; } + .el-message-box__status { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-size: 24px !important; } + .el-message-box__status::before { + padding-left: 1px; } + .el-message-box__status + .el-message-box__message { + padding-left: 36px; + padding-right: 12px; } + .el-message-box__status.el-icon-success { + color: #67C23A; } + .el-message-box__status.el-icon-info { + color: #909399; } + .el-message-box__status.el-icon-warning { + color: #E6A23C; } + .el-message-box__status.el-icon-error { + color: #F56C6C; } + .el-message-box__message { + margin: 0; } + .el-message-box__message p { + margin: 0; + line-height: 24px; } + .el-message-box__errormsg { + color: #F56C6C; + font-size: 12px; + min-height: 18px; + margin-top: 2px; } + .el-message-box__btns { + padding: 5px 15px 0; + text-align: right; } + .el-message-box__btns button:nth-child(2) { + margin-left: 10px; } + .el-message-box__btns-reverse { + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .el-message-box--center { + padding-bottom: 30px; } + .el-message-box--center .el-message-box__header { + padding-top: 30px; } + .el-message-box--center .el-message-box__title { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-message-box--center .el-message-box__status { + position: relative; + top: auto; + padding-right: 5px; + text-align: center; + -webkit-transform: translateY(-1px); + transform: translateY(-1px); } + .el-message-box--center .el-message-box__message { + margin-left: 0; } + .el-message-box--center .el-message-box__btns, .el-message-box--center .el-message-box__content { + text-align: center; } + .el-message-box--center .el-message-box__content { + padding-left: 27px; + padding-right: 27px; } + +.msgbox-fade-enter-active { + -webkit-animation: msgbox-fade-in .3s; + animation: msgbox-fade-in .3s; } + +.msgbox-fade-leave-active { + -webkit-animation: msgbox-fade-out .3s; + animation: msgbox-fade-out .3s; } + +@-webkit-keyframes msgbox-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes msgbox-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes msgbox-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes msgbox-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-breadcrumb { + font-size: 14px; + line-height: 1; } + .el-breadcrumb::before, + .el-breadcrumb::after { + display: table; + content: ""; } + .el-breadcrumb::after { + clear: both; } + .el-breadcrumb__separator { + margin: 0 9px; + font-weight: bold; + color: #C0C4CC; } + .el-breadcrumb__separator[class*=icon] { + margin: 0 6px; + font-weight: normal; } + .el-breadcrumb__item { + float: left; } + .el-breadcrumb__inner { + color: #606266; } + .el-breadcrumb__inner.is-link, .el-breadcrumb__inner a { + font-weight: bold; + text-decoration: none; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + color: #303133; } + .el-breadcrumb__inner.is-link:hover, .el-breadcrumb__inner a:hover { + color: #409EFF; + cursor: pointer; } + .el-breadcrumb__item:last-child .el-breadcrumb__inner, .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover, + .el-breadcrumb__item:last-child .el-breadcrumb__inner a, + .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover { + font-weight: normal; + color: #606266; + cursor: text; } + .el-breadcrumb__item:last-child .el-breadcrumb__separator { + display: none; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-form--label-left .el-form-item__label { + text-align: left; } + +.el-form--label-top .el-form-item__label { + float: none; + display: inline-block; + text-align: left; + padding: 0 0 10px 0; } + +.el-form--inline .el-form-item { + display: inline-block; + margin-right: 10px; + vertical-align: top; } + +.el-form--inline .el-form-item__label { + float: none; + display: inline-block; } + +.el-form--inline .el-form-item__content { + display: inline-block; + vertical-align: top; } + +.el-form--inline.el-form--label-top .el-form-item__content { + display: block; } + +.el-form-item { + margin-bottom: 22px; } + .el-form-item::before, + .el-form-item::after { + display: table; + content: ""; } + .el-form-item::after { + clear: both; } + .el-form-item .el-form-item { + margin-bottom: 0; } + .el-form-item .el-input__validateIcon { + display: none; } + .el-form-item--medium .el-form-item__label { + line-height: 36px; } + .el-form-item--medium .el-form-item__content { + line-height: 36px; } + .el-form-item--small .el-form-item__label { + line-height: 32px; } + .el-form-item--small .el-form-item__content { + line-height: 32px; } + .el-form-item--small.el-form-item { + margin-bottom: 18px; } + .el-form-item--small .el-form-item__error { + padding-top: 2px; } + .el-form-item--mini .el-form-item__label { + line-height: 28px; } + .el-form-item--mini .el-form-item__content { + line-height: 28px; } + .el-form-item--mini.el-form-item { + margin-bottom: 18px; } + .el-form-item--mini .el-form-item__error { + padding-top: 1px; } + .el-form-item__label-wrap { + float: left; } + .el-form-item__label-wrap .el-form-item__label { + display: inline-block; + float: none; } + .el-form-item__label { + text-align: right; + vertical-align: middle; + float: left; + font-size: 14px; + color: #606266; + line-height: 40px; + padding: 0 12px 0 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-form-item__content { + line-height: 40px; + position: relative; + font-size: 14px; } + .el-form-item__content::before, + .el-form-item__content::after { + display: table; + content: ""; } + .el-form-item__content::after { + clear: both; } + .el-form-item__content .el-input-group { + vertical-align: top; } + .el-form-item__error { + color: #F56C6C; + font-size: 12px; + line-height: 1; + padding-top: 4px; + position: absolute; + top: 100%; + left: 0; } + .el-form-item__error--inline { + position: relative; + top: auto; + left: auto; + display: inline-block; + margin-left: 10px; } + .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before, + .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap > .el-form-item__label:before { + content: '*'; + color: #F56C6C; + margin-right: 4px; } + .el-form-item.is-error .el-input__inner, .el-form-item.is-error .el-input__inner:focus, + .el-form-item.is-error .el-textarea__inner, + .el-form-item.is-error .el-textarea__inner:focus { + border-color: #F56C6C; } + .el-form-item.is-error .el-input-group__append .el-input__inner, + .el-form-item.is-error .el-input-group__prepend .el-input__inner { + border-color: transparent; } + .el-form-item.is-error .el-input__validateIcon { + color: #F56C6C; } + .el-form-item--feedback .el-input__validateIcon { + display: inline-block; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tabs__header { + padding: 0; + position: relative; + margin: 0 0 15px; } + +.el-tabs__active-bar { + position: absolute; + bottom: 0; + left: 0; + height: 2px; + background-color: #409EFF; + z-index: 1; + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + list-style: none; } + +.el-tabs__new-tab { + float: right; + border: 1px solid #d3dce6; + height: 18px; + width: 18px; + line-height: 18px; + margin: 12px 0 9px 10px; + border-radius: 3px; + text-align: center; + font-size: 12px; + color: #d3dce6; + cursor: pointer; + -webkit-transition: all .15s; + transition: all .15s; } + .el-tabs__new-tab .el-icon-plus { + -webkit-transform: scale(0.8, 0.8); + transform: scale(0.8, 0.8); } + .el-tabs__new-tab:hover { + color: #409EFF; } + +.el-tabs__nav-wrap { + overflow: hidden; + margin-bottom: -1px; + position: relative; } + .el-tabs__nav-wrap::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 2px; + background-color: #E4E7ED; + z-index: 1; } + .el-tabs__nav-wrap.is-scrollable { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-tabs__nav-scroll { + overflow: hidden; } + +.el-tabs__nav-next, .el-tabs__nav-prev { + position: absolute; + cursor: pointer; + line-height: 44px; + font-size: 12px; + color: #909399; } + +.el-tabs__nav-next { + right: 0; } + +.el-tabs__nav-prev { + left: 0; } + +.el-tabs__nav { + white-space: nowrap; + position: relative; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + float: left; + z-index: 2; } + .el-tabs__nav.is-stretch { + min-width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-tabs__nav.is-stretch > * { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + text-align: center; } + +.el-tabs__item { + padding: 0 20px; + height: 40px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: 40px; + display: inline-block; + list-style: none; + font-size: 14px; + font-weight: 500; + color: #303133; + position: relative; } + .el-tabs__item:focus, .el-tabs__item:focus:active { + outline: none; } + .el-tabs__item:focus.is-active.is-focus:not(:active) { + -webkit-box-shadow: 0 0 2px 2px #409EFF inset; + box-shadow: 0 0 2px 2px #409EFF inset; + border-radius: 3px; } + .el-tabs__item .el-icon-close { + border-radius: 50%; + text-align: center; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + margin-left: 5px; } + .el-tabs__item .el-icon-close:before { + -webkit-transform: scale(0.9); + transform: scale(0.9); + display: inline-block; } + .el-tabs__item .el-icon-close:hover { + background-color: #C0C4CC; + color: #FFFFFF; } + .el-tabs__item.is-active { + color: #409EFF; } + .el-tabs__item:hover { + color: #409EFF; + cursor: pointer; } + .el-tabs__item.is-disabled { + color: #C0C4CC; + cursor: default; } + +.el-tabs__content { + overflow: hidden; + position: relative; } + +.el-tabs--card > .el-tabs__header { + border-bottom: 1px solid #E4E7ED; } + +.el-tabs--card > .el-tabs__header .el-tabs__nav-wrap::after { + content: none; } + +.el-tabs--card > .el-tabs__header .el-tabs__nav { + border: 1px solid #E4E7ED; + border-bottom: none; + border-radius: 4px 4px 0 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-tabs--card > .el-tabs__header .el-tabs__active-bar { + display: none; } + +.el-tabs--card > .el-tabs__header .el-tabs__item .el-icon-close { + position: relative; + font-size: 12px; + width: 0; + height: 14px; + vertical-align: middle; + line-height: 15px; + overflow: hidden; + top: -1px; + right: -2px; + -webkit-transform-origin: 100% 50%; + transform-origin: 100% 50%; } + +.el-tabs--card > .el-tabs__header .el-tabs__item { + border-bottom: 1px solid transparent; + border-left: 1px solid #E4E7ED; + -webkit-transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-tabs--card > .el-tabs__header .el-tabs__item:first-child { + border-left: none; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover { + padding-left: 13px; + padding-right: 13px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close { + width: 14px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active { + border-bottom-color: #FFFFFF; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable { + padding-left: 20px; + padding-right: 20px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close { + width: 14px; } + +.el-tabs--border-card { + background: #FFFFFF; + border: 1px solid #DCDFE6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); } + .el-tabs--border-card > .el-tabs__content { + padding: 15px; } + .el-tabs--border-card > .el-tabs__header { + background-color: #F5F7FA; + border-bottom: 1px solid #E4E7ED; + margin: 0; } + .el-tabs--border-card > .el-tabs__header .el-tabs__nav-wrap::after { + content: none; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item { + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + border: 1px solid transparent; + margin-top: -1px; + color: #909399; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item:first-child { + margin-left: -1px; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item + .el-tabs__item { + margin-left: -1px; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active { + color: #409EFF; + background-color: #FFFFFF; + border-right-color: #DCDFE6; + border-left-color: #DCDFE6; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item:not(.is-disabled):hover { + color: #409EFF; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-disabled { + color: #C0C4CC; } + .el-tabs--border-card > .el-tabs__header .is-scrollable .el-tabs__item:first-child { + margin-left: 0; } + +.el-tabs--top .el-tabs__item.is-top:nth-child(2), +.el-tabs--top .el-tabs__item.is-bottom:nth-child(2), .el-tabs--bottom .el-tabs__item.is-top:nth-child(2), +.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2) { + padding-left: 0; } + +.el-tabs--top .el-tabs__item.is-top:last-child, +.el-tabs--top .el-tabs__item.is-bottom:last-child, .el-tabs--bottom .el-tabs__item.is-top:last-child, +.el-tabs--bottom .el-tabs__item.is-bottom:last-child { + padding-right: 0; } + +.el-tabs--top.el-tabs--border-card > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--top.el-tabs--card > .el-tabs__header .el-tabs__item:nth-child(2), +.el-tabs--top .el-tabs--left > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--top .el-tabs--right > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom.el-tabs--border-card > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom.el-tabs--card > .el-tabs__header .el-tabs__item:nth-child(2), +.el-tabs--bottom .el-tabs--left > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom .el-tabs--right > .el-tabs__header .el-tabs__item:nth-child(2) { + padding-left: 20px; } + +.el-tabs--top.el-tabs--border-card > .el-tabs__header .el-tabs__item:last-child, .el-tabs--top.el-tabs--card > .el-tabs__header .el-tabs__item:last-child, +.el-tabs--top .el-tabs--left > .el-tabs__header .el-tabs__item:last-child, .el-tabs--top .el-tabs--right > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom.el-tabs--border-card > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom.el-tabs--card > .el-tabs__header .el-tabs__item:last-child, +.el-tabs--bottom .el-tabs--left > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom .el-tabs--right > .el-tabs__header .el-tabs__item:last-child { + padding-right: 20px; } + +.el-tabs--bottom .el-tabs__header.is-bottom { + margin-bottom: 0; + margin-top: 10px; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom { + border-bottom: 0; + border-top: 1px solid #DCDFE6; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom { + margin-top: -1px; + margin-bottom: 0; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active) { + border: 1px solid transparent; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom { + margin: 0 -1px -1px -1px; } + +.el-tabs--left, .el-tabs--right { + overflow: hidden; } + .el-tabs--left .el-tabs__header.is-left, + .el-tabs--left .el-tabs__header.is-right, + .el-tabs--left .el-tabs__nav-wrap.is-left, + .el-tabs--left .el-tabs__nav-wrap.is-right, + .el-tabs--left .el-tabs__nav-scroll, .el-tabs--right .el-tabs__header.is-left, + .el-tabs--right .el-tabs__header.is-right, + .el-tabs--right .el-tabs__nav-wrap.is-left, + .el-tabs--right .el-tabs__nav-wrap.is-right, + .el-tabs--right .el-tabs__nav-scroll { + height: 100%; } + .el-tabs--left .el-tabs__active-bar.is-left, + .el-tabs--left .el-tabs__active-bar.is-right, .el-tabs--right .el-tabs__active-bar.is-left, + .el-tabs--right .el-tabs__active-bar.is-right { + top: 0; + bottom: auto; + width: 2px; + height: auto; } + .el-tabs--left .el-tabs__nav-wrap.is-left, + .el-tabs--left .el-tabs__nav-wrap.is-right, .el-tabs--right .el-tabs__nav-wrap.is-left, + .el-tabs--right .el-tabs__nav-wrap.is-right { + margin-bottom: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next { + height: 30px; + line-height: 30px; + width: 100%; + text-align: center; + cursor: pointer; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i, + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i, + .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i { + -webkit-transform: rotateZ(90deg); + transform: rotateZ(90deg); } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev { + left: auto; + top: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next { + right: auto; + bottom: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable, + .el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable, .el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable, + .el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable { + padding: 30px 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left::after, + .el-tabs--left .el-tabs__nav-wrap.is-right::after, .el-tabs--right .el-tabs__nav-wrap.is-left::after, + .el-tabs--right .el-tabs__nav-wrap.is-right::after { + height: 100%; + width: 2px; + bottom: auto; + top: 0; } + .el-tabs--left .el-tabs__nav.is-left, + .el-tabs--left .el-tabs__nav.is-right, .el-tabs--right .el-tabs__nav.is-left, + .el-tabs--right .el-tabs__nav.is-right { + float: none; } + .el-tabs--left .el-tabs__item.is-left, + .el-tabs--left .el-tabs__item.is-right, .el-tabs--right .el-tabs__item.is-left, + .el-tabs--right .el-tabs__item.is-right { + display: block; } + +.el-tabs--left .el-tabs__header.is-left { + float: left; + margin-bottom: 0; + margin-right: 10px; } + +.el-tabs--left .el-tabs__nav-wrap.is-left { + margin-right: -1px; } + .el-tabs--left .el-tabs__nav-wrap.is-left::after { + left: auto; + right: 0; } + +.el-tabs--left .el-tabs__active-bar.is-left { + right: 0; + left: auto; } + +.el-tabs--left .el-tabs__item.is-left { + text-align: right; } + +.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left { + display: none; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left { + border-left: none; + border-right: 1px solid #E4E7ED; + border-bottom: none; + border-top: 1px solid #E4E7ED; + text-align: left; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child { + border-right: 1px solid #E4E7ED; + border-top: none; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active { + border: 1px solid #E4E7ED; + border-right-color: #fff; + border-left: none; + border-bottom: none; } + .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child { + border-top: none; } + .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child { + border-bottom: none; } + +.el-tabs--left.el-tabs--card .el-tabs__nav { + border-radius: 4px 0 0 4px; + border-bottom: 1px solid #E4E7ED; + border-right: none; } + +.el-tabs--left.el-tabs--card .el-tabs__new-tab { + float: none; } + +.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left { + border-right: 1px solid #dfe4ed; } + +.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left { + border: 1px solid transparent; + margin: -1px 0 -1px -1px; } + .el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active { + border-color: transparent; + border-top-color: #d1dbe5; + border-bottom-color: #d1dbe5; } + +.el-tabs--right .el-tabs__header.is-right { + float: right; + margin-bottom: 0; + margin-left: 10px; } + +.el-tabs--right .el-tabs__nav-wrap.is-right { + margin-left: -1px; } + .el-tabs--right .el-tabs__nav-wrap.is-right::after { + left: 0; + right: auto; } + +.el-tabs--right .el-tabs__active-bar.is-right { + left: 0; } + +.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right { + display: none; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right { + border-bottom: none; + border-top: 1px solid #E4E7ED; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child { + border-left: 1px solid #E4E7ED; + border-top: none; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active { + border: 1px solid #E4E7ED; + border-left-color: #fff; + border-right: none; + border-bottom: none; } + .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child { + border-top: none; } + .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child { + border-bottom: none; } + +.el-tabs--right.el-tabs--card .el-tabs__nav { + border-radius: 0 4px 4px 0; + border-bottom: 1px solid #E4E7ED; + border-left: none; } + +.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right { + border-left: 1px solid #dfe4ed; } + +.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right { + border: 1px solid transparent; + margin: -1px -1px -1px 0; } + .el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active { + border-color: transparent; + border-top-color: #d1dbe5; + border-bottom-color: #d1dbe5; } + +.slideInRight-transition, +.slideInLeft-transition { + display: inline-block; } + +.slideInRight-enter { + -webkit-animation: slideInRight-enter .3s; + animation: slideInRight-enter .3s; } + +.slideInRight-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInRight-leave .3s; + animation: slideInRight-leave .3s; } + +.slideInLeft-enter { + -webkit-animation: slideInLeft-enter .3s; + animation: slideInLeft-enter .3s; } + +.slideInLeft-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInLeft-leave .3s; + animation: slideInLeft-leave .3s; } + +@-webkit-keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@-webkit-keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; } } + +@keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; } } + +@-webkit-keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@-webkit-keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; } } + +@keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +.el-tree { + position: relative; + cursor: default; + background: #FFFFFF; + color: #606266; } + .el-tree__empty-block { + position: relative; + min-height: 60px; + text-align: center; + width: 100%; + height: 100%; } + .el-tree__empty-text { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + color: #909399; + font-size: 14px; } + .el-tree__drop-indicator { + position: absolute; + left: 0; + right: 0; + height: 1px; + background-color: #409EFF; } + +.el-tree-node { + white-space: nowrap; + outline: none; } + .el-tree-node:focus { + /* focus */ } + .el-tree-node:focus > .el-tree-node__content { + background-color: #F5F7FA; } + .el-tree-node.is-drop-inner > .el-tree-node__content .el-tree-node__label { + background-color: #409EFF; + color: #fff; } + .el-tree-node__content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 26px; + cursor: pointer; } + .el-tree-node__content > .el-tree-node__expand-icon { + padding: 6px; } + .el-tree-node__content > label.el-checkbox { + margin-right: 8px; } + .el-tree-node__content:hover { + background-color: #F5F7FA; } + .el-tree.is-dragging .el-tree-node__content { + cursor: move; } + .el-tree.is-dragging .el-tree-node__content * { + pointer-events: none; } + .el-tree.is-dragging.is-drop-not-allow .el-tree-node__content { + cursor: not-allowed; } + .el-tree-node__expand-icon { + cursor: pointer; + color: #C0C4CC; + font-size: 12px; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: -webkit-transform 0.3s ease-in-out; + transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out; } + .el-tree-node__expand-icon.expanded { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-tree-node__expand-icon.is-leaf { + color: transparent; + cursor: default; } + .el-tree-node__label { + font-size: 14px; } + .el-tree-node__loading-icon { + margin-right: 8px; + font-size: 14px; + color: #C0C4CC; } + .el-tree-node > .el-tree-node__children { + overflow: hidden; + background-color: transparent; } + .el-tree-node.is-expanded > .el-tree-node__children { + display: block; } + +.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content { + background-color: #f0f7ff; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-alert { + width: 100%; + padding: 8px 16px; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + position: relative; + background-color: #FFFFFF; + overflow: hidden; + opacity: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-transition: opacity .2s; + transition: opacity .2s; } + .el-alert.is-light .el-alert__closebtn { + color: #C0C4CC; } + .el-alert.is-dark .el-alert__closebtn { + color: #FFFFFF; } + .el-alert.is-dark .el-alert__description { + color: #FFFFFF; } + .el-alert.is-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-alert--success.is-light { + background-color: #f0f9eb; + color: #67C23A; } + .el-alert--success.is-light .el-alert__description { + color: #67C23A; } + .el-alert--success.is-dark { + background-color: #67C23A; + color: #FFFFFF; } + .el-alert--info.is-light { + background-color: #f4f4f5; + color: #909399; } + .el-alert--info.is-dark { + background-color: #909399; + color: #FFFFFF; } + .el-alert--info .el-alert__description { + color: #909399; } + .el-alert--warning.is-light { + background-color: #fdf6ec; + color: #E6A23C; } + .el-alert--warning.is-light .el-alert__description { + color: #E6A23C; } + .el-alert--warning.is-dark { + background-color: #E6A23C; + color: #FFFFFF; } + .el-alert--error.is-light { + background-color: #fef0f0; + color: #F56C6C; } + .el-alert--error.is-light .el-alert__description { + color: #F56C6C; } + .el-alert--error.is-dark { + background-color: #F56C6C; + color: #FFFFFF; } + .el-alert__content { + display: table-cell; + padding: 0 8px; } + .el-alert__icon { + font-size: 16px; + width: 16px; } + .el-alert__icon.is-big { + font-size: 28px; + width: 28px; } + .el-alert__title { + font-size: 13px; + line-height: 18px; } + .el-alert__title.is-bold { + font-weight: bold; } + .el-alert .el-alert__description { + font-size: 12px; + margin: 5px 0 0 0; } + .el-alert__closebtn { + font-size: 12px; + opacity: 1; + position: absolute; + top: 12px; + right: 15px; + cursor: pointer; } + .el-alert__closebtn.is-customed { + font-style: normal; + font-size: 13px; + top: 9px; } + +.el-alert-fade-enter, +.el-alert-fade-leave-active { + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-notification { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 330px; + padding: 14px 26px 14px 13px; + border-radius: 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #EBEEF5; + position: fixed; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-transition: opacity .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + transition: opacity .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + transition: opacity .3s, transform .3s, left .3s, right .3s, top 0.4s, bottom .3s; + transition: opacity .3s, transform .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + overflow: hidden; } + .el-notification.right { + right: 16px; } + .el-notification.left { + left: 16px; } + .el-notification__group { + margin-left: 13px; + margin-right: 8px; } + .el-notification__title { + font-weight: bold; + font-size: 16px; + color: #303133; + margin: 0; } + .el-notification__content { + font-size: 14px; + line-height: 21px; + margin: 6px 0 0 0; + color: #606266; + text-align: justify; } + .el-notification__content p { + margin: 0; } + .el-notification__icon { + height: 24px; + width: 24px; + font-size: 24px; } + .el-notification__closeBtn { + position: absolute; + top: 18px; + right: 15px; + cursor: pointer; + color: #909399; + font-size: 16px; } + .el-notification__closeBtn:hover { + color: #606266; } + .el-notification .el-icon-success { + color: #67C23A; } + .el-notification .el-icon-error { + color: #F56C6C; } + .el-notification .el-icon-info { + color: #909399; } + .el-notification .el-icon-warning { + color: #E6A23C; } + +.el-notification-fade-enter.right { + right: 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + +.el-notification-fade-enter.left { + left: 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + +.el-notification-fade-leave-active { + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-input-number { + position: relative; + display: inline-block; + width: 180px; + line-height: 38px; } + .el-input-number .el-input { + display: block; } + .el-input-number .el-input__inner { + -webkit-appearance: none; + padding-left: 50px; + padding-right: 50px; + text-align: center; } + .el-input-number__increase, .el-input-number__decrease { + position: absolute; + z-index: 1; + top: 1px; + width: 40px; + height: auto; + text-align: center; + background: #F5F7FA; + color: #606266; + cursor: pointer; + font-size: 13px; } + .el-input-number__increase:hover, .el-input-number__decrease:hover { + color: #409EFF; } + .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled), .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) { + border-color: #409EFF; } + .el-input-number__increase.is-disabled, .el-input-number__decrease.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-input-number__increase { + right: 1px; + border-radius: 0 4px 4px 0; + border-left: 1px solid #DCDFE6; } + .el-input-number__decrease { + left: 1px; + border-radius: 4px 0 0 4px; + border-right: 1px solid #DCDFE6; } + .el-input-number.is-disabled .el-input-number__increase, .el-input-number.is-disabled .el-input-number__decrease { + border-color: #E4E7ED; + color: #E4E7ED; } + .el-input-number.is-disabled .el-input-number__increase:hover, .el-input-number.is-disabled .el-input-number__decrease:hover { + color: #E4E7ED; + cursor: not-allowed; } + .el-input-number--medium { + width: 200px; + line-height: 34px; } + .el-input-number--medium .el-input-number__increase, .el-input-number--medium .el-input-number__decrease { + width: 36px; + font-size: 14px; } + .el-input-number--medium .el-input__inner { + padding-left: 43px; + padding-right: 43px; } + .el-input-number--small { + width: 130px; + line-height: 30px; } + .el-input-number--small .el-input-number__increase, .el-input-number--small .el-input-number__decrease { + width: 32px; + font-size: 13px; } + .el-input-number--small .el-input-number__increase [class*=el-icon], .el-input-number--small .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.9); + transform: scale(0.9); } + .el-input-number--small .el-input__inner { + padding-left: 39px; + padding-right: 39px; } + .el-input-number--mini { + width: 130px; + line-height: 26px; } + .el-input-number--mini .el-input-number__increase, .el-input-number--mini .el-input-number__decrease { + width: 28px; + font-size: 12px; } + .el-input-number--mini .el-input-number__increase [class*=el-icon], .el-input-number--mini .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number--mini .el-input__inner { + padding-left: 35px; + padding-right: 35px; } + .el-input-number.is-without-controls .el-input__inner { + padding-left: 15px; + padding-right: 15px; } + .el-input-number.is-controls-right .el-input__inner { + padding-left: 15px; + padding-right: 50px; } + .el-input-number.is-controls-right .el-input-number__increase, .el-input-number.is-controls-right .el-input-number__decrease { + height: auto; + line-height: 19px; } + .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon], .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number.is-controls-right .el-input-number__increase { + border-radius: 0 4px 0 0; + border-bottom: 1px solid #DCDFE6; } + .el-input-number.is-controls-right .el-input-number__decrease { + right: 1px; + bottom: 1px; + top: auto; + left: auto; + border-right: none; + border-left: 1px solid #DCDFE6; + border-radius: 0 0 4px 0; } + .el-input-number.is-controls-right[class*=medium] [class*=increase], .el-input-number.is-controls-right[class*=medium] [class*=decrease] { + line-height: 17px; } + .el-input-number.is-controls-right[class*=small] [class*=increase], .el-input-number.is-controls-right[class*=small] [class*=decrease] { + line-height: 15px; } + .el-input-number.is-controls-right[class*=mini] [class*=increase], .el-input-number.is-controls-right[class*=mini] [class*=decrease] { + line-height: 13px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-slider::before, +.el-slider::after { + display: table; + content: ""; } + +.el-slider::after { + clear: both; } + +.el-slider__runway { + width: 100%; + height: 6px; + margin: 16px 0; + background-color: #E4E7ED; + border-radius: 3px; + position: relative; + cursor: pointer; + vertical-align: middle; } + .el-slider__runway.show-input { + margin-right: 160px; + width: auto; } + .el-slider__runway.disabled { + cursor: default; } + .el-slider__runway.disabled .el-slider__bar { + background-color: #C0C4CC; } + .el-slider__runway.disabled .el-slider__button { + border-color: #C0C4CC; } + .el-slider__runway.disabled .el-slider__button-wrapper:hover, .el-slider__runway.disabled .el-slider__button-wrapper.hover { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button-wrapper.dragging { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button:hover, .el-slider__runway.disabled .el-slider__button.hover, .el-slider__runway.disabled .el-slider__button.dragging { + -webkit-transform: scale(1); + transform: scale(1); } + .el-slider__runway.disabled .el-slider__button:hover, .el-slider__runway.disabled .el-slider__button.hover { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button.dragging { + cursor: not-allowed; } + +.el-slider__input { + float: right; + margin-top: 3px; + width: 130px; } + .el-slider__input.el-input-number--mini { + margin-top: 5px; } + .el-slider__input.el-input-number--medium { + margin-top: 0; } + .el-slider__input.el-input-number--large { + margin-top: -2px; } + +.el-slider__bar { + height: 6px; + background-color: #409EFF; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + position: absolute; } + +.el-slider__button-wrapper { + height: 36px; + width: 36px; + position: absolute; + z-index: 1001; + top: -15px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + background-color: transparent; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + line-height: normal; } + .el-slider__button-wrapper::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-slider__button-wrapper .el-tooltip { + vertical-align: middle; + display: inline-block; } + .el-slider__button-wrapper:hover, .el-slider__button-wrapper.hover { + cursor: -webkit-grab; + cursor: grab; } + .el-slider__button-wrapper.dragging { + cursor: -webkit-grabbing; + cursor: grabbing; } + +.el-slider__button { + width: 16px; + height: 16px; + border: solid 2px #409EFF; + background-color: #FFFFFF; + border-radius: 50%; + -webkit-transition: .2s; + transition: .2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .el-slider__button:hover, .el-slider__button.hover, .el-slider__button.dragging { + -webkit-transform: scale(1.2); + transform: scale(1.2); } + .el-slider__button:hover, .el-slider__button.hover { + cursor: -webkit-grab; + cursor: grab; } + .el-slider__button.dragging { + cursor: -webkit-grabbing; + cursor: grabbing; } + +.el-slider__stop { + position: absolute; + height: 6px; + width: 6px; + border-radius: 100%; + background-color: #FFFFFF; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + +.el-slider__marks { + top: 0; + left: 12px; + width: 18px; + height: 100%; } + .el-slider__marks-text { + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + font-size: 14px; + color: #909399; + margin-top: 15px; } + +.el-slider.is-vertical { + position: relative; } + .el-slider.is-vertical .el-slider__runway { + width: 6px; + height: 100%; + margin: 0 16px; } + .el-slider.is-vertical .el-slider__bar { + width: 6px; + height: auto; + border-radius: 0 0 3px 3px; } + .el-slider.is-vertical .el-slider__button-wrapper { + top: auto; + left: -15px; + -webkit-transform: translateY(50%); + transform: translateY(50%); } + .el-slider.is-vertical .el-slider__stop { + -webkit-transform: translateY(50%); + transform: translateY(50%); } + .el-slider.is-vertical.el-slider--with-input { + padding-bottom: 58px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input { + overflow: visible; + float: none; + position: absolute; + bottom: 22px; + width: 36px; + margin-top: 15px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner { + text-align: center; + padding-left: 5px; + padding-right: 5px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase { + top: 32px; + margin-top: -1px; + border: 1px solid #DCDFE6; + line-height: 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease { + width: 18px; + right: 18px; + border-bottom-left-radius: 4px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase { + width: 19px; + border-bottom-right-radius: 4px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase ~ .el-input .el-input__inner { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase { + border-color: #C0C4CC; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase { + border-color: #409EFF; } + .el-slider.is-vertical .el-slider__marks-text { + margin-top: 0; + left: 15px; + -webkit-transform: translateY(50%); + transform: translateY(50%); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-loading-parent--relative { + position: relative !important; } + +.el-loading-parent--hidden { + overflow: hidden !important; } + +.el-loading-mask { + position: absolute; + z-index: 2000; + background-color: rgba(255, 255, 255, 0.9); + margin: 0; + top: 0; + right: 0; + bottom: 0; + left: 0; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; } + .el-loading-mask.is-fullscreen { + position: fixed; } + .el-loading-mask.is-fullscreen .el-loading-spinner { + margin-top: -25px; } + .el-loading-mask.is-fullscreen .el-loading-spinner .circular { + height: 50px; + width: 50px; } + +.el-loading-spinner { + top: 50%; + margin-top: -21px; + width: 100%; + text-align: center; + position: absolute; } + .el-loading-spinner .el-loading-text { + color: #409EFF; + margin: 3px 0; + font-size: 14px; } + .el-loading-spinner .circular { + height: 42px; + width: 42px; + -webkit-animation: loading-rotate 2s linear infinite; + animation: loading-rotate 2s linear infinite; } + .el-loading-spinner .path { + -webkit-animation: loading-dash 1.5s ease-in-out infinite; + animation: loading-dash 1.5s ease-in-out infinite; + stroke-dasharray: 90, 150; + stroke-dashoffset: 0; + stroke-width: 2; + stroke: #409EFF; + stroke-linecap: round; } + .el-loading-spinner i { + color: #409EFF; } + +.el-loading-fade-enter, +.el-loading-fade-leave-active { + opacity: 0; } + +@-webkit-keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-webkit-keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; } } + +@keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; } } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-row { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-row::before, + .el-row::after { + display: table; + content: ""; } + .el-row::after { + clear: both; } + .el-row--flex { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-row--flex:before, .el-row--flex:after { + display: none; } + .el-row--flex.is-justify-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-row--flex.is-justify-end { + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; } + .el-row--flex.is-justify-space-between { + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; } + .el-row--flex.is-justify-space-around { + -ms-flex-pack: distribute; + justify-content: space-around; } + .el-row--flex.is-align-middle { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-row--flex.is-align-bottom { + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +[class*="el-col-"] { + float: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-col-0 { + display: none; } + +.el-col-0 { + width: 0%; } + +.el-col-offset-0 { + margin-left: 0%; } + +.el-col-pull-0 { + position: relative; + right: 0%; } + +.el-col-push-0 { + position: relative; + left: 0%; } + +.el-col-1 { + width: 4.16667%; } + +.el-col-offset-1 { + margin-left: 4.16667%; } + +.el-col-pull-1 { + position: relative; + right: 4.16667%; } + +.el-col-push-1 { + position: relative; + left: 4.16667%; } + +.el-col-2 { + width: 8.33333%; } + +.el-col-offset-2 { + margin-left: 8.33333%; } + +.el-col-pull-2 { + position: relative; + right: 8.33333%; } + +.el-col-push-2 { + position: relative; + left: 8.33333%; } + +.el-col-3 { + width: 12.5%; } + +.el-col-offset-3 { + margin-left: 12.5%; } + +.el-col-pull-3 { + position: relative; + right: 12.5%; } + +.el-col-push-3 { + position: relative; + left: 12.5%; } + +.el-col-4 { + width: 16.66667%; } + +.el-col-offset-4 { + margin-left: 16.66667%; } + +.el-col-pull-4 { + position: relative; + right: 16.66667%; } + +.el-col-push-4 { + position: relative; + left: 16.66667%; } + +.el-col-5 { + width: 20.83333%; } + +.el-col-offset-5 { + margin-left: 20.83333%; } + +.el-col-pull-5 { + position: relative; + right: 20.83333%; } + +.el-col-push-5 { + position: relative; + left: 20.83333%; } + +.el-col-6 { + width: 25%; } + +.el-col-offset-6 { + margin-left: 25%; } + +.el-col-pull-6 { + position: relative; + right: 25%; } + +.el-col-push-6 { + position: relative; + left: 25%; } + +.el-col-7 { + width: 29.16667%; } + +.el-col-offset-7 { + margin-left: 29.16667%; } + +.el-col-pull-7 { + position: relative; + right: 29.16667%; } + +.el-col-push-7 { + position: relative; + left: 29.16667%; } + +.el-col-8 { + width: 33.33333%; } + +.el-col-offset-8 { + margin-left: 33.33333%; } + +.el-col-pull-8 { + position: relative; + right: 33.33333%; } + +.el-col-push-8 { + position: relative; + left: 33.33333%; } + +.el-col-9 { + width: 37.5%; } + +.el-col-offset-9 { + margin-left: 37.5%; } + +.el-col-pull-9 { + position: relative; + right: 37.5%; } + +.el-col-push-9 { + position: relative; + left: 37.5%; } + +.el-col-10 { + width: 41.66667%; } + +.el-col-offset-10 { + margin-left: 41.66667%; } + +.el-col-pull-10 { + position: relative; + right: 41.66667%; } + +.el-col-push-10 { + position: relative; + left: 41.66667%; } + +.el-col-11 { + width: 45.83333%; } + +.el-col-offset-11 { + margin-left: 45.83333%; } + +.el-col-pull-11 { + position: relative; + right: 45.83333%; } + +.el-col-push-11 { + position: relative; + left: 45.83333%; } + +.el-col-12 { + width: 50%; } + +.el-col-offset-12 { + margin-left: 50%; } + +.el-col-pull-12 { + position: relative; + right: 50%; } + +.el-col-push-12 { + position: relative; + left: 50%; } + +.el-col-13 { + width: 54.16667%; } + +.el-col-offset-13 { + margin-left: 54.16667%; } + +.el-col-pull-13 { + position: relative; + right: 54.16667%; } + +.el-col-push-13 { + position: relative; + left: 54.16667%; } + +.el-col-14 { + width: 58.33333%; } + +.el-col-offset-14 { + margin-left: 58.33333%; } + +.el-col-pull-14 { + position: relative; + right: 58.33333%; } + +.el-col-push-14 { + position: relative; + left: 58.33333%; } + +.el-col-15 { + width: 62.5%; } + +.el-col-offset-15 { + margin-left: 62.5%; } + +.el-col-pull-15 { + position: relative; + right: 62.5%; } + +.el-col-push-15 { + position: relative; + left: 62.5%; } + +.el-col-16 { + width: 66.66667%; } + +.el-col-offset-16 { + margin-left: 66.66667%; } + +.el-col-pull-16 { + position: relative; + right: 66.66667%; } + +.el-col-push-16 { + position: relative; + left: 66.66667%; } + +.el-col-17 { + width: 70.83333%; } + +.el-col-offset-17 { + margin-left: 70.83333%; } + +.el-col-pull-17 { + position: relative; + right: 70.83333%; } + +.el-col-push-17 { + position: relative; + left: 70.83333%; } + +.el-col-18 { + width: 75%; } + +.el-col-offset-18 { + margin-left: 75%; } + +.el-col-pull-18 { + position: relative; + right: 75%; } + +.el-col-push-18 { + position: relative; + left: 75%; } + +.el-col-19 { + width: 79.16667%; } + +.el-col-offset-19 { + margin-left: 79.16667%; } + +.el-col-pull-19 { + position: relative; + right: 79.16667%; } + +.el-col-push-19 { + position: relative; + left: 79.16667%; } + +.el-col-20 { + width: 83.33333%; } + +.el-col-offset-20 { + margin-left: 83.33333%; } + +.el-col-pull-20 { + position: relative; + right: 83.33333%; } + +.el-col-push-20 { + position: relative; + left: 83.33333%; } + +.el-col-21 { + width: 87.5%; } + +.el-col-offset-21 { + margin-left: 87.5%; } + +.el-col-pull-21 { + position: relative; + right: 87.5%; } + +.el-col-push-21 { + position: relative; + left: 87.5%; } + +.el-col-22 { + width: 91.66667%; } + +.el-col-offset-22 { + margin-left: 91.66667%; } + +.el-col-pull-22 { + position: relative; + right: 91.66667%; } + +.el-col-push-22 { + position: relative; + left: 91.66667%; } + +.el-col-23 { + width: 95.83333%; } + +.el-col-offset-23 { + margin-left: 95.83333%; } + +.el-col-pull-23 { + position: relative; + right: 95.83333%; } + +.el-col-push-23 { + position: relative; + left: 95.83333%; } + +.el-col-24 { + width: 100%; } + +.el-col-offset-24 { + margin-left: 100%; } + +.el-col-pull-24 { + position: relative; + right: 100%; } + +.el-col-push-24 { + position: relative; + left: 100%; } + +@media only screen and (max-width: 767px) { + .el-col-xs-0 { + display: none; } + .el-col-xs-0 { + width: 0%; } + .el-col-xs-offset-0 { + margin-left: 0%; } + .el-col-xs-pull-0 { + position: relative; + right: 0%; } + .el-col-xs-push-0 { + position: relative; + left: 0%; } + .el-col-xs-1 { + width: 4.16667%; } + .el-col-xs-offset-1 { + margin-left: 4.16667%; } + .el-col-xs-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-xs-push-1 { + position: relative; + left: 4.16667%; } + .el-col-xs-2 { + width: 8.33333%; } + .el-col-xs-offset-2 { + margin-left: 8.33333%; } + .el-col-xs-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-xs-push-2 { + position: relative; + left: 8.33333%; } + .el-col-xs-3 { + width: 12.5%; } + .el-col-xs-offset-3 { + margin-left: 12.5%; } + .el-col-xs-pull-3 { + position: relative; + right: 12.5%; } + .el-col-xs-push-3 { + position: relative; + left: 12.5%; } + .el-col-xs-4 { + width: 16.66667%; } + .el-col-xs-offset-4 { + margin-left: 16.66667%; } + .el-col-xs-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-xs-push-4 { + position: relative; + left: 16.66667%; } + .el-col-xs-5 { + width: 20.83333%; } + .el-col-xs-offset-5 { + margin-left: 20.83333%; } + .el-col-xs-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-xs-push-5 { + position: relative; + left: 20.83333%; } + .el-col-xs-6 { + width: 25%; } + .el-col-xs-offset-6 { + margin-left: 25%; } + .el-col-xs-pull-6 { + position: relative; + right: 25%; } + .el-col-xs-push-6 { + position: relative; + left: 25%; } + .el-col-xs-7 { + width: 29.16667%; } + .el-col-xs-offset-7 { + margin-left: 29.16667%; } + .el-col-xs-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-xs-push-7 { + position: relative; + left: 29.16667%; } + .el-col-xs-8 { + width: 33.33333%; } + .el-col-xs-offset-8 { + margin-left: 33.33333%; } + .el-col-xs-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-xs-push-8 { + position: relative; + left: 33.33333%; } + .el-col-xs-9 { + width: 37.5%; } + .el-col-xs-offset-9 { + margin-left: 37.5%; } + .el-col-xs-pull-9 { + position: relative; + right: 37.5%; } + .el-col-xs-push-9 { + position: relative; + left: 37.5%; } + .el-col-xs-10 { + width: 41.66667%; } + .el-col-xs-offset-10 { + margin-left: 41.66667%; } + .el-col-xs-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-xs-push-10 { + position: relative; + left: 41.66667%; } + .el-col-xs-11 { + width: 45.83333%; } + .el-col-xs-offset-11 { + margin-left: 45.83333%; } + .el-col-xs-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-xs-push-11 { + position: relative; + left: 45.83333%; } + .el-col-xs-12 { + width: 50%; } + .el-col-xs-offset-12 { + margin-left: 50%; } + .el-col-xs-pull-12 { + position: relative; + right: 50%; } + .el-col-xs-push-12 { + position: relative; + left: 50%; } + .el-col-xs-13 { + width: 54.16667%; } + .el-col-xs-offset-13 { + margin-left: 54.16667%; } + .el-col-xs-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-xs-push-13 { + position: relative; + left: 54.16667%; } + .el-col-xs-14 { + width: 58.33333%; } + .el-col-xs-offset-14 { + margin-left: 58.33333%; } + .el-col-xs-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-xs-push-14 { + position: relative; + left: 58.33333%; } + .el-col-xs-15 { + width: 62.5%; } + .el-col-xs-offset-15 { + margin-left: 62.5%; } + .el-col-xs-pull-15 { + position: relative; + right: 62.5%; } + .el-col-xs-push-15 { + position: relative; + left: 62.5%; } + .el-col-xs-16 { + width: 66.66667%; } + .el-col-xs-offset-16 { + margin-left: 66.66667%; } + .el-col-xs-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-xs-push-16 { + position: relative; + left: 66.66667%; } + .el-col-xs-17 { + width: 70.83333%; } + .el-col-xs-offset-17 { + margin-left: 70.83333%; } + .el-col-xs-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-xs-push-17 { + position: relative; + left: 70.83333%; } + .el-col-xs-18 { + width: 75%; } + .el-col-xs-offset-18 { + margin-left: 75%; } + .el-col-xs-pull-18 { + position: relative; + right: 75%; } + .el-col-xs-push-18 { + position: relative; + left: 75%; } + .el-col-xs-19 { + width: 79.16667%; } + .el-col-xs-offset-19 { + margin-left: 79.16667%; } + .el-col-xs-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-xs-push-19 { + position: relative; + left: 79.16667%; } + .el-col-xs-20 { + width: 83.33333%; } + .el-col-xs-offset-20 { + margin-left: 83.33333%; } + .el-col-xs-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-xs-push-20 { + position: relative; + left: 83.33333%; } + .el-col-xs-21 { + width: 87.5%; } + .el-col-xs-offset-21 { + margin-left: 87.5%; } + .el-col-xs-pull-21 { + position: relative; + right: 87.5%; } + .el-col-xs-push-21 { + position: relative; + left: 87.5%; } + .el-col-xs-22 { + width: 91.66667%; } + .el-col-xs-offset-22 { + margin-left: 91.66667%; } + .el-col-xs-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-xs-push-22 { + position: relative; + left: 91.66667%; } + .el-col-xs-23 { + width: 95.83333%; } + .el-col-xs-offset-23 { + margin-left: 95.83333%; } + .el-col-xs-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-xs-push-23 { + position: relative; + left: 95.83333%; } + .el-col-xs-24 { + width: 100%; } + .el-col-xs-offset-24 { + margin-left: 100%; } + .el-col-xs-pull-24 { + position: relative; + right: 100%; } + .el-col-xs-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 768px) { + .el-col-sm-0 { + display: none; } + .el-col-sm-0 { + width: 0%; } + .el-col-sm-offset-0 { + margin-left: 0%; } + .el-col-sm-pull-0 { + position: relative; + right: 0%; } + .el-col-sm-push-0 { + position: relative; + left: 0%; } + .el-col-sm-1 { + width: 4.16667%; } + .el-col-sm-offset-1 { + margin-left: 4.16667%; } + .el-col-sm-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-sm-push-1 { + position: relative; + left: 4.16667%; } + .el-col-sm-2 { + width: 8.33333%; } + .el-col-sm-offset-2 { + margin-left: 8.33333%; } + .el-col-sm-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-sm-push-2 { + position: relative; + left: 8.33333%; } + .el-col-sm-3 { + width: 12.5%; } + .el-col-sm-offset-3 { + margin-left: 12.5%; } + .el-col-sm-pull-3 { + position: relative; + right: 12.5%; } + .el-col-sm-push-3 { + position: relative; + left: 12.5%; } + .el-col-sm-4 { + width: 16.66667%; } + .el-col-sm-offset-4 { + margin-left: 16.66667%; } + .el-col-sm-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-sm-push-4 { + position: relative; + left: 16.66667%; } + .el-col-sm-5 { + width: 20.83333%; } + .el-col-sm-offset-5 { + margin-left: 20.83333%; } + .el-col-sm-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-sm-push-5 { + position: relative; + left: 20.83333%; } + .el-col-sm-6 { + width: 25%; } + .el-col-sm-offset-6 { + margin-left: 25%; } + .el-col-sm-pull-6 { + position: relative; + right: 25%; } + .el-col-sm-push-6 { + position: relative; + left: 25%; } + .el-col-sm-7 { + width: 29.16667%; } + .el-col-sm-offset-7 { + margin-left: 29.16667%; } + .el-col-sm-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-sm-push-7 { + position: relative; + left: 29.16667%; } + .el-col-sm-8 { + width: 33.33333%; } + .el-col-sm-offset-8 { + margin-left: 33.33333%; } + .el-col-sm-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-sm-push-8 { + position: relative; + left: 33.33333%; } + .el-col-sm-9 { + width: 37.5%; } + .el-col-sm-offset-9 { + margin-left: 37.5%; } + .el-col-sm-pull-9 { + position: relative; + right: 37.5%; } + .el-col-sm-push-9 { + position: relative; + left: 37.5%; } + .el-col-sm-10 { + width: 41.66667%; } + .el-col-sm-offset-10 { + margin-left: 41.66667%; } + .el-col-sm-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-sm-push-10 { + position: relative; + left: 41.66667%; } + .el-col-sm-11 { + width: 45.83333%; } + .el-col-sm-offset-11 { + margin-left: 45.83333%; } + .el-col-sm-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-sm-push-11 { + position: relative; + left: 45.83333%; } + .el-col-sm-12 { + width: 50%; } + .el-col-sm-offset-12 { + margin-left: 50%; } + .el-col-sm-pull-12 { + position: relative; + right: 50%; } + .el-col-sm-push-12 { + position: relative; + left: 50%; } + .el-col-sm-13 { + width: 54.16667%; } + .el-col-sm-offset-13 { + margin-left: 54.16667%; } + .el-col-sm-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-sm-push-13 { + position: relative; + left: 54.16667%; } + .el-col-sm-14 { + width: 58.33333%; } + .el-col-sm-offset-14 { + margin-left: 58.33333%; } + .el-col-sm-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-sm-push-14 { + position: relative; + left: 58.33333%; } + .el-col-sm-15 { + width: 62.5%; } + .el-col-sm-offset-15 { + margin-left: 62.5%; } + .el-col-sm-pull-15 { + position: relative; + right: 62.5%; } + .el-col-sm-push-15 { + position: relative; + left: 62.5%; } + .el-col-sm-16 { + width: 66.66667%; } + .el-col-sm-offset-16 { + margin-left: 66.66667%; } + .el-col-sm-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-sm-push-16 { + position: relative; + left: 66.66667%; } + .el-col-sm-17 { + width: 70.83333%; } + .el-col-sm-offset-17 { + margin-left: 70.83333%; } + .el-col-sm-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-sm-push-17 { + position: relative; + left: 70.83333%; } + .el-col-sm-18 { + width: 75%; } + .el-col-sm-offset-18 { + margin-left: 75%; } + .el-col-sm-pull-18 { + position: relative; + right: 75%; } + .el-col-sm-push-18 { + position: relative; + left: 75%; } + .el-col-sm-19 { + width: 79.16667%; } + .el-col-sm-offset-19 { + margin-left: 79.16667%; } + .el-col-sm-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-sm-push-19 { + position: relative; + left: 79.16667%; } + .el-col-sm-20 { + width: 83.33333%; } + .el-col-sm-offset-20 { + margin-left: 83.33333%; } + .el-col-sm-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-sm-push-20 { + position: relative; + left: 83.33333%; } + .el-col-sm-21 { + width: 87.5%; } + .el-col-sm-offset-21 { + margin-left: 87.5%; } + .el-col-sm-pull-21 { + position: relative; + right: 87.5%; } + .el-col-sm-push-21 { + position: relative; + left: 87.5%; } + .el-col-sm-22 { + width: 91.66667%; } + .el-col-sm-offset-22 { + margin-left: 91.66667%; } + .el-col-sm-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-sm-push-22 { + position: relative; + left: 91.66667%; } + .el-col-sm-23 { + width: 95.83333%; } + .el-col-sm-offset-23 { + margin-left: 95.83333%; } + .el-col-sm-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-sm-push-23 { + position: relative; + left: 95.83333%; } + .el-col-sm-24 { + width: 100%; } + .el-col-sm-offset-24 { + margin-left: 100%; } + .el-col-sm-pull-24 { + position: relative; + right: 100%; } + .el-col-sm-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 992px) { + .el-col-md-0 { + display: none; } + .el-col-md-0 { + width: 0%; } + .el-col-md-offset-0 { + margin-left: 0%; } + .el-col-md-pull-0 { + position: relative; + right: 0%; } + .el-col-md-push-0 { + position: relative; + left: 0%; } + .el-col-md-1 { + width: 4.16667%; } + .el-col-md-offset-1 { + margin-left: 4.16667%; } + .el-col-md-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-md-push-1 { + position: relative; + left: 4.16667%; } + .el-col-md-2 { + width: 8.33333%; } + .el-col-md-offset-2 { + margin-left: 8.33333%; } + .el-col-md-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-md-push-2 { + position: relative; + left: 8.33333%; } + .el-col-md-3 { + width: 12.5%; } + .el-col-md-offset-3 { + margin-left: 12.5%; } + .el-col-md-pull-3 { + position: relative; + right: 12.5%; } + .el-col-md-push-3 { + position: relative; + left: 12.5%; } + .el-col-md-4 { + width: 16.66667%; } + .el-col-md-offset-4 { + margin-left: 16.66667%; } + .el-col-md-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-md-push-4 { + position: relative; + left: 16.66667%; } + .el-col-md-5 { + width: 20.83333%; } + .el-col-md-offset-5 { + margin-left: 20.83333%; } + .el-col-md-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-md-push-5 { + position: relative; + left: 20.83333%; } + .el-col-md-6 { + width: 25%; } + .el-col-md-offset-6 { + margin-left: 25%; } + .el-col-md-pull-6 { + position: relative; + right: 25%; } + .el-col-md-push-6 { + position: relative; + left: 25%; } + .el-col-md-7 { + width: 29.16667%; } + .el-col-md-offset-7 { + margin-left: 29.16667%; } + .el-col-md-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-md-push-7 { + position: relative; + left: 29.16667%; } + .el-col-md-8 { + width: 33.33333%; } + .el-col-md-offset-8 { + margin-left: 33.33333%; } + .el-col-md-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-md-push-8 { + position: relative; + left: 33.33333%; } + .el-col-md-9 { + width: 37.5%; } + .el-col-md-offset-9 { + margin-left: 37.5%; } + .el-col-md-pull-9 { + position: relative; + right: 37.5%; } + .el-col-md-push-9 { + position: relative; + left: 37.5%; } + .el-col-md-10 { + width: 41.66667%; } + .el-col-md-offset-10 { + margin-left: 41.66667%; } + .el-col-md-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-md-push-10 { + position: relative; + left: 41.66667%; } + .el-col-md-11 { + width: 45.83333%; } + .el-col-md-offset-11 { + margin-left: 45.83333%; } + .el-col-md-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-md-push-11 { + position: relative; + left: 45.83333%; } + .el-col-md-12 { + width: 50%; } + .el-col-md-offset-12 { + margin-left: 50%; } + .el-col-md-pull-12 { + position: relative; + right: 50%; } + .el-col-md-push-12 { + position: relative; + left: 50%; } + .el-col-md-13 { + width: 54.16667%; } + .el-col-md-offset-13 { + margin-left: 54.16667%; } + .el-col-md-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-md-push-13 { + position: relative; + left: 54.16667%; } + .el-col-md-14 { + width: 58.33333%; } + .el-col-md-offset-14 { + margin-left: 58.33333%; } + .el-col-md-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-md-push-14 { + position: relative; + left: 58.33333%; } + .el-col-md-15 { + width: 62.5%; } + .el-col-md-offset-15 { + margin-left: 62.5%; } + .el-col-md-pull-15 { + position: relative; + right: 62.5%; } + .el-col-md-push-15 { + position: relative; + left: 62.5%; } + .el-col-md-16 { + width: 66.66667%; } + .el-col-md-offset-16 { + margin-left: 66.66667%; } + .el-col-md-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-md-push-16 { + position: relative; + left: 66.66667%; } + .el-col-md-17 { + width: 70.83333%; } + .el-col-md-offset-17 { + margin-left: 70.83333%; } + .el-col-md-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-md-push-17 { + position: relative; + left: 70.83333%; } + .el-col-md-18 { + width: 75%; } + .el-col-md-offset-18 { + margin-left: 75%; } + .el-col-md-pull-18 { + position: relative; + right: 75%; } + .el-col-md-push-18 { + position: relative; + left: 75%; } + .el-col-md-19 { + width: 79.16667%; } + .el-col-md-offset-19 { + margin-left: 79.16667%; } + .el-col-md-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-md-push-19 { + position: relative; + left: 79.16667%; } + .el-col-md-20 { + width: 83.33333%; } + .el-col-md-offset-20 { + margin-left: 83.33333%; } + .el-col-md-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-md-push-20 { + position: relative; + left: 83.33333%; } + .el-col-md-21 { + width: 87.5%; } + .el-col-md-offset-21 { + margin-left: 87.5%; } + .el-col-md-pull-21 { + position: relative; + right: 87.5%; } + .el-col-md-push-21 { + position: relative; + left: 87.5%; } + .el-col-md-22 { + width: 91.66667%; } + .el-col-md-offset-22 { + margin-left: 91.66667%; } + .el-col-md-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-md-push-22 { + position: relative; + left: 91.66667%; } + .el-col-md-23 { + width: 95.83333%; } + .el-col-md-offset-23 { + margin-left: 95.83333%; } + .el-col-md-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-md-push-23 { + position: relative; + left: 95.83333%; } + .el-col-md-24 { + width: 100%; } + .el-col-md-offset-24 { + margin-left: 100%; } + .el-col-md-pull-24 { + position: relative; + right: 100%; } + .el-col-md-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 1200px) { + .el-col-lg-0 { + display: none; } + .el-col-lg-0 { + width: 0%; } + .el-col-lg-offset-0 { + margin-left: 0%; } + .el-col-lg-pull-0 { + position: relative; + right: 0%; } + .el-col-lg-push-0 { + position: relative; + left: 0%; } + .el-col-lg-1 { + width: 4.16667%; } + .el-col-lg-offset-1 { + margin-left: 4.16667%; } + .el-col-lg-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-lg-push-1 { + position: relative; + left: 4.16667%; } + .el-col-lg-2 { + width: 8.33333%; } + .el-col-lg-offset-2 { + margin-left: 8.33333%; } + .el-col-lg-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-lg-push-2 { + position: relative; + left: 8.33333%; } + .el-col-lg-3 { + width: 12.5%; } + .el-col-lg-offset-3 { + margin-left: 12.5%; } + .el-col-lg-pull-3 { + position: relative; + right: 12.5%; } + .el-col-lg-push-3 { + position: relative; + left: 12.5%; } + .el-col-lg-4 { + width: 16.66667%; } + .el-col-lg-offset-4 { + margin-left: 16.66667%; } + .el-col-lg-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-lg-push-4 { + position: relative; + left: 16.66667%; } + .el-col-lg-5 { + width: 20.83333%; } + .el-col-lg-offset-5 { + margin-left: 20.83333%; } + .el-col-lg-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-lg-push-5 { + position: relative; + left: 20.83333%; } + .el-col-lg-6 { + width: 25%; } + .el-col-lg-offset-6 { + margin-left: 25%; } + .el-col-lg-pull-6 { + position: relative; + right: 25%; } + .el-col-lg-push-6 { + position: relative; + left: 25%; } + .el-col-lg-7 { + width: 29.16667%; } + .el-col-lg-offset-7 { + margin-left: 29.16667%; } + .el-col-lg-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-lg-push-7 { + position: relative; + left: 29.16667%; } + .el-col-lg-8 { + width: 33.33333%; } + .el-col-lg-offset-8 { + margin-left: 33.33333%; } + .el-col-lg-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-lg-push-8 { + position: relative; + left: 33.33333%; } + .el-col-lg-9 { + width: 37.5%; } + .el-col-lg-offset-9 { + margin-left: 37.5%; } + .el-col-lg-pull-9 { + position: relative; + right: 37.5%; } + .el-col-lg-push-9 { + position: relative; + left: 37.5%; } + .el-col-lg-10 { + width: 41.66667%; } + .el-col-lg-offset-10 { + margin-left: 41.66667%; } + .el-col-lg-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-lg-push-10 { + position: relative; + left: 41.66667%; } + .el-col-lg-11 { + width: 45.83333%; } + .el-col-lg-offset-11 { + margin-left: 45.83333%; } + .el-col-lg-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-lg-push-11 { + position: relative; + left: 45.83333%; } + .el-col-lg-12 { + width: 50%; } + .el-col-lg-offset-12 { + margin-left: 50%; } + .el-col-lg-pull-12 { + position: relative; + right: 50%; } + .el-col-lg-push-12 { + position: relative; + left: 50%; } + .el-col-lg-13 { + width: 54.16667%; } + .el-col-lg-offset-13 { + margin-left: 54.16667%; } + .el-col-lg-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-lg-push-13 { + position: relative; + left: 54.16667%; } + .el-col-lg-14 { + width: 58.33333%; } + .el-col-lg-offset-14 { + margin-left: 58.33333%; } + .el-col-lg-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-lg-push-14 { + position: relative; + left: 58.33333%; } + .el-col-lg-15 { + width: 62.5%; } + .el-col-lg-offset-15 { + margin-left: 62.5%; } + .el-col-lg-pull-15 { + position: relative; + right: 62.5%; } + .el-col-lg-push-15 { + position: relative; + left: 62.5%; } + .el-col-lg-16 { + width: 66.66667%; } + .el-col-lg-offset-16 { + margin-left: 66.66667%; } + .el-col-lg-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-lg-push-16 { + position: relative; + left: 66.66667%; } + .el-col-lg-17 { + width: 70.83333%; } + .el-col-lg-offset-17 { + margin-left: 70.83333%; } + .el-col-lg-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-lg-push-17 { + position: relative; + left: 70.83333%; } + .el-col-lg-18 { + width: 75%; } + .el-col-lg-offset-18 { + margin-left: 75%; } + .el-col-lg-pull-18 { + position: relative; + right: 75%; } + .el-col-lg-push-18 { + position: relative; + left: 75%; } + .el-col-lg-19 { + width: 79.16667%; } + .el-col-lg-offset-19 { + margin-left: 79.16667%; } + .el-col-lg-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-lg-push-19 { + position: relative; + left: 79.16667%; } + .el-col-lg-20 { + width: 83.33333%; } + .el-col-lg-offset-20 { + margin-left: 83.33333%; } + .el-col-lg-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-lg-push-20 { + position: relative; + left: 83.33333%; } + .el-col-lg-21 { + width: 87.5%; } + .el-col-lg-offset-21 { + margin-left: 87.5%; } + .el-col-lg-pull-21 { + position: relative; + right: 87.5%; } + .el-col-lg-push-21 { + position: relative; + left: 87.5%; } + .el-col-lg-22 { + width: 91.66667%; } + .el-col-lg-offset-22 { + margin-left: 91.66667%; } + .el-col-lg-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-lg-push-22 { + position: relative; + left: 91.66667%; } + .el-col-lg-23 { + width: 95.83333%; } + .el-col-lg-offset-23 { + margin-left: 95.83333%; } + .el-col-lg-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-lg-push-23 { + position: relative; + left: 95.83333%; } + .el-col-lg-24 { + width: 100%; } + .el-col-lg-offset-24 { + margin-left: 100%; } + .el-col-lg-pull-24 { + position: relative; + right: 100%; } + .el-col-lg-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 1920px) { + .el-col-xl-0 { + display: none; } + .el-col-xl-0 { + width: 0%; } + .el-col-xl-offset-0 { + margin-left: 0%; } + .el-col-xl-pull-0 { + position: relative; + right: 0%; } + .el-col-xl-push-0 { + position: relative; + left: 0%; } + .el-col-xl-1 { + width: 4.16667%; } + .el-col-xl-offset-1 { + margin-left: 4.16667%; } + .el-col-xl-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-xl-push-1 { + position: relative; + left: 4.16667%; } + .el-col-xl-2 { + width: 8.33333%; } + .el-col-xl-offset-2 { + margin-left: 8.33333%; } + .el-col-xl-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-xl-push-2 { + position: relative; + left: 8.33333%; } + .el-col-xl-3 { + width: 12.5%; } + .el-col-xl-offset-3 { + margin-left: 12.5%; } + .el-col-xl-pull-3 { + position: relative; + right: 12.5%; } + .el-col-xl-push-3 { + position: relative; + left: 12.5%; } + .el-col-xl-4 { + width: 16.66667%; } + .el-col-xl-offset-4 { + margin-left: 16.66667%; } + .el-col-xl-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-xl-push-4 { + position: relative; + left: 16.66667%; } + .el-col-xl-5 { + width: 20.83333%; } + .el-col-xl-offset-5 { + margin-left: 20.83333%; } + .el-col-xl-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-xl-push-5 { + position: relative; + left: 20.83333%; } + .el-col-xl-6 { + width: 25%; } + .el-col-xl-offset-6 { + margin-left: 25%; } + .el-col-xl-pull-6 { + position: relative; + right: 25%; } + .el-col-xl-push-6 { + position: relative; + left: 25%; } + .el-col-xl-7 { + width: 29.16667%; } + .el-col-xl-offset-7 { + margin-left: 29.16667%; } + .el-col-xl-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-xl-push-7 { + position: relative; + left: 29.16667%; } + .el-col-xl-8 { + width: 33.33333%; } + .el-col-xl-offset-8 { + margin-left: 33.33333%; } + .el-col-xl-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-xl-push-8 { + position: relative; + left: 33.33333%; } + .el-col-xl-9 { + width: 37.5%; } + .el-col-xl-offset-9 { + margin-left: 37.5%; } + .el-col-xl-pull-9 { + position: relative; + right: 37.5%; } + .el-col-xl-push-9 { + position: relative; + left: 37.5%; } + .el-col-xl-10 { + width: 41.66667%; } + .el-col-xl-offset-10 { + margin-left: 41.66667%; } + .el-col-xl-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-xl-push-10 { + position: relative; + left: 41.66667%; } + .el-col-xl-11 { + width: 45.83333%; } + .el-col-xl-offset-11 { + margin-left: 45.83333%; } + .el-col-xl-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-xl-push-11 { + position: relative; + left: 45.83333%; } + .el-col-xl-12 { + width: 50%; } + .el-col-xl-offset-12 { + margin-left: 50%; } + .el-col-xl-pull-12 { + position: relative; + right: 50%; } + .el-col-xl-push-12 { + position: relative; + left: 50%; } + .el-col-xl-13 { + width: 54.16667%; } + .el-col-xl-offset-13 { + margin-left: 54.16667%; } + .el-col-xl-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-xl-push-13 { + position: relative; + left: 54.16667%; } + .el-col-xl-14 { + width: 58.33333%; } + .el-col-xl-offset-14 { + margin-left: 58.33333%; } + .el-col-xl-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-xl-push-14 { + position: relative; + left: 58.33333%; } + .el-col-xl-15 { + width: 62.5%; } + .el-col-xl-offset-15 { + margin-left: 62.5%; } + .el-col-xl-pull-15 { + position: relative; + right: 62.5%; } + .el-col-xl-push-15 { + position: relative; + left: 62.5%; } + .el-col-xl-16 { + width: 66.66667%; } + .el-col-xl-offset-16 { + margin-left: 66.66667%; } + .el-col-xl-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-xl-push-16 { + position: relative; + left: 66.66667%; } + .el-col-xl-17 { + width: 70.83333%; } + .el-col-xl-offset-17 { + margin-left: 70.83333%; } + .el-col-xl-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-xl-push-17 { + position: relative; + left: 70.83333%; } + .el-col-xl-18 { + width: 75%; } + .el-col-xl-offset-18 { + margin-left: 75%; } + .el-col-xl-pull-18 { + position: relative; + right: 75%; } + .el-col-xl-push-18 { + position: relative; + left: 75%; } + .el-col-xl-19 { + width: 79.16667%; } + .el-col-xl-offset-19 { + margin-left: 79.16667%; } + .el-col-xl-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-xl-push-19 { + position: relative; + left: 79.16667%; } + .el-col-xl-20 { + width: 83.33333%; } + .el-col-xl-offset-20 { + margin-left: 83.33333%; } + .el-col-xl-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-xl-push-20 { + position: relative; + left: 83.33333%; } + .el-col-xl-21 { + width: 87.5%; } + .el-col-xl-offset-21 { + margin-left: 87.5%; } + .el-col-xl-pull-21 { + position: relative; + right: 87.5%; } + .el-col-xl-push-21 { + position: relative; + left: 87.5%; } + .el-col-xl-22 { + width: 91.66667%; } + .el-col-xl-offset-22 { + margin-left: 91.66667%; } + .el-col-xl-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-xl-push-22 { + position: relative; + left: 91.66667%; } + .el-col-xl-23 { + width: 95.83333%; } + .el-col-xl-offset-23 { + margin-left: 95.83333%; } + .el-col-xl-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-xl-push-23 { + position: relative; + left: 95.83333%; } + .el-col-xl-24 { + width: 100%; } + .el-col-xl-offset-24 { + margin-left: 100%; } + .el-col-xl-pull-24 { + position: relative; + right: 100%; } + .el-col-xl-push-24 { + position: relative; + left: 100%; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-progress { + position: relative; + line-height: 1; } + .el-progress__text { + font-size: 14px; + color: #606266; + display: inline-block; + vertical-align: middle; + margin-left: 10px; + line-height: 1; } + .el-progress__text i { + vertical-align: middle; + display: block; } + .el-progress--circle, .el-progress--dashboard { + display: inline-block; } + .el-progress--circle .el-progress__text, .el-progress--dashboard .el-progress__text { + position: absolute; + top: 50%; + left: 0; + width: 100%; + text-align: center; + margin: 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); } + .el-progress--circle .el-progress__text i, .el-progress--dashboard .el-progress__text i { + vertical-align: middle; + display: inline-block; } + .el-progress--without-text .el-progress__text { + display: none; } + .el-progress--without-text .el-progress-bar { + padding-right: 0; + margin-right: 0; + display: block; } + .el-progress--text-inside .el-progress-bar { + padding-right: 0; + margin-right: 0; } + .el-progress.is-success .el-progress-bar__inner { + background-color: #67C23A; } + .el-progress.is-success .el-progress__text { + color: #67C23A; } + .el-progress.is-warning .el-progress-bar__inner { + background-color: #E6A23C; } + .el-progress.is-warning .el-progress__text { + color: #E6A23C; } + .el-progress.is-exception .el-progress-bar__inner { + background-color: #F56C6C; } + .el-progress.is-exception .el-progress__text { + color: #F56C6C; } + +.el-progress-bar { + padding-right: 50px; + display: inline-block; + vertical-align: middle; + width: 100%; + margin-right: -55px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-progress-bar__outer { + height: 6px; + border-radius: 100px; + background-color: #EBEEF5; + overflow: hidden; + position: relative; + vertical-align: middle; } + .el-progress-bar__inner { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: #409EFF; + text-align: right; + border-radius: 100px; + line-height: 1; + white-space: nowrap; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; } + .el-progress-bar__inner::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-progress-bar__innerText { + display: inline-block; + vertical-align: middle; + color: #FFFFFF; + font-size: 12px; + margin: 0 5px; } + +@-webkit-keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +@keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-upload { + display: inline-block; + text-align: center; + cursor: pointer; + outline: none; + /* 照片墙模式 */ } + .el-upload__input { + display: none; } + .el-upload__tip { + font-size: 12px; + color: #606266; + margin-top: 7px; } + .el-upload iframe { + position: absolute; + z-index: -1; + top: 0; + left: 0; + opacity: 0; + filter: alpha(opacity=0); } + .el-upload--picture-card { + background-color: #fbfdff; + border: 1px dashed #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 148px; + height: 148px; + cursor: pointer; + line-height: 146px; + vertical-align: top; } + .el-upload--picture-card i { + font-size: 28px; + color: #8c939d; } + .el-upload--picture-card:hover { + border-color: #409EFF; + color: #409EFF; } + .el-upload:focus { + border-color: #409EFF; + color: #409EFF; } + .el-upload:focus .el-upload-dragger { + border-color: #409EFF; } + +.el-upload-dragger { + background-color: #fff; + border: 1px dashed #d9d9d9; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 360px; + height: 180px; + text-align: center; + cursor: pointer; + position: relative; + overflow: hidden; } + .el-upload-dragger .el-icon-upload { + font-size: 67px; + color: #C0C4CC; + margin: 40px 0 16px; + line-height: 50px; } + .el-upload-dragger + .el-upload__tip { + text-align: center; } + .el-upload-dragger ~ .el-upload__files { + border-top: 1px solid #DCDFE6; + margin-top: 7px; + padding-top: 5px; } + .el-upload-dragger .el-upload__text { + color: #606266; + font-size: 14px; + text-align: center; } + .el-upload-dragger .el-upload__text em { + color: #409EFF; + font-style: normal; } + .el-upload-dragger:hover { + border-color: #409EFF; } + .el-upload-dragger.is-dragover { + background-color: rgba(32, 159, 255, 0.06); + border: 2px dashed #409EFF; } + +.el-upload-list { + margin: 0; + padding: 0; + list-style: none; } + .el-upload-list__item { + -webkit-transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + font-size: 14px; + color: #606266; + line-height: 1.8; + margin-top: 5px; + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + width: 100%; } + .el-upload-list__item .el-progress { + position: absolute; + top: 20px; + width: 100%; } + .el-upload-list__item .el-progress__text { + position: absolute; + right: 0; + top: -13px; } + .el-upload-list__item .el-progress-bar { + margin-right: 0; + padding-right: 0; } + .el-upload-list__item:first-child { + margin-top: 10px; } + .el-upload-list__item .el-icon-upload-success { + color: #67C23A; } + .el-upload-list__item .el-icon-close { + display: none; + position: absolute; + top: 5px; + right: 5px; + cursor: pointer; + opacity: .75; + color: #606266; } + .el-upload-list__item .el-icon-close:hover { + opacity: 1; } + .el-upload-list__item .el-icon-close-tip { + display: none; + position: absolute; + top: 5px; + right: 5px; + font-size: 12px; + cursor: pointer; + opacity: 1; + color: #409EFF; } + .el-upload-list__item:hover { + background-color: #F5F7FA; } + .el-upload-list__item:hover .el-icon-close { + display: inline-block; } + .el-upload-list__item:hover .el-progress__text { + display: none; } + .el-upload-list__item.is-success .el-upload-list__item-status-label { + display: block; } + .el-upload-list__item.is-success .el-upload-list__item-name:hover, .el-upload-list__item.is-success .el-upload-list__item-name:focus { + color: #409EFF; + cursor: pointer; } + .el-upload-list__item.is-success:focus:not(:hover) { + /* 键盘focus */ } + .el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip { + display: inline-block; } + .el-upload-list__item.is-success:not(.focusing):focus, .el-upload-list__item.is-success:active { + /* click时 */ + outline-width: 0; } + .el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip, .el-upload-list__item.is-success:active .el-icon-close-tip { + display: none; } + .el-upload-list__item.is-success:hover .el-upload-list__item-status-label, .el-upload-list__item.is-success:focus .el-upload-list__item-status-label { + display: none; } + .el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label { + display: block; } + .el-upload-list__item-name { + color: #606266; + display: block; + margin-right: 40px; + overflow: hidden; + padding-left: 4px; + text-overflow: ellipsis; + -webkit-transition: color .3s; + transition: color .3s; + white-space: nowrap; } + .el-upload-list__item-name [class^="el-icon"] { + height: 100%; + margin-right: 7px; + color: #909399; + line-height: inherit; } + .el-upload-list__item-status-label { + position: absolute; + right: 5px; + top: 0; + line-height: inherit; + display: none; } + .el-upload-list__item-delete { + position: absolute; + right: 10px; + top: 0; + font-size: 12px; + color: #606266; + display: none; } + .el-upload-list__item-delete:hover { + color: #409EFF; } + .el-upload-list--picture-card { + margin: 0; + display: inline; + vertical-align: top; } + .el-upload-list--picture-card .el-upload-list__item { + overflow: hidden; + background-color: #fff; + border: 1px solid #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 148px; + height: 148px; + margin: 0 8px 8px 0; + display: inline-block; } + .el-upload-list--picture-card .el-upload-list__item .el-icon-check, + .el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check { + color: #FFFFFF; } + .el-upload-list--picture-card .el-upload-list__item .el-icon-close { + display: none; } + .el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label { + display: none; } + .el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text { + display: block; } + .el-upload-list--picture-card .el-upload-list__item-name { + display: none; } + .el-upload-list--picture-card .el-upload-list__item-thumbnail { + width: 100%; + height: 100%; } + .el-upload-list--picture-card .el-upload-list__item-status-label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); } + .el-upload-list--picture-card .el-upload-list__item-status-label i { + font-size: 12px; + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .el-upload-list--picture-card .el-upload-list__item-actions { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + cursor: default; + text-align: center; + color: #fff; + opacity: 0; + font-size: 20px; + background-color: rgba(0, 0, 0, 0.5); + -webkit-transition: opacity .3s; + transition: opacity .3s; } + .el-upload-list--picture-card .el-upload-list__item-actions::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-upload-list--picture-card .el-upload-list__item-actions span { + display: none; + cursor: pointer; } + .el-upload-list--picture-card .el-upload-list__item-actions span + span { + margin-left: 15px; } + .el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete { + position: static; + font-size: inherit; + color: inherit; } + .el-upload-list--picture-card .el-upload-list__item-actions:hover { + opacity: 1; } + .el-upload-list--picture-card .el-upload-list__item-actions:hover span { + display: inline-block; } + .el-upload-list--picture-card .el-progress { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + bottom: auto; + width: 126px; } + .el-upload-list--picture-card .el-progress .el-progress__text { + top: 50%; } + .el-upload-list--picture .el-upload-list__item { + overflow: hidden; + z-index: 0; + background-color: #fff; + border: 1px solid #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin-top: 10px; + padding: 10px 10px 10px 90px; + height: 92px; } + .el-upload-list--picture .el-upload-list__item .el-icon-check, + .el-upload-list--picture .el-upload-list__item .el-icon-circle-check { + color: #FFFFFF; } + .el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label { + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + top: -2px; + right: -12px; } + .el-upload-list--picture .el-upload-list__item:hover .el-progress__text { + display: block; } + .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name { + line-height: 70px; + margin-top: 0; } + .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i { + display: none; } + .el-upload-list--picture .el-upload-list__item-thumbnail { + vertical-align: middle; + display: inline-block; + width: 70px; + height: 70px; + float: left; + position: relative; + z-index: 1; + margin-left: -80px; + background-color: #FFFFFF; } + .el-upload-list--picture .el-upload-list__item-name { + display: block; + margin-top: 20px; } + .el-upload-list--picture .el-upload-list__item-name i { + font-size: 70px; + line-height: 1; + position: absolute; + left: 9px; + top: 10px; } + .el-upload-list--picture .el-upload-list__item-status-label { + position: absolute; + right: -17px; + top: -7px; + width: 46px; + height: 26px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; } + .el-upload-list--picture .el-upload-list__item-status-label i { + font-size: 12px; + margin-top: 12px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .el-upload-list--picture .el-progress { + position: relative; + top: -7px; } + +.el-upload-cover { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + z-index: 10; + cursor: default; } + .el-upload-cover::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-upload-cover img { + display: block; + width: 100%; + height: 100%; } + .el-upload-cover__label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); } + .el-upload-cover__label i { + font-size: 12px; + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + color: #fff; } + .el-upload-cover__progress { + display: inline-block; + vertical-align: middle; + position: static; + width: 243px; } + .el-upload-cover__progress + .el-upload__inner { + opacity: 0; } + .el-upload-cover__content { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + .el-upload-cover__interact { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.72); + text-align: center; } + .el-upload-cover__interact .btn { + display: inline-block; + color: #FFFFFF; + font-size: 14px; + cursor: pointer; + vertical-align: middle; + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + margin-top: 60px; } + .el-upload-cover__interact .btn i { + margin-top: 0; } + .el-upload-cover__interact .btn span { + opacity: 0; + -webkit-transition: opacity .15s linear; + transition: opacity .15s linear; } + .el-upload-cover__interact .btn:not(:first-child) { + margin-left: 35px; } + .el-upload-cover__interact .btn:hover { + -webkit-transform: translateY(-13px); + transform: translateY(-13px); } + .el-upload-cover__interact .btn:hover span { + opacity: 1; } + .el-upload-cover__interact .btn i { + color: #FFFFFF; + display: block; + font-size: 24px; + line-height: inherit; + margin: 0 auto 5px; } + .el-upload-cover__title { + position: absolute; + bottom: 0; + left: 0; + background-color: #FFFFFF; + height: 36px; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: normal; + text-align: left; + padding: 0 10px; + margin: 0; + line-height: 36px; + font-size: 14px; + color: #303133; } + .el-upload-cover + .el-upload__inner { + opacity: 0; + position: relative; + z-index: 1; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-progress { + position: relative; + line-height: 1; } + .el-progress__text { + font-size: 14px; + color: #606266; + display: inline-block; + vertical-align: middle; + margin-left: 10px; + line-height: 1; } + .el-progress__text i { + vertical-align: middle; + display: block; } + .el-progress--circle, .el-progress--dashboard { + display: inline-block; } + .el-progress--circle .el-progress__text, .el-progress--dashboard .el-progress__text { + position: absolute; + top: 50%; + left: 0; + width: 100%; + text-align: center; + margin: 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); } + .el-progress--circle .el-progress__text i, .el-progress--dashboard .el-progress__text i { + vertical-align: middle; + display: inline-block; } + .el-progress--without-text .el-progress__text { + display: none; } + .el-progress--without-text .el-progress-bar { + padding-right: 0; + margin-right: 0; + display: block; } + .el-progress--text-inside .el-progress-bar { + padding-right: 0; + margin-right: 0; } + .el-progress.is-success .el-progress-bar__inner { + background-color: #67C23A; } + .el-progress.is-success .el-progress__text { + color: #67C23A; } + .el-progress.is-warning .el-progress-bar__inner { + background-color: #E6A23C; } + .el-progress.is-warning .el-progress__text { + color: #E6A23C; } + .el-progress.is-exception .el-progress-bar__inner { + background-color: #F56C6C; } + .el-progress.is-exception .el-progress__text { + color: #F56C6C; } + +.el-progress-bar { + padding-right: 50px; + display: inline-block; + vertical-align: middle; + width: 100%; + margin-right: -55px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-progress-bar__outer { + height: 6px; + border-radius: 100px; + background-color: #EBEEF5; + overflow: hidden; + position: relative; + vertical-align: middle; } + .el-progress-bar__inner { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: #409EFF; + text-align: right; + border-radius: 100px; + line-height: 1; + white-space: nowrap; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; } + .el-progress-bar__inner::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-progress-bar__innerText { + display: inline-block; + vertical-align: middle; + color: #FFFFFF; + font-size: 12px; + margin: 0 5px; } + +@keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-time-spinner { + width: 100%; + white-space: nowrap; } + +.el-spinner { + display: inline-block; + vertical-align: middle; } + +.el-spinner-inner { + -webkit-animation: rotate 2s linear infinite; + animation: rotate 2s linear infinite; + width: 50px; + height: 50px; } + .el-spinner-inner .path { + stroke: #ececec; + stroke-linecap: round; + -webkit-animation: dash 1.5s ease-in-out infinite; + animation: dash 1.5s ease-in-out infinite; } + +@-webkit-keyframes rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-webkit-keyframes dash { + 0% { + stroke-dasharray: 1, 150; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -35; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -124; } } + +@keyframes dash { + 0% { + stroke-dasharray: 1, 150; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -35; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -124; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-message { + min-width: 380px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + border-width: 1px; + border-style: solid; + border-color: #EBEEF5; + position: fixed; + left: 50%; + top: 20px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + background-color: #edf2fc; + -webkit-transition: opacity 0.3s, top 0.4s, -webkit-transform .4s; + transition: opacity 0.3s, top 0.4s, -webkit-transform .4s; + transition: opacity 0.3s, transform .4s, top 0.4s; + transition: opacity 0.3s, transform .4s, top 0.4s, -webkit-transform .4s; + overflow: hidden; + padding: 15px 15px 15px 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-message.is-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-message.is-closable .el-message__content { + padding-right: 16px; } + .el-message p { + margin: 0; } + .el-message--info .el-message__content { + color: #909399; } + .el-message--success { + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-message--success .el-message__content { + color: #67C23A; } + .el-message--warning { + background-color: #fdf6ec; + border-color: #faecd8; } + .el-message--warning .el-message__content { + color: #E6A23C; } + .el-message--error { + background-color: #fef0f0; + border-color: #fde2e2; } + .el-message--error .el-message__content { + color: #F56C6C; } + .el-message__icon { + margin-right: 10px; } + .el-message__content { + padding: 0; + font-size: 14px; + line-height: 1; } + .el-message__content:focus { + outline-width: 0; } + .el-message__closeBtn { + position: absolute; + top: 50%; + right: 15px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + color: #C0C4CC; + font-size: 16px; } + .el-message__closeBtn:focus { + outline-width: 0; } + .el-message__closeBtn:hover { + color: #909399; } + .el-message .el-icon-success { + color: #67C23A; } + .el-message .el-icon-error { + color: #F56C6C; } + .el-message .el-icon-info { + color: #909399; } + .el-message .el-icon-warning { + color: #E6A23C; } + +.el-message-fade-enter, +.el-message-fade-leave-active { + opacity: 0; + -webkit-transform: translate(-50%, -100%); + transform: translate(-50%, -100%); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-badge { + position: relative; + vertical-align: middle; + display: inline-block; } + .el-badge__content { + background-color: #F56C6C; + border-radius: 10px; + color: #FFFFFF; + display: inline-block; + font-size: 12px; + height: 18px; + line-height: 18px; + padding: 0 6px; + text-align: center; + white-space: nowrap; + border: 1px solid #FFFFFF; } + .el-badge__content.is-fixed { + position: absolute; + top: 0; + right: 10px; + -webkit-transform: translateY(-50%) translateX(100%); + transform: translateY(-50%) translateX(100%); } + .el-badge__content.is-fixed.is-dot { + right: 5px; } + .el-badge__content.is-dot { + height: 8px; + width: 8px; + padding: 0; + right: 0; + border-radius: 50%; } + .el-badge__content--primary { + background-color: #409EFF; } + .el-badge__content--success { + background-color: #67C23A; } + .el-badge__content--warning { + background-color: #E6A23C; } + .el-badge__content--info { + background-color: #909399; } + .el-badge__content--danger { + background-color: #F56C6C; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-card { + border-radius: 4px; + border: 1px solid #EBEEF5; + background-color: #FFFFFF; + overflow: hidden; + color: #303133; + -webkit-transition: 0.3s; + transition: 0.3s; } + .el-card.is-always-shadow { + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-card.is-hover-shadow:hover, .el-card.is-hover-shadow:focus { + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-card__header { + padding: 18px 20px; + border-bottom: 1px solid #EBEEF5; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-card__body { + padding: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-rate { + height: 20px; + line-height: 1; } + .el-rate:focus, .el-rate:active { + outline-width: 0; } + .el-rate__item { + display: inline-block; + position: relative; + font-size: 0; + vertical-align: middle; } + .el-rate__icon { + position: relative; + display: inline-block; + font-size: 18px; + margin-right: 6px; + color: #C0C4CC; + -webkit-transition: .3s; + transition: .3s; } + .el-rate__icon.hover { + -webkit-transform: scale(1.15); + transform: scale(1.15); } + .el-rate__icon .path2 { + position: absolute; + left: 0; + top: 0; } + .el-rate__decimal { + position: absolute; + top: 0; + left: 0; + display: inline-block; + overflow: hidden; } + .el-rate__text { + font-size: 14px; + vertical-align: middle; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-steps { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-steps--simple { + padding: 13px 8%; + border-radius: 4px; + background: #F5F7FA; } + .el-steps--horizontal { + white-space: nowrap; } + .el-steps--vertical { + height: 100%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column; + flex-flow: column; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-step { + position: relative; + -ms-flex-negative: 1; + flex-shrink: 1; } + .el-step:last-of-type .el-step__line { + display: none; } + .el-step:last-of-type.is-flex { + -ms-flex-preferred-size: auto !important; + flex-basis: auto !important; + -ms-flex-negative: 0; + flex-shrink: 0; + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; } + .el-step:last-of-type .el-step__main, .el-step:last-of-type .el-step__description { + padding-right: 0; } + .el-step__head { + position: relative; + width: 100%; } + .el-step__head.is-process { + color: #303133; + border-color: #303133; } + .el-step__head.is-wait { + color: #C0C4CC; + border-color: #C0C4CC; } + .el-step__head.is-success { + color: #67C23A; + border-color: #67C23A; } + .el-step__head.is-error { + color: #F56C6C; + border-color: #F56C6C; } + .el-step__head.is-finish { + color: #409EFF; + border-color: #409EFF; } + .el-step__icon { + position: relative; + z-index: 1; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + width: 24px; + height: 24px; + font-size: 14px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #FFFFFF; + -webkit-transition: .15s ease-out; + transition: .15s ease-out; } + .el-step__icon.is-text { + border-radius: 50%; + border: 2px solid; + border-color: inherit; } + .el-step__icon.is-icon { + width: 40px; } + .el-step__icon-inner { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-align: center; + font-weight: bold; + line-height: 1; + color: inherit; } + .el-step__icon-inner[class*=el-icon]:not(.is-status) { + font-size: 25px; + font-weight: normal; } + .el-step__icon-inner.is-status { + -webkit-transform: translateY(1px); + transform: translateY(1px); } + .el-step__line { + position: absolute; + border-color: inherit; + background-color: #C0C4CC; } + .el-step__line-inner { + display: block; + border-width: 1px; + border-style: solid; + border-color: inherit; + -webkit-transition: .15s ease-out; + transition: .15s ease-out; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 0; + height: 0; } + .el-step__main { + white-space: normal; + text-align: left; } + .el-step__title { + font-size: 16px; + line-height: 38px; } + .el-step__title.is-process { + font-weight: bold; + color: #303133; } + .el-step__title.is-wait { + color: #C0C4CC; } + .el-step__title.is-success { + color: #67C23A; } + .el-step__title.is-error { + color: #F56C6C; } + .el-step__title.is-finish { + color: #409EFF; } + .el-step__description { + padding-right: 10%; + margin-top: -5px; + font-size: 12px; + line-height: 20px; + font-weight: normal; } + .el-step__description.is-process { + color: #303133; } + .el-step__description.is-wait { + color: #C0C4CC; } + .el-step__description.is-success { + color: #67C23A; } + .el-step__description.is-error { + color: #F56C6C; } + .el-step__description.is-finish { + color: #409EFF; } + .el-step.is-horizontal { + display: inline-block; } + .el-step.is-horizontal .el-step__line { + height: 2px; + top: 11px; + left: 0; + right: 0; } + .el-step.is-vertical { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-step.is-vertical .el-step__head { + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; + width: 24px; } + .el-step.is-vertical .el-step__main { + padding-left: 10px; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .el-step.is-vertical .el-step__title { + line-height: 24px; + padding-bottom: 8px; } + .el-step.is-vertical .el-step__line { + width: 2px; + top: 0; + bottom: 0; + left: 11px; } + .el-step.is-vertical .el-step__icon.is-icon { + width: 24px; } + .el-step.is-center .el-step__head { + text-align: center; } + .el-step.is-center .el-step__main { + text-align: center; } + .el-step.is-center .el-step__description { + padding-left: 20%; + padding-right: 20%; } + .el-step.is-center .el-step__line { + left: 50%; + right: -50%; } + .el-step.is-simple { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-step.is-simple .el-step__head { + width: auto; + font-size: 0; + padding-right: 10px; } + .el-step.is-simple .el-step__icon { + background: transparent; + width: 16px; + height: 16px; + font-size: 12px; } + .el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status) { + font-size: 18px; } + .el-step.is-simple .el-step__icon-inner.is-status { + -webkit-transform: scale(0.8) translateY(1px); + transform: scale(0.8) translateY(1px); } + .el-step.is-simple .el-step__main { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .el-step.is-simple .el-step__title { + font-size: 16px; + line-height: 20px; } + .el-step.is-simple:not(:last-of-type) .el-step__title { + max-width: 50%; + word-break: break-all; } + .el-step.is-simple .el-step__arrow { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-step.is-simple .el-step__arrow::before, .el-step.is-simple .el-step__arrow::after { + content: ''; + display: inline-block; + position: absolute; + height: 15px; + width: 1px; + background: #C0C4CC; } + .el-step.is-simple .el-step__arrow::before { + -webkit-transform: rotate(-45deg) translateY(-4px); + transform: rotate(-45deg) translateY(-4px); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; } + .el-step.is-simple .el-step__arrow::after { + -webkit-transform: rotate(45deg) translateY(4px); + transform: rotate(45deg) translateY(4px); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; } + .el-step.is-simple:last-of-type .el-step__arrow { + display: none; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-carousel { + position: relative; } + .el-carousel--horizontal { + overflow-x: hidden; } + .el-carousel--vertical { + overflow-y: hidden; } + .el-carousel__container { + position: relative; + height: 300px; } + .el-carousel__arrow { + border: none; + outline: none; + padding: 0; + margin: 0; + height: 36px; + width: 36px; + cursor: pointer; + -webkit-transition: .3s; + transition: .3s; + border-radius: 50%; + background-color: rgba(31, 45, 61, 0.11); + color: #FFFFFF; + position: absolute; + top: 50%; + z-index: 10; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + text-align: center; + font-size: 12px; } + .el-carousel__arrow--left { + left: 16px; } + .el-carousel__arrow--right { + right: 16px; } + .el-carousel__arrow:hover { + background-color: rgba(31, 45, 61, 0.23); } + .el-carousel__arrow i { + cursor: pointer; } + .el-carousel__indicators { + position: absolute; + list-style: none; + margin: 0; + padding: 0; + z-index: 2; } + .el-carousel__indicators--horizontal { + bottom: 0; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + .el-carousel__indicators--vertical { + right: 0; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .el-carousel__indicators--outside { + bottom: 26px; + text-align: center; + position: static; + -webkit-transform: none; + transform: none; } + .el-carousel__indicators--outside .el-carousel__indicator:hover button { + opacity: 0.64; } + .el-carousel__indicators--outside button { + background-color: #C0C4CC; + opacity: 0.24; } + .el-carousel__indicators--labels { + left: 0; + right: 0; + -webkit-transform: none; + transform: none; + text-align: center; } + .el-carousel__indicators--labels .el-carousel__button { + height: auto; + width: auto; + padding: 2px 18px; + font-size: 12px; } + .el-carousel__indicators--labels .el-carousel__indicator { + padding: 6px 4px; } + .el-carousel__indicator { + background-color: transparent; + cursor: pointer; } + .el-carousel__indicator:hover button { + opacity: 0.72; } + .el-carousel__indicator--horizontal { + display: inline-block; + padding: 12px 4px; } + .el-carousel__indicator--vertical { + padding: 4px 12px; } + .el-carousel__indicator--vertical .el-carousel__button { + width: 2px; + height: 15px; } + .el-carousel__indicator.is-active button { + opacity: 1; } + .el-carousel__button { + display: block; + opacity: 0.48; + width: 30px; + height: 2px; + background-color: #FFFFFF; + border: none; + outline: none; + padding: 0; + margin: 0; + cursor: pointer; + -webkit-transition: .3s; + transition: .3s; } + +.carousel-arrow-left-enter, +.carousel-arrow-left-leave-active { + -webkit-transform: translateY(-50%) translateX(-10px); + transform: translateY(-50%) translateX(-10px); + opacity: 0; } + +.carousel-arrow-right-enter, +.carousel-arrow-right-leave-active { + -webkit-transform: translateY(-50%) translateX(10px); + transform: translateY(-50%) translateX(10px); + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-carousel__item { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: inline-block; + overflow: hidden; + z-index: 0; } + .el-carousel__item.is-active { + z-index: 2; } + .el-carousel__item.is-animating { + -webkit-transition: -webkit-transform .4s ease-in-out; + transition: -webkit-transform .4s ease-in-out; + transition: transform .4s ease-in-out; + transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; } + .el-carousel__item--card { + width: 50%; + -webkit-transition: -webkit-transform .4s ease-in-out; + transition: -webkit-transform .4s ease-in-out; + transition: transform .4s ease-in-out; + transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; } + .el-carousel__item--card.is-in-stage { + cursor: pointer; + z-index: 1; } + .el-carousel__item--card.is-in-stage:hover .el-carousel__mask, + .el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask { + opacity: 0.12; } + .el-carousel__item--card.is-active { + z-index: 2; } + +.el-carousel__mask { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: #FFFFFF; + opacity: 0.24; + -webkit-transition: .2s; + transition: .2s; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-collapse { + border-top: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; } + +.el-collapse-item.is-disabled .el-collapse-item__header { + color: #bbb; + cursor: not-allowed; } + +.el-collapse-item__header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 48px; + line-height: 48px; + background-color: #FFFFFF; + color: #303133; + cursor: pointer; + border-bottom: 1px solid #EBEEF5; + font-size: 13px; + font-weight: 500; + -webkit-transition: border-bottom-color .3s; + transition: border-bottom-color .3s; + outline: none; } + .el-collapse-item__arrow { + margin: 0 8px 0 auto; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-weight: 300; } + .el-collapse-item__arrow.is-active { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-collapse-item__header.focusing:focus:not(:hover) { + color: #409EFF; } + .el-collapse-item__header.is-active { + border-bottom-color: transparent; } + +.el-collapse-item__wrap { + will-change: height; + background-color: #FFFFFF; + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-bottom: 1px solid #EBEEF5; } + +.el-collapse-item__content { + padding-bottom: 25px; + font-size: 13px; + color: #303133; + line-height: 1.769230769230769; } + +.el-collapse-item:last-child { + margin-bottom: -1px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-cascader-panel { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: 4px; + font-size: 14px; } + .el-cascader-panel.is-bordered { + border: solid 1px #E4E7ED; + border-radius: 4px; } + +.el-cascader-menu { + min-width: 180px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + border-right: solid 1px #E4E7ED; } + .el-cascader-menu:last-child { + border-right: none; } + .el-cascader-menu:last-child .el-cascader-node { + padding-right: 20px; } + .el-cascader-menu__wrap { + height: 204px; } + .el-cascader-menu__list { + position: relative; + min-height: 100%; + margin: 0; + padding: 6px 0; + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader-menu__hover-zone { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; } + .el-cascader-menu__empty-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + color: #C0C4CC; } + +.el-cascader-node { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0 30px 0 20px; + height: 34px; + line-height: 34px; + outline: none; } + .el-cascader-node.is-selectable.in-active-path { + color: #606266; } + .el-cascader-node.in-active-path, .el-cascader-node.is-selectable.in-checked-path, .el-cascader-node.is-active { + color: #409EFF; + font-weight: bold; } + .el-cascader-node:not(.is-disabled) { + cursor: pointer; } + .el-cascader-node:not(.is-disabled):hover, .el-cascader-node:not(.is-disabled):focus { + background: #F5F7FA; } + .el-cascader-node.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-cascader-node__prefix { + position: absolute; + left: 10px; } + .el-cascader-node__postfix { + position: absolute; + right: 10px; } + .el-cascader-node__label { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader-node > .el-radio { + margin-right: 0; } + .el-cascader-node > .el-radio .el-radio__label { + padding-left: 0; } + +.el-cascader { + display: inline-block; + position: relative; + font-size: 14px; + line-height: 40px; } + .el-cascader:not(.is-disabled):hover .el-input__inner { + cursor: pointer; + border-color: #C0C4CC; } + .el-cascader .el-input { + cursor: pointer; } + .el-cascader .el-input .el-input__inner { + text-overflow: ellipsis; } + .el-cascader .el-input .el-input__inner:focus { + border-color: #409EFF; } + .el-cascader .el-input .el-icon-arrow-down { + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-size: 14px; } + .el-cascader .el-input .el-icon-arrow-down.is-reverse { + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); } + .el-cascader .el-input .el-icon-circle-close:hover { + color: #909399; } + .el-cascader .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-cascader--medium { + font-size: 14px; + line-height: 36px; } + .el-cascader--small { + font-size: 13px; + line-height: 32px; } + .el-cascader--mini { + font-size: 12px; + line-height: 28px; } + .el-cascader.is-disabled .el-cascader__label { + z-index: 2; + color: #C0C4CC; } + .el-cascader__dropdown { + margin: 5px 0; + font-size: 14px; + background: #FFFFFF; + border: solid 1px #E4E7ED; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-cascader__tags { + position: absolute; + left: 0; + right: 30px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + line-height: normal; + text-align: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader__tags .el-tag { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + max-width: 100%; + margin: 2px 0 2px 6px; + text-overflow: ellipsis; + background: #f0f2f5; } + .el-cascader__tags .el-tag:not(.is-hit) { + border-color: transparent; } + .el-cascader__tags .el-tag > span { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader__tags .el-tag .el-icon-close { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + background-color: #C0C4CC; + color: #FFFFFF; } + .el-cascader__tags .el-tag .el-icon-close:hover { + background-color: #909399; } + .el-cascader__suggestion-panel { + border-radius: 4px; } + .el-cascader__suggestion-list { + max-height: 204px; + margin: 0; + padding: 6px 0; + font-size: 14px; + color: #606266; + text-align: center; } + .el-cascader__suggestion-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 34px; + padding: 0 15px; + text-align: left; + outline: none; + cursor: pointer; } + .el-cascader__suggestion-item:hover, .el-cascader__suggestion-item:focus { + background: #F5F7FA; } + .el-cascader__suggestion-item.is-checked { + color: #409EFF; + font-weight: bold; } + .el-cascader__suggestion-item > span { + margin-right: 10px; } + .el-cascader__empty-text { + margin: 10px 0; + color: #C0C4CC; } + .el-cascader__search-input { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + height: 24px; + min-width: 60px; + margin: 2px 0 2px 15px; + padding: 0; + color: #606266; + border: none; + outline: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader__search-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::-moz-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::placeholder { + color: #C0C4CC; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-color-predefine { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-size: 12px; + margin-top: 8px; + width: 280px; } + .el-color-predefine__colors { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-color-predefine__color-selector { + margin: 0 0 8px 8px; + width: 20px; + height: 20px; + border-radius: 4px; + cursor: pointer; } + .el-color-predefine__color-selector:nth-child(10n + 1) { + margin-left: 0; } + .el-color-predefine__color-selector.selected { + -webkit-box-shadow: 0 0 3px 2px #409EFF; + box-shadow: 0 0 3px 2px #409EFF; } + .el-color-predefine__color-selector > div { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 100%; + border-radius: 3px; } + .el-color-predefine__color-selector.is-alpha { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + +.el-color-hue-slider { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 280px; + height: 12px; + background-color: #f00; + padding: 0 2px; } + .el-color-hue-slider__bar { + position: relative; + background: -webkit-gradient(linear, left top, right top, from(#f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00)); + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); + height: 100%; } + .el-color-hue-slider__thumb { + position: absolute; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + left: 0; + top: 0; + width: 4px; + height: 100%; + border-radius: 1px; + background: #fff; + border: 1px solid #f0f0f0; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + z-index: 1; } + .el-color-hue-slider.is-vertical { + width: 12px; + height: 180px; + padding: 2px 0; } + .el-color-hue-slider.is-vertical .el-color-hue-slider__bar { + background: -webkit-gradient(linear, left top, left bottom, from(#f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00)); + background: linear-gradient(to bottom, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); } + .el-color-hue-slider.is-vertical .el-color-hue-slider__thumb { + left: 0; + top: 0; + width: 100%; + height: 4px; } + +.el-color-svpanel { + position: relative; + width: 280px; + height: 180px; } + .el-color-svpanel__white, .el-color-svpanel__black { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; } + .el-color-svpanel__white { + background: -webkit-gradient(linear, left top, right top, from(#fff), to(rgba(255, 255, 255, 0))); + background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0)); } + .el-color-svpanel__black { + background: -webkit-gradient(linear, left bottom, left top, from(#000), to(rgba(0, 0, 0, 0))); + background: linear-gradient(to top, #000, rgba(0, 0, 0, 0)); } + .el-color-svpanel__cursor { + position: absolute; } + .el-color-svpanel__cursor > div { + cursor: head; + width: 4px; + height: 4px; + -webkit-box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4); + border-radius: 50%; + -webkit-transform: translate(-2px, -2px); + transform: translate(-2px, -2px); } + +.el-color-alpha-slider { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 280px; + height: 12px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + .el-color-alpha-slider__bar { + position: relative; + background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), to(white)); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, white 100%); + height: 100%; } + .el-color-alpha-slider__thumb { + position: absolute; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + left: 0; + top: 0; + width: 4px; + height: 100%; + border-radius: 1px; + background: #fff; + border: 1px solid #f0f0f0; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + z-index: 1; } + .el-color-alpha-slider.is-vertical { + width: 20px; + height: 180px; } + .el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar { + background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(white)); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, white 100%); } + .el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb { + left: 0; + top: 0; + width: 100%; + height: 4px; } + +.el-color-dropdown { + width: 300px; } + .el-color-dropdown__main-wrapper { + margin-bottom: 6px; } + .el-color-dropdown__main-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-color-dropdown__btns { + margin-top: 6px; + text-align: right; } + .el-color-dropdown__value { + float: left; + line-height: 26px; + font-size: 12px; + color: #000000; + width: 160px; } + .el-color-dropdown__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-color-dropdown__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-color-dropdown__btn:hover { + color: #409EFF; + border-color: #409EFF; } + .el-color-dropdown__link-btn { + cursor: pointer; + color: #409EFF; + text-decoration: none; + padding: 15px; + font-size: 12px; } + .el-color-dropdown__link-btn:hover { + color: tint(#409EFF, 20%); } + +.el-color-picker { + display: inline-block; + position: relative; + line-height: normal; + height: 40px; } + .el-color-picker.is-disabled .el-color-picker__trigger { + cursor: not-allowed; } + .el-color-picker--medium { + height: 36px; } + .el-color-picker--medium .el-color-picker__trigger { + height: 36px; + width: 36px; } + .el-color-picker--medium .el-color-picker__mask { + height: 34px; + width: 34px; } + .el-color-picker--small { + height: 32px; } + .el-color-picker--small .el-color-picker__trigger { + height: 32px; + width: 32px; } + .el-color-picker--small .el-color-picker__mask { + height: 30px; + width: 30px; } + .el-color-picker--small .el-color-picker__icon, + .el-color-picker--small .el-color-picker__empty { + -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8); + transform: translate3d(-50%, -50%, 0) scale(0.8); } + .el-color-picker--mini { + height: 28px; } + .el-color-picker--mini .el-color-picker__trigger { + height: 28px; + width: 28px; } + .el-color-picker--mini .el-color-picker__mask { + height: 26px; + width: 26px; } + .el-color-picker--mini .el-color-picker__icon, + .el-color-picker--mini .el-color-picker__empty { + -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8); + transform: translate3d(-50%, -50%, 0) scale(0.8); } + .el-color-picker__mask { + height: 38px; + width: 38px; + border-radius: 4px; + position: absolute; + top: 1px; + left: 1px; + z-index: 1; + cursor: not-allowed; + background-color: rgba(255, 255, 255, 0.7); } + .el-color-picker__trigger { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; + width: 40px; + padding: 4px; + border: 1px solid #e6e6e6; + border-radius: 4px; + font-size: 0; + position: relative; + cursor: pointer; } + .el-color-picker__color { + position: relative; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #999; + border-radius: 2px; + width: 100%; + height: 100%; + text-align: center; } + .el-color-picker__color.is-alpha { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + .el-color-picker__color-inner { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; } + .el-color-picker__empty { + font-size: 12px; + color: #999; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); } + .el-color-picker__icon { + display: inline-block; + position: absolute; + width: 100%; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); + color: #FFFFFF; + text-align: center; + font-size: 12px; } + .el-color-picker__panel { + position: absolute; + z-index: 10; + padding: 6px; + -webkit-box-sizing: content-box; + box-sizing: content-box; + background-color: #FFFFFF; + border: 1px solid #EBEEF5; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +.el-transfer { + font-size: 14px; } + .el-transfer__buttons { + display: inline-block; + vertical-align: middle; + padding: 0 30px; } + .el-transfer__button { + display: block; + margin: 0 auto; + padding: 10px; + border-radius: 50%; + color: #FFFFFF; + background-color: #409EFF; + font-size: 0; } + .el-transfer__button.is-with-texts { + border-radius: 4px; } + .el-transfer__button.is-disabled { + border: 1px solid #DCDFE6; + background-color: #F5F7FA; + color: #C0C4CC; } + .el-transfer__button.is-disabled:hover { + border: 1px solid #DCDFE6; + background-color: #F5F7FA; + color: #C0C4CC; } + .el-transfer__button:first-child { + margin-bottom: 10px; } + .el-transfer__button:nth-child(2) { + margin: 0; } + .el-transfer__button i, .el-transfer__button span { + font-size: 14px; } + .el-transfer__button [class*="el-icon-"] + span { + margin-left: 0; } + +.el-transfer-panel { + border: 1px solid #EBEEF5; + border-radius: 4px; + overflow: hidden; + background: #FFFFFF; + display: inline-block; + vertical-align: middle; + width: 200px; + max-height: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; } + .el-transfer-panel__body { + height: 246px; } + .el-transfer-panel__body.is-with-footer { + padding-bottom: 40px; } + .el-transfer-panel__list { + margin: 0; + padding: 6px 0; + list-style: none; + height: 246px; + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-transfer-panel__list.is-filterable { + height: 194px; + padding-top: 0; } + .el-transfer-panel__item { + height: 30px; + line-height: 30px; + padding-left: 15px; + display: block !important; } + .el-transfer-panel__item + .el-transfer-panel__item { + margin-left: 0; } + .el-transfer-panel__item.el-checkbox { + color: #606266; } + .el-transfer-panel__item:hover { + color: #409EFF; } + .el-transfer-panel__item.el-checkbox .el-checkbox__label { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-left: 24px; + line-height: 30px; } + .el-transfer-panel__item .el-checkbox__input { + position: absolute; + top: 8px; } + .el-transfer-panel__filter { + text-align: center; + margin: 15px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: block; + width: auto; } + .el-transfer-panel__filter .el-input__inner { + height: 32px; + width: 100%; + font-size: 12px; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 16px; + padding-right: 10px; + padding-left: 30px; } + .el-transfer-panel__filter .el-input__icon { + margin-left: 5px; } + .el-transfer-panel__filter .el-icon-circle-close { + cursor: pointer; } + .el-transfer-panel .el-transfer-panel__header { + height: 40px; + line-height: 40px; + background: #F5F7FA; + margin: 0; + padding-left: 15px; + border-bottom: 1px solid #EBEEF5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #000000; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox { + display: block; + line-height: 40px; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label { + font-size: 16px; + color: #303133; + font-weight: normal; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span { + position: absolute; + right: 15px; + color: #909399; + font-size: 12px; + font-weight: normal; } + .el-transfer-panel .el-transfer-panel__footer { + height: 40px; + background: #FFFFFF; + margin: 0; + padding: 0; + border-top: 1px solid #EBEEF5; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + z-index: 1; } + .el-transfer-panel .el-transfer-panel__footer::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-transfer-panel .el-transfer-panel__footer .el-checkbox { + padding-left: 20px; + color: #606266; } + .el-transfer-panel .el-transfer-panel__empty { + margin: 0; + height: 30px; + line-height: 30px; + padding: 6px 15px 0; + color: #909399; + text-align: center; } + .el-transfer-panel .el-checkbox__label { + padding-left: 8px; } + .el-transfer-panel .el-checkbox__inner { + height: 14px; + width: 14px; + border-radius: 3px; } + .el-transfer-panel .el-checkbox__inner::after { + height: 6px; + width: 3px; + left: 4px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-preferred-size: auto; + flex-basis: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + min-width: 0; } + .el-container.is-vertical { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-header { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-aside { + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-main { + display: block; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-preferred-size: auto; + flex-basis: auto; + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-footer { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-timeline { + margin: 0; + font-size: 14px; + list-style: none; } + .el-timeline .el-timeline-item:last-child .el-timeline-item__tail { + display: none; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-timeline-item { + position: relative; + padding-bottom: 20px; } + .el-timeline-item__wrapper { + position: relative; + padding-left: 28px; + top: -3px; } + .el-timeline-item__tail { + position: absolute; + left: 4px; + height: 100%; + border-left: 2px solid #E4E7ED; } + .el-timeline-item__icon { + color: #FFFFFF; + font-size: 13px; } + .el-timeline-item__node { + position: absolute; + background-color: #E4E7ED; + border-radius: 50%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-timeline-item__node--normal { + left: -1px; + width: 12px; + height: 12px; } + .el-timeline-item__node--large { + left: -2px; + width: 14px; + height: 14px; } + .el-timeline-item__node--primary { + background-color: #409EFF; } + .el-timeline-item__node--success { + background-color: #67C23A; } + .el-timeline-item__node--warning { + background-color: #E6A23C; } + .el-timeline-item__node--danger { + background-color: #F56C6C; } + .el-timeline-item__node--info { + background-color: #909399; } + .el-timeline-item__dot { + position: absolute; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-timeline-item__content { + color: #303133; } + .el-timeline-item__timestamp { + color: #909399; + line-height: 1; + font-size: 13px; } + .el-timeline-item__timestamp.is-top { + margin-bottom: 8px; + padding-top: 4px; } + .el-timeline-item__timestamp.is-bottom { + margin-top: 8px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-link { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + vertical-align: middle; + position: relative; + text-decoration: none; + outline: none; + cursor: pointer; + padding: 0; + font-size: 14px; + font-weight: 500; } + .el-link.is-underline:hover:after { + content: ""; + position: absolute; + left: 0; + right: 0; + height: 0; + bottom: 0; + border-bottom: 1px solid #409EFF; } + .el-link.is-disabled { + cursor: not-allowed; } + .el-link [class*="el-icon-"] + span { + margin-left: 5px; } + .el-link.el-link--default { + color: #606266; } + .el-link.el-link--default:hover { + color: #409EFF; } + .el-link.el-link--default:after { + border-color: #409EFF; } + .el-link.el-link--default.is-disabled { + color: #C0C4CC; } + .el-link.el-link--primary { + color: #409EFF; } + .el-link.el-link--primary:hover { + color: #66b1ff; } + .el-link.el-link--primary:after { + border-color: #409EFF; } + .el-link.el-link--primary.is-disabled { + color: #a0cfff; } + .el-link.el-link--primary.is-underline:hover:after { + border-color: #409EFF; } + .el-link.el-link--danger { + color: #F56C6C; } + .el-link.el-link--danger:hover { + color: #f78989; } + .el-link.el-link--danger:after { + border-color: #F56C6C; } + .el-link.el-link--danger.is-disabled { + color: #fab6b6; } + .el-link.el-link--danger.is-underline:hover:after { + border-color: #F56C6C; } + .el-link.el-link--success { + color: #67C23A; } + .el-link.el-link--success:hover { + color: #85ce61; } + .el-link.el-link--success:after { + border-color: #67C23A; } + .el-link.el-link--success.is-disabled { + color: #b3e19d; } + .el-link.el-link--success.is-underline:hover:after { + border-color: #67C23A; } + .el-link.el-link--warning { + color: #E6A23C; } + .el-link.el-link--warning:hover { + color: #ebb563; } + .el-link.el-link--warning:after { + border-color: #E6A23C; } + .el-link.el-link--warning.is-disabled { + color: #f3d19e; } + .el-link.el-link--warning.is-underline:hover:after { + border-color: #E6A23C; } + .el-link.el-link--info { + color: #909399; } + .el-link.el-link--info:hover { + color: #a6a9ad; } + .el-link.el-link--info:after { + border-color: #909399; } + .el-link.el-link--info.is-disabled { + color: #c8c9cc; } + .el-link.el-link--info.is-underline:hover:after { + border-color: #909399; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-divider { + background-color: #DCDFE6; + position: relative; } + .el-divider--horizontal { + display: block; + height: 1px; + width: 100%; + margin: 24px 0; } + .el-divider--vertical { + display: inline-block; + width: 1px; + height: 1em; + margin: 0 8px; + vertical-align: middle; + position: relative; } + .el-divider__text { + position: absolute; + background-color: #FFFFFF; + padding: 0 20px; + font-weight: 500; + color: #303133; + font-size: 14px; } + .el-divider__text.is-left { + left: 20px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .el-divider__text.is-center { + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + .el-divider__text.is-right { + right: 20px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-image__inner, .el-image__placeholder, .el-image__error { + width: 100%; + height: 100%; } + +.el-image { + position: relative; + display: inline-block; + overflow: hidden; } + .el-image__inner { + vertical-align: top; } + .el-image__inner--center { + position: relative; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + display: block; } + .el-image__placeholder { + background: #F5F7FA; } + .el-image__error { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: 14px; + background: #F5F7FA; + color: #C0C4CC; + vertical-align: middle; } + .el-image__preview { + cursor: pointer; } + +.el-image-viewer__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; } + +.el-image-viewer__btn { + position: absolute; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + border-radius: 50%; + opacity: .8; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.el-image-viewer__close { + top: 40px; + right: 40px; + width: 40px; + height: 40px; + font-size: 40px; } + +.el-image-viewer__canvas { + width: 100%; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.el-image-viewer__actions { + left: 50%; + bottom: 30px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + width: 282px; + height: 44px; + padding: 0 23px; + background-color: #606266; + border-color: #fff; + border-radius: 22px; } + .el-image-viewer__actions__inner { + width: 100%; + height: 100%; + text-align: justify; + cursor: default; + font-size: 23px; + color: #fff; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: distribute; + justify-content: space-around; } + +.el-image-viewer__prev { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 44px; + height: 44px; + font-size: 24px; + color: #fff; + background-color: #606266; + border-color: #fff; + left: 40px; } + +.el-image-viewer__next { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 44px; + height: 44px; + font-size: 24px; + color: #fff; + background-color: #606266; + border-color: #fff; + right: 40px; + text-indent: 2px; } + +.el-image-viewer__mask { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + opacity: .5; + background: #000; } + +.viewer-fade-enter-active { + -webkit-animation: viewer-fade-in .3s; + animation: viewer-fade-in .3s; } + +.viewer-fade-leave-active { + -webkit-animation: viewer-fade-out .3s; + animation: viewer-fade-out .3s; } + +@-webkit-keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +.el-calendar { + background-color: #fff; } + .el-calendar__header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 12px 20px; + border-bottom: 1px solid #EBEEF5; } + .el-calendar__title { + color: #000000; + -ms-flex-item-align: center; + align-self: center; } + .el-calendar__body { + padding: 12px 20px 35px; } + +.el-calendar-table { + table-layout: fixed; + width: 100%; } + .el-calendar-table thead th { + padding: 12px 0; + color: #606266; + font-weight: normal; } + .el-calendar-table:not(.is-range) td.prev, + .el-calendar-table:not(.is-range) td.next { + color: #C0C4CC; } + .el-calendar-table td { + border-bottom: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + vertical-align: top; + -webkit-transition: background-color 0.2s ease; + transition: background-color 0.2s ease; } + .el-calendar-table td.is-selected { + background-color: #F2F8FE; } + .el-calendar-table td.is-today { + color: #409EFF; } + .el-calendar-table tr:first-child td { + border-top: 1px solid #EBEEF5; } + .el-calendar-table tr td:first-child { + border-left: 1px solid #EBEEF5; } + .el-calendar-table tr.el-calendar-table__row--hide-border td { + border-top: none; } + .el-calendar-table .el-calendar-day { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 8px; + height: 85px; } + .el-calendar-table .el-calendar-day:hover { + cursor: pointer; + background-color: #F2F8FE; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-backtop { + position: fixed; + background-color: #FFFFFF; + width: 40px; + height: 40px; + border-radius: 50%; + color: #409EFF; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + font-size: 20px; + -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 0 6px rgba(0, 0, 0, 0.12); + cursor: pointer; + z-index: 5; } + .el-backtop:hover { + background-color: #F2F6FC; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-page-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + line-height: 24px; } + .el-page-header__left { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + cursor: pointer; + margin-right: 40px; + position: relative; } + .el-page-header__left::after { + content: ""; + position: absolute; + width: 1px; + height: 16px; + right: -20px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + background-color: #DCDFE6; } + .el-page-header__left .el-icon-back { + font-size: 18px; + margin-right: 6px; + -ms-flex-item-align: center; + align-self: center; } + .el-page-header__title { + font-size: 14px; + font-weight: 500; } + .el-page-header__content { + font-size: 18px; + color: #303133; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-cascader-panel { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: 4px; + font-size: 14px; } + .el-cascader-panel.is-bordered { + border: solid 1px #E4E7ED; + border-radius: 4px; } + +.el-cascader-menu { + min-width: 180px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + border-right: solid 1px #E4E7ED; } + .el-cascader-menu:last-child { + border-right: none; } + .el-cascader-menu:last-child .el-cascader-node { + padding-right: 20px; } + .el-cascader-menu__wrap { + height: 204px; } + .el-cascader-menu__list { + position: relative; + min-height: 100%; + margin: 0; + padding: 6px 0; + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader-menu__hover-zone { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; } + .el-cascader-menu__empty-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + color: #C0C4CC; } + +.el-cascader-node { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0 30px 0 20px; + height: 34px; + line-height: 34px; + outline: none; } + .el-cascader-node.is-selectable.in-active-path { + color: #606266; } + .el-cascader-node.in-active-path, .el-cascader-node.is-selectable.in-checked-path, .el-cascader-node.is-active { + color: #409EFF; + font-weight: bold; } + .el-cascader-node:not(.is-disabled) { + cursor: pointer; } + .el-cascader-node:not(.is-disabled):hover, .el-cascader-node:not(.is-disabled):focus { + background: #F5F7FA; } + .el-cascader-node.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-cascader-node__prefix { + position: absolute; + left: 10px; } + .el-cascader-node__postfix { + position: absolute; + right: 10px; } + .el-cascader-node__label { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader-node > .el-radio { + margin-right: 0; } + .el-cascader-node > .el-radio .el-radio__label { + padding-left: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-avatar { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; + color: #fff; + background: #C0C4CC; + width: 40px; + height: 40px; + line-height: 40px; + font-size: 14px; } + .el-avatar > img { + display: block; + height: 100%; + vertical-align: middle; } + .el-avatar--circle { + border-radius: 50%; } + .el-avatar--square { + border-radius: 4px; } + .el-avatar--icon { + font-size: 18px; } + .el-avatar--large { + width: 40px; + height: 40px; + line-height: 40px; } + .el-avatar--medium { + width: 36px; + height: 36px; + line-height: 36px; } + .el-avatar--small { + width: 28px; + height: 28px; + line-height: 28px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@-webkit-keyframes el-drawer-fade-in { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } +@keyframes el-drawer-fade-in { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } + +@-webkit-keyframes rtl-drawer-in { + 0% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes rtl-drawer-in { + 0% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes rtl-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } } + +@keyframes rtl-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } } + +@-webkit-keyframes ltr-drawer-in { + 0% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes ltr-drawer-in { + 0% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes ltr-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } } + +@keyframes ltr-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } } + +@-webkit-keyframes ttb-drawer-in { + 0% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes ttb-drawer-in { + 0% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes ttb-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } } + +@keyframes ttb-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } } + +@-webkit-keyframes btt-drawer-in { + 0% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes btt-drawer-in { + 0% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes btt-drawer-out { + 0% { + -webkit-transform: translate(0px, 0); + transform: translate(0px, 0); } + 100% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } } + +@keyframes btt-drawer-out { + 0% { + -webkit-transform: translate(0px, 0); + transform: translate(0px, 0); } + 100% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } } + +.el-drawer { + position: absolute; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background-color: #FFFFFF; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.2), 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12); + box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.2), 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12); + overflow: hidden; } + .el-drawer.rtl { + -webkit-animation: rtl-drawer-out 0.3s; + animation: rtl-drawer-out 0.3s; } + .el-drawer__open .el-drawer.rtl { + -webkit-animation: rtl-drawer-in 0.3s 1ms; + animation: rtl-drawer-in 0.3s 1ms; } + .el-drawer.ltr { + -webkit-animation: ltr-drawer-out 0.3s; + animation: ltr-drawer-out 0.3s; } + .el-drawer__open .el-drawer.ltr { + -webkit-animation: ltr-drawer-in 0.3s 1ms; + animation: ltr-drawer-in 0.3s 1ms; } + .el-drawer.ttb { + -webkit-animation: ttb-drawer-out 0.3s; + animation: ttb-drawer-out 0.3s; } + .el-drawer__open .el-drawer.ttb { + -webkit-animation: ttb-drawer-in 0.3s 1ms; + animation: ttb-drawer-in 0.3s 1ms; } + .el-drawer.btt { + -webkit-animation: btt-drawer-out 0.3s; + animation: btt-drawer-out 0.3s; } + .el-drawer__open .el-drawer.btt { + -webkit-animation: btt-drawer-in 0.3s 1ms; + animation: btt-drawer-in 0.3s 1ms; } + .el-drawer__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + margin: 0; } + .el-drawer__header { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #72767b; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-bottom: 32px; + padding: 20px; + padding-bottom: 0; } + .el-drawer__header > :first-child { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; } + .el-drawer__title { + margin: 0; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + line-height: inherit; + font-size: 1rem; } + .el-drawer__close-btn { + border: none; + cursor: pointer; + font-size: 20px; + color: inherit; + background-color: transparent; } + .el-drawer__body { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; } + .el-drawer__body > * { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-drawer.ltr, .el-drawer.rtl { + height: 100%; + top: 0; + bottom: 0; } + .el-drawer.ttb, .el-drawer.btt { + width: 100%; + left: 0; + right: 0; } + .el-drawer.ltr { + left: 0; } + .el-drawer.rtl { + right: 0; } + .el-drawer.ttb { + top: 0; } + .el-drawer.btt { + bottom: 0; } + +.el-drawer__container { + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + height: 100%; + width: 100%; } + +.el-drawer-fade-enter-active { + -webkit-animation: el-drawer-fade-in .3s; + animation: el-drawer-fade-in .3s; } + +.el-drawer-fade-leave-active { + animation: el-drawer-fade-in .3s reverse; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popconfirm__main { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.el-popconfirm__icon { + margin-right: 5px; } + +.el-popconfirm__action { + text-align: right; + margin: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/infinite-scroll.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/infinite-scroll.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/infiniteScroll.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/infiniteScroll.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/input-number.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/input-number.css new file mode 100644 index 00000000..fc3fd524 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/input-number.css @@ -0,0 +1,891 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-input-number { + position: relative; + display: inline-block; + width: 180px; + line-height: 38px; } + .el-input-number .el-input { + display: block; } + .el-input-number .el-input__inner { + -webkit-appearance: none; + padding-left: 50px; + padding-right: 50px; + text-align: center; } + .el-input-number__increase, .el-input-number__decrease { + position: absolute; + z-index: 1; + top: 1px; + width: 40px; + height: auto; + text-align: center; + background: #F5F7FA; + color: #606266; + cursor: pointer; + font-size: 13px; } + .el-input-number__increase:hover, .el-input-number__decrease:hover { + color: #409EFF; } + .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled), .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) { + border-color: #409EFF; } + .el-input-number__increase.is-disabled, .el-input-number__decrease.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-input-number__increase { + right: 1px; + border-radius: 0 4px 4px 0; + border-left: 1px solid #DCDFE6; } + .el-input-number__decrease { + left: 1px; + border-radius: 4px 0 0 4px; + border-right: 1px solid #DCDFE6; } + .el-input-number.is-disabled .el-input-number__increase, .el-input-number.is-disabled .el-input-number__decrease { + border-color: #E4E7ED; + color: #E4E7ED; } + .el-input-number.is-disabled .el-input-number__increase:hover, .el-input-number.is-disabled .el-input-number__decrease:hover { + color: #E4E7ED; + cursor: not-allowed; } + .el-input-number--medium { + width: 200px; + line-height: 34px; } + .el-input-number--medium .el-input-number__increase, .el-input-number--medium .el-input-number__decrease { + width: 36px; + font-size: 14px; } + .el-input-number--medium .el-input__inner { + padding-left: 43px; + padding-right: 43px; } + .el-input-number--small { + width: 130px; + line-height: 30px; } + .el-input-number--small .el-input-number__increase, .el-input-number--small .el-input-number__decrease { + width: 32px; + font-size: 13px; } + .el-input-number--small .el-input-number__increase [class*=el-icon], .el-input-number--small .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.9); + transform: scale(0.9); } + .el-input-number--small .el-input__inner { + padding-left: 39px; + padding-right: 39px; } + .el-input-number--mini { + width: 130px; + line-height: 26px; } + .el-input-number--mini .el-input-number__increase, .el-input-number--mini .el-input-number__decrease { + width: 28px; + font-size: 12px; } + .el-input-number--mini .el-input-number__increase [class*=el-icon], .el-input-number--mini .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number--mini .el-input__inner { + padding-left: 35px; + padding-right: 35px; } + .el-input-number.is-without-controls .el-input__inner { + padding-left: 15px; + padding-right: 15px; } + .el-input-number.is-controls-right .el-input__inner { + padding-left: 15px; + padding-right: 50px; } + .el-input-number.is-controls-right .el-input-number__increase, .el-input-number.is-controls-right .el-input-number__decrease { + height: auto; + line-height: 19px; } + .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon], .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number.is-controls-right .el-input-number__increase { + border-radius: 0 4px 0 0; + border-bottom: 1px solid #DCDFE6; } + .el-input-number.is-controls-right .el-input-number__decrease { + right: 1px; + bottom: 1px; + top: auto; + left: auto; + border-right: none; + border-left: 1px solid #DCDFE6; + border-radius: 0 0 4px 0; } + .el-input-number.is-controls-right[class*=medium] [class*=increase], .el-input-number.is-controls-right[class*=medium] [class*=decrease] { + line-height: 17px; } + .el-input-number.is-controls-right[class*=small] [class*=increase], .el-input-number.is-controls-right[class*=small] [class*=decrease] { + line-height: 15px; } + .el-input-number.is-controls-right[class*=mini] [class*=increase], .el-input-number.is-controls-right[class*=mini] [class*=decrease] { + line-height: 13px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/input.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/input.css new file mode 100644 index 00000000..70bc38f3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/input.css @@ -0,0 +1,534 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/link.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/link.css new file mode 100644 index 00000000..2e69c87c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/link.css @@ -0,0 +1,342 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-link { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + vertical-align: middle; + position: relative; + text-decoration: none; + outline: none; + cursor: pointer; + padding: 0; + font-size: 14px; + font-weight: 500; } + .el-link.is-underline:hover:after { + content: ""; + position: absolute; + left: 0; + right: 0; + height: 0; + bottom: 0; + border-bottom: 1px solid #409EFF; } + .el-link.is-disabled { + cursor: not-allowed; } + .el-link [class*="el-icon-"] + span { + margin-left: 5px; } + .el-link.el-link--default { + color: #606266; } + .el-link.el-link--default:hover { + color: #409EFF; } + .el-link.el-link--default:after { + border-color: #409EFF; } + .el-link.el-link--default.is-disabled { + color: #C0C4CC; } + .el-link.el-link--primary { + color: #409EFF; } + .el-link.el-link--primary:hover { + color: #66b1ff; } + .el-link.el-link--primary:after { + border-color: #409EFF; } + .el-link.el-link--primary.is-disabled { + color: #a0cfff; } + .el-link.el-link--primary.is-underline:hover:after { + border-color: #409EFF; } + .el-link.el-link--danger { + color: #F56C6C; } + .el-link.el-link--danger:hover { + color: #f78989; } + .el-link.el-link--danger:after { + border-color: #F56C6C; } + .el-link.el-link--danger.is-disabled { + color: #fab6b6; } + .el-link.el-link--danger.is-underline:hover:after { + border-color: #F56C6C; } + .el-link.el-link--success { + color: #67C23A; } + .el-link.el-link--success:hover { + color: #85ce61; } + .el-link.el-link--success:after { + border-color: #67C23A; } + .el-link.el-link--success.is-disabled { + color: #b3e19d; } + .el-link.el-link--success.is-underline:hover:after { + border-color: #67C23A; } + .el-link.el-link--warning { + color: #E6A23C; } + .el-link.el-link--warning:hover { + color: #ebb563; } + .el-link.el-link--warning:after { + border-color: #E6A23C; } + .el-link.el-link--warning.is-disabled { + color: #f3d19e; } + .el-link.el-link--warning.is-underline:hover:after { + border-color: #E6A23C; } + .el-link.el-link--info { + color: #909399; } + .el-link.el-link--info:hover { + color: #a6a9ad; } + .el-link.el-link--info:after { + border-color: #909399; } + .el-link.el-link--info.is-disabled { + color: #c8c9cc; } + .el-link.el-link--info.is-underline:hover:after { + border-color: #909399; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/loading.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/loading.css new file mode 100644 index 00000000..5d4f9dae --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/loading.css @@ -0,0 +1,336 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-loading-parent--relative { + position: relative !important; } + +.el-loading-parent--hidden { + overflow: hidden !important; } + +.el-loading-mask { + position: absolute; + z-index: 2000; + background-color: rgba(255, 255, 255, 0.9); + margin: 0; + top: 0; + right: 0; + bottom: 0; + left: 0; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; } + .el-loading-mask.is-fullscreen { + position: fixed; } + .el-loading-mask.is-fullscreen .el-loading-spinner { + margin-top: -25px; } + .el-loading-mask.is-fullscreen .el-loading-spinner .circular { + height: 50px; + width: 50px; } + +.el-loading-spinner { + top: 50%; + margin-top: -21px; + width: 100%; + text-align: center; + position: absolute; } + .el-loading-spinner .el-loading-text { + color: #409EFF; + margin: 3px 0; + font-size: 14px; } + .el-loading-spinner .circular { + height: 42px; + width: 42px; + -webkit-animation: loading-rotate 2s linear infinite; + animation: loading-rotate 2s linear infinite; } + .el-loading-spinner .path { + -webkit-animation: loading-dash 1.5s ease-in-out infinite; + animation: loading-dash 1.5s ease-in-out infinite; + stroke-dasharray: 90, 150; + stroke-dashoffset: 0; + stroke-width: 2; + stroke: #409EFF; + stroke-linecap: round; } + .el-loading-spinner i { + color: #409EFF; } + +.el-loading-fade-enter, +.el-loading-fade-leave-active { + opacity: 0; } + +@-webkit-keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-webkit-keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; } } + +@keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/main.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/main.css new file mode 100644 index 00000000..c792e5aa --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/main.css @@ -0,0 +1,261 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-main { + display: block; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-preferred-size: auto; + flex-basis: auto; + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/menu-item-group.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/menu-item-group.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/menu-item.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/menu-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/menu.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/menu.css new file mode 100644 index 00000000..07fe584e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/menu.css @@ -0,0 +1,719 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-menu { + border-right: solid 1px #e6e6e6; + list-style: none; + position: relative; + margin: 0; + padding-left: 0; + background-color: #272C34; } + .el-menu::before, + .el-menu::after { + display: table; + content: ""; } + .el-menu::after { + clear: both; } + .el-menu.el-menu--horizontal { + border-bottom: solid 1px #e6e6e6; } + .el-menu--horizontal { + border-right: none; } + .el-menu--horizontal > .el-menu-item { + float: left; + height: 60px; + line-height: 60px; + margin: 0; + border-bottom: 2px solid transparent; + color: #909399; } + .el-menu--horizontal > .el-menu-item a, + .el-menu--horizontal > .el-menu-item a:hover { + color: inherit; } + .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus { + background-color: #fff; } + .el-menu--horizontal > .el-submenu { + float: left; } + .el-menu--horizontal > .el-submenu:focus, .el-menu--horizontal > .el-submenu:hover { + outline: none; } + .el-menu--horizontal > .el-submenu:focus .el-submenu__title, .el-menu--horizontal > .el-submenu:hover .el-submenu__title { + color: #303133; } + .el-menu--horizontal > .el-submenu.is-active .el-submenu__title { + border-bottom: 2px solid #409EFF; + color: #303133; } + .el-menu--horizontal > .el-submenu .el-submenu__title { + height: 60px; + line-height: 60px; + border-bottom: 2px solid transparent; + color: #909399; } + .el-menu--horizontal > .el-submenu .el-submenu__title:hover { + background-color: #fff; } + .el-menu--horizontal > .el-submenu .el-submenu__icon-arrow { + position: static; + vertical-align: middle; + margin-left: 8px; + margin-top: -3px; } + .el-menu--horizontal .el-menu .el-menu-item, + .el-menu--horizontal .el-menu .el-submenu__title { + background-color: #FFFFFF; + float: none; + height: 36px; + line-height: 36px; + padding: 0 10px; + color: #909399; } + .el-menu--horizontal .el-menu .el-menu-item.is-active, + .el-menu--horizontal .el-menu .el-submenu.is-active > .el-submenu__title { + color: #303133; } + .el-menu--horizontal .el-menu-item:not(.is-disabled):hover, + .el-menu--horizontal .el-menu-item:not(.is-disabled):focus { + outline: none; + color: #303133; } + .el-menu--horizontal > .el-menu-item.is-active { + border-bottom: 2px solid #409EFF; + color: #303133; } + .el-menu--collapse { + width: 64px; } + .el-menu--collapse > .el-menu-item [class^="el-icon-"], + .el-menu--collapse > .el-submenu > .el-submenu__title [class^="el-icon-"] { + margin: 0; + vertical-align: middle; + width: 24px; + text-align: center; } + .el-menu--collapse > .el-menu-item .el-submenu__icon-arrow, + .el-menu--collapse > .el-submenu > .el-submenu__title .el-submenu__icon-arrow { + display: none; } + .el-menu--collapse > .el-menu-item span, + .el-menu--collapse > .el-submenu > .el-submenu__title span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; } + .el-menu--collapse > .el-menu-item.is-active i { + color: inherit; } + .el-menu--collapse .el-menu .el-submenu { + min-width: 200px; } + .el-menu--collapse .el-submenu { + position: relative; } + .el-menu--collapse .el-submenu .el-menu { + position: absolute; + margin-left: 5px; + top: 0; + left: 100%; + z-index: 10; + border: 1px solid #E4E7ED; + border-radius: 2px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-menu--collapse .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow { + -webkit-transform: none; + transform: none; } + .el-menu--popup { + z-index: 100; + min-width: 200px; + border: none; + padding: 5px 0; + border-radius: 2px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-menu--popup-bottom-start { + margin-top: 5px; } + .el-menu--popup-right-start { + margin-left: 5px; + margin-right: 5px; } + +.el-menu-item { + height: 56px; + line-height: 56px; + font-size: 14px; + color: #FFFFFF; + padding: 0 20px; + list-style: none; + cursor: pointer; + position: relative; + -webkit-transition: border-color .3s, background-color .3s, color .3s; + transition: border-color .3s, background-color .3s, color .3s; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-menu-item * { + vertical-align: middle; } + .el-menu-item i { + color: #909399; } + .el-menu-item:hover, .el-menu-item:focus { + outline: none; + background-color: #409EFF; } + .el-menu-item.is-disabled { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-menu-item [class^="el-icon-"] { + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; + vertical-align: middle; } + .el-menu-item.is-active { + color: #409EFF; } + .el-menu-item.is-active i { + color: inherit; } + +.el-submenu { + list-style: none; + margin: 0; + padding-left: 0; } + .el-submenu__title { + height: 56px; + line-height: 56px; + font-size: 14px; + color: #FFFFFF; + padding: 0 20px; + list-style: none; + cursor: pointer; + position: relative; + -webkit-transition: border-color .3s, background-color .3s, color .3s; + transition: border-color .3s, background-color .3s, color .3s; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-submenu__title * { + vertical-align: middle; } + .el-submenu__title i { + color: #909399; } + .el-submenu__title:hover, .el-submenu__title:focus { + outline: none; + background-color: #409EFF; } + .el-submenu__title.is-disabled { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-submenu__title:hover { + background-color: #409EFF; } + .el-submenu .el-menu { + border: none; } + .el-submenu .el-menu-item { + height: 50px; + line-height: 50px; + padding: 0 45px; + min-width: 200px; } + .el-submenu__icon-arrow { + position: absolute; + top: 50%; + right: 20px; + margin-top: -7px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-size: 12px; } + .el-submenu.is-active .el-submenu__title { + border-bottom-color: #409EFF; } + .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow { + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); } + .el-submenu.is-disabled .el-submenu__title, + .el-submenu.is-disabled .el-menu-item { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-submenu [class^="el-icon-"] { + vertical-align: middle; + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; } + +.el-menu-item-group > ul { + padding: 0; } + +.el-menu-item-group__title { + padding: 7px 0 7px 20px; + line-height: normal; + font-size: 12px; + color: #909399; } + +.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow { + -webkit-transition: .2s; + transition: .2s; + opacity: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/message-box.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/message-box.css new file mode 100644 index 00000000..65b237d3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/message-box.css @@ -0,0 +1,2018 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.v-modal-enter { + -webkit-animation: v-modal-in .2s ease; + animation: v-modal-in .2s ease; } + +.v-modal-leave { + -webkit-animation: v-modal-out .2s ease forwards; + animation: v-modal-out .2s ease forwards; } + +@-webkit-keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@-webkit-keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +@keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +.v-modal { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.5; + background: #000000; } + +.el-popup-parent--hidden { + overflow: hidden; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-message-box { + display: inline-block; + width: 420px; + padding-bottom: 10px; + vertical-align: middle; + background-color: #FFFFFF; + border-radius: 4px; + border: 1px solid #EBEEF5; + font-size: 18px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + text-align: left; + overflow: hidden; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .el-message-box__wrapper { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + text-align: center; } + .el-message-box__wrapper::after { + content: ""; + display: inline-block; + height: 100%; + width: 0; + vertical-align: middle; } + .el-message-box__header { + position: relative; + padding: 15px; + padding-bottom: 10px; } + .el-message-box__title { + padding-left: 0; + margin-bottom: 0; + font-size: 18px; + line-height: 1; + color: #303133; } + .el-message-box__headerbtn { + position: absolute; + top: 15px; + right: 15px; + padding: 0; + border: none; + outline: none; + background: transparent; + font-size: 16px; + cursor: pointer; } + .el-message-box__headerbtn .el-message-box__close { + color: #909399; } + .el-message-box__headerbtn:focus .el-message-box__close, .el-message-box__headerbtn:hover .el-message-box__close { + color: #409EFF; } + .el-message-box__content { + padding: 10px 15px; + color: #606266; + font-size: 14px; } + .el-message-box__container { + position: relative; } + .el-message-box__input { + padding-top: 15px; } + .el-message-box__input input.invalid { + border-color: #F56C6C; } + .el-message-box__input input.invalid:focus { + border-color: #F56C6C; } + .el-message-box__status { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-size: 24px !important; } + .el-message-box__status::before { + padding-left: 1px; } + .el-message-box__status + .el-message-box__message { + padding-left: 36px; + padding-right: 12px; } + .el-message-box__status.el-icon-success { + color: #67C23A; } + .el-message-box__status.el-icon-info { + color: #909399; } + .el-message-box__status.el-icon-warning { + color: #E6A23C; } + .el-message-box__status.el-icon-error { + color: #F56C6C; } + .el-message-box__message { + margin: 0; } + .el-message-box__message p { + margin: 0; + line-height: 24px; } + .el-message-box__errormsg { + color: #F56C6C; + font-size: 12px; + min-height: 18px; + margin-top: 2px; } + .el-message-box__btns { + padding: 5px 15px 0; + text-align: right; } + .el-message-box__btns button:nth-child(2) { + margin-left: 10px; } + .el-message-box__btns-reverse { + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .el-message-box--center { + padding-bottom: 30px; } + .el-message-box--center .el-message-box__header { + padding-top: 30px; } + .el-message-box--center .el-message-box__title { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-message-box--center .el-message-box__status { + position: relative; + top: auto; + padding-right: 5px; + text-align: center; + -webkit-transform: translateY(-1px); + transform: translateY(-1px); } + .el-message-box--center .el-message-box__message { + margin-left: 0; } + .el-message-box--center .el-message-box__btns, .el-message-box--center .el-message-box__content { + text-align: center; } + .el-message-box--center .el-message-box__content { + padding-left: 27px; + padding-right: 27px; } + +.msgbox-fade-enter-active { + -webkit-animation: msgbox-fade-in .3s; + animation: msgbox-fade-in .3s; } + +.msgbox-fade-leave-active { + -webkit-animation: msgbox-fade-out .3s; + animation: msgbox-fade-out .3s; } + +@-webkit-keyframes msgbox-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes msgbox-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes msgbox-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes msgbox-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/message.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/message.css new file mode 100644 index 00000000..184ec4a3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/message.css @@ -0,0 +1,336 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-message { + min-width: 380px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + border-width: 1px; + border-style: solid; + border-color: #EBEEF5; + position: fixed; + left: 50%; + top: 20px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + background-color: #edf2fc; + -webkit-transition: opacity 0.3s, top 0.4s, -webkit-transform .4s; + transition: opacity 0.3s, top 0.4s, -webkit-transform .4s; + transition: opacity 0.3s, transform .4s, top 0.4s; + transition: opacity 0.3s, transform .4s, top 0.4s, -webkit-transform .4s; + overflow: hidden; + padding: 15px 15px 15px 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-message.is-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-message.is-closable .el-message__content { + padding-right: 16px; } + .el-message p { + margin: 0; } + .el-message--info .el-message__content { + color: #909399; } + .el-message--success { + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-message--success .el-message__content { + color: #67C23A; } + .el-message--warning { + background-color: #fdf6ec; + border-color: #faecd8; } + .el-message--warning .el-message__content { + color: #E6A23C; } + .el-message--error { + background-color: #fef0f0; + border-color: #fde2e2; } + .el-message--error .el-message__content { + color: #F56C6C; } + .el-message__icon { + margin-right: 10px; } + .el-message__content { + padding: 0; + font-size: 14px; + line-height: 1; } + .el-message__content:focus { + outline-width: 0; } + .el-message__closeBtn { + position: absolute; + top: 50%; + right: 15px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + color: #C0C4CC; + font-size: 16px; } + .el-message__closeBtn:focus { + outline-width: 0; } + .el-message__closeBtn:hover { + color: #909399; } + .el-message .el-icon-success { + color: #67C23A; } + .el-message .el-icon-error { + color: #F56C6C; } + .el-message .el-icon-info { + color: #909399; } + .el-message .el-icon-warning { + color: #E6A23C; } + +.el-message-fade-enter, +.el-message-fade-leave-active { + opacity: 0; + -webkit-transform: translate(-50%, -100%); + transform: translate(-50%, -100%); } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/notification.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/notification.css new file mode 100644 index 00000000..eb914e4d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/notification.css @@ -0,0 +1,323 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-notification { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 330px; + padding: 14px 26px 14px 13px; + border-radius: 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #EBEEF5; + position: fixed; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-transition: opacity .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + transition: opacity .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + transition: opacity .3s, transform .3s, left .3s, right .3s, top 0.4s, bottom .3s; + transition: opacity .3s, transform .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + overflow: hidden; } + .el-notification.right { + right: 16px; } + .el-notification.left { + left: 16px; } + .el-notification__group { + margin-left: 13px; + margin-right: 8px; } + .el-notification__title { + font-weight: bold; + font-size: 16px; + color: #303133; + margin: 0; } + .el-notification__content { + font-size: 14px; + line-height: 21px; + margin: 6px 0 0 0; + color: #606266; + text-align: justify; } + .el-notification__content p { + margin: 0; } + .el-notification__icon { + height: 24px; + width: 24px; + font-size: 24px; } + .el-notification__closeBtn { + position: absolute; + top: 18px; + right: 15px; + cursor: pointer; + color: #909399; + font-size: 16px; } + .el-notification__closeBtn:hover { + color: #606266; } + .el-notification .el-icon-success { + color: #67C23A; } + .el-notification .el-icon-error { + color: #F56C6C; } + .el-notification .el-icon-info { + color: #909399; } + .el-notification .el-icon-warning { + color: #E6A23C; } + +.el-notification-fade-enter.right { + right: 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + +.el-notification-fade-enter.left { + left: 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + +.el-notification-fade-leave-active { + opacity: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/option-group.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/option-group.css new file mode 100644 index 00000000..ebbe7d4c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/option-group.css @@ -0,0 +1,276 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/option.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/option.css new file mode 100644 index 00000000..7ea10207 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/option.css @@ -0,0 +1,273 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/page-header.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/page-header.css new file mode 100644 index 00000000..f73ce3da --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/page-header.css @@ -0,0 +1,283 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-page-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + line-height: 24px; } + .el-page-header__left { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + cursor: pointer; + margin-right: 40px; + position: relative; } + .el-page-header__left::after { + content: ""; + position: absolute; + width: 1px; + height: 16px; + right: -20px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + background-color: #DCDFE6; } + .el-page-header__left .el-icon-back { + font-size: 18px; + margin-right: 6px; + -ms-flex-item-align: center; + align-self: center; } + .el-page-header__title { + font-size: 14px; + font-weight: 500; } + .el-page-header__content { + font-size: 18px; + color: #303133; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/pagination.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/pagination.css new file mode 100644 index 00000000..2c612471 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/pagination.css @@ -0,0 +1,3275 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-select { + display: inline-block; + position: relative; } + .el-select .el-select__tags +> span { + display: contents; } + .el-select:hover .el-input__inner { + border-color: #C0C4CC; } + .el-select .el-input__inner { + cursor: pointer; + padding-right: 35px; } + .el-select .el-input__inner:focus { + border-color: #409EFF; } + .el-select .el-input .el-select__caret { + color: #C0C4CC; + font-size: 14px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + cursor: pointer; } + .el-select .el-input .el-select__caret.is-reverse { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + .el-select .el-input .el-select__caret.is-show-close { + font-size: 14px; + text-align: center; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + border-radius: 100%; + color: #C0C4CC; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-select .el-input .el-select__caret.is-show-close:hover { + color: #909399; } + .el-select .el-input.is-disabled .el-input__inner { + cursor: not-allowed; } + .el-select .el-input.is-disabled .el-input__inner:hover { + border-color: #E4E7ED; } + .el-select .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-select > .el-input { + display: block; } + .el-select__input { + border: none; + outline: none; + padding: 0; + margin-left: 15px; + color: #666; + font-size: 14px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 28px; + background-color: transparent; } + .el-select__input.is-mini { + height: 14px; } + .el-select__close { + cursor: pointer; + position: absolute; + top: 8px; + z-index: 1000; + right: 25px; + color: #C0C4CC; + line-height: 18px; + font-size: 14px; } + .el-select__close:hover { + color: #909399; } + .el-select__tags { + position: absolute; + line-height: normal; + white-space: normal; + z-index: 1; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-select .el-tag__close { + margin-top: -2px; } + .el-select .el-tag { + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-color: transparent; + margin: 2px 0 2px 6px; + background-color: #f0f2f5; } + .el-select .el-tag__close.el-icon-close { + background-color: #C0C4CC; + right: -7px; + top: 0; + color: #FFFFFF; } + .el-select .el-tag__close.el-icon-close:hover { + background-color: #909399; } + .el-select .el-tag__close.el-icon-close::before { + display: block; + -webkit-transform: translate(0, 0.5px); + transform: translate(0, 0.5px); } + +.el-pagination { + white-space: nowrap; + padding: 2px 5px; + color: #303133; + font-weight: bold; } + .el-pagination::before, + .el-pagination::after { + display: table; + content: ""; } + .el-pagination::after { + clear: both; } + .el-pagination span:not([class*=suffix]), + .el-pagination button { + display: inline-block; + font-size: 13px; + min-width: 35.5px; + height: 28px; + line-height: 28px; + vertical-align: top; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-pagination .el-input__inner { + text-align: center; + -moz-appearance: textfield; + line-height: normal; } + .el-pagination .el-input__suffix { + right: 0; + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-pagination .el-select .el-input { + width: 100px; + margin: 0 5px; } + .el-pagination .el-select .el-input .el-input__inner { + padding-right: 25px; + border-radius: 3px; } + .el-pagination button { + border: none; + padding: 0 6px; + background: transparent; } + .el-pagination button:focus { + outline: none; } + .el-pagination button:hover { + color: #409EFF; } + .el-pagination button:disabled { + color: #C0C4CC; + background-color: #FFFFFF; + cursor: not-allowed; } + .el-pagination .btn-prev, + .el-pagination .btn-next { + background: center center no-repeat; + background-size: 16px; + background-color: #FFFFFF; + cursor: pointer; + margin: 0; + color: #303133; } + .el-pagination .btn-prev .el-icon, + .el-pagination .btn-next .el-icon { + display: block; + font-size: 12px; + font-weight: bold; } + .el-pagination .btn-prev { + padding-right: 12px; } + .el-pagination .btn-next { + padding-left: 12px; } + .el-pagination .el-pager li.disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-pagination--small .btn-prev, + .el-pagination--small .btn-next, + .el-pagination--small .el-pager li, + .el-pagination--small .el-pager li.btn-quicknext, + .el-pagination--small .el-pager li.btn-quickprev, + .el-pagination--small .el-pager li:last-child { + border-color: transparent; + font-size: 12px; + line-height: 22px; + height: 22px; + min-width: 22px; } + .el-pagination--small .arrow.disabled { + visibility: hidden; } + .el-pagination--small .more::before, + .el-pagination--small li.more::before { + line-height: 24px; } + .el-pagination--small span:not([class*=suffix]), + .el-pagination--small button { + height: 22px; + line-height: 22px; } + .el-pagination--small .el-pagination__editor { + height: 22px; } + .el-pagination--small .el-pagination__editor.el-input .el-input__inner { + height: 22px; } + .el-pagination__sizes { + margin: 0 10px 0 0; + font-weight: normal; + color: #606266; } + .el-pagination__sizes .el-input .el-input__inner { + font-size: 13px; + padding-left: 8px; } + .el-pagination__sizes .el-input .el-input__inner:hover { + border-color: #409EFF; } + .el-pagination__total { + margin-right: 10px; + font-weight: normal; + color: #606266; } + .el-pagination__jump { + margin-left: 24px; + font-weight: normal; + color: #606266; } + .el-pagination__jump .el-input__inner { + padding: 0 3px; } + .el-pagination__rightwrapper { + float: right; } + .el-pagination__editor { + line-height: 18px; + padding: 0 2px; + height: 28px; + text-align: center; + margin: 0 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; } + .el-pagination__editor.el-input { + width: 50px; } + .el-pagination__editor.el-input .el-input__inner { + height: 28px; } + .el-pagination__editor .el-input__inner::-webkit-inner-spin-button, + .el-pagination__editor .el-input__inner::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; } + .el-pagination.is-background .btn-prev, + .el-pagination.is-background .btn-next, + .el-pagination.is-background .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; } + .el-pagination.is-background .btn-prev.disabled, + .el-pagination.is-background .btn-next.disabled, + .el-pagination.is-background .el-pager li.disabled { + color: #C0C4CC; } + .el-pagination.is-background .btn-prev, .el-pagination.is-background .btn-next { + padding: 0; } + .el-pagination.is-background .btn-prev:disabled, .el-pagination.is-background .btn-next:disabled { + color: #C0C4CC; } + .el-pagination.is-background .el-pager li:not(.disabled):hover { + color: #409EFF; } + .el-pagination.is-background .el-pager li:not(.disabled).active { + background-color: #409EFF; + color: #FFFFFF; } + .el-pagination.is-background.el-pagination--small .btn-prev, + .el-pagination.is-background.el-pagination--small .btn-next, + .el-pagination.is-background.el-pagination--small .el-pager li { + margin: 0 3px; + min-width: 22px; } + +.el-pager { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + list-style: none; + display: inline-block; + vertical-align: top; + font-size: 0; + padding: 0; + margin: 0; } + .el-pager .more::before { + line-height: 30px; } + .el-pager li { + padding: 0 4px; + background: #FFFFFF; + vertical-align: top; + display: inline-block; + font-size: 13px; + min-width: 35.5px; + height: 28px; + line-height: 28px; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + margin: 0; } + .el-pager li.btn-quicknext, .el-pager li.btn-quickprev { + line-height: 28px; + color: #303133; } + .el-pager li.btn-quicknext.disabled, .el-pager li.btn-quickprev.disabled { + color: #C0C4CC; } + .el-pager li.btn-quickprev:hover { + cursor: pointer; } + .el-pager li.btn-quicknext:hover { + cursor: pointer; } + .el-pager li.active + li { + border-left: 0; } + .el-pager li:hover { + color: #409EFF; } + .el-pager li.active { + color: #409EFF; + cursor: default; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/popconfirm.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/popconfirm.css new file mode 100644 index 00000000..709445cd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/popconfirm.css @@ -0,0 +1,264 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popconfirm__main { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.el-popconfirm__icon { + margin-right: 5px; } + +.el-popconfirm__action { + text-align: right; + margin: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/popover.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/popover.css new file mode 100644 index 00000000..75610a0a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/popover.css @@ -0,0 +1,605 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-popover { + position: absolute; + background: #FFFFFF; + min-width: 150px; + border-radius: 4px; + border: 1px solid #EBEEF5; + padding: 12px; + z-index: 2000; + color: #606266; + line-height: 1.4; + text-align: justify; + font-size: 14px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + word-break: break-all; } + .el-popover--plain { + padding: 18px 20px; } + .el-popover__title { + color: #303133; + font-size: 16px; + line-height: 1; + margin-bottom: 12px; } + .el-popover__reference:focus:not(.focusing), .el-popover__reference:focus:hover { + outline-width: 0; } + .el-popover:focus:active, .el-popover:focus { + outline-width: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/popper.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/popper.css new file mode 100644 index 00000000..52a7e32f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/popper.css @@ -0,0 +1,328 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/progress.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/progress.css new file mode 100644 index 00000000..18649262 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/progress.css @@ -0,0 +1,349 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-progress { + position: relative; + line-height: 1; } + .el-progress__text { + font-size: 14px; + color: #606266; + display: inline-block; + vertical-align: middle; + margin-left: 10px; + line-height: 1; } + .el-progress__text i { + vertical-align: middle; + display: block; } + .el-progress--circle, .el-progress--dashboard { + display: inline-block; } + .el-progress--circle .el-progress__text, .el-progress--dashboard .el-progress__text { + position: absolute; + top: 50%; + left: 0; + width: 100%; + text-align: center; + margin: 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); } + .el-progress--circle .el-progress__text i, .el-progress--dashboard .el-progress__text i { + vertical-align: middle; + display: inline-block; } + .el-progress--without-text .el-progress__text { + display: none; } + .el-progress--without-text .el-progress-bar { + padding-right: 0; + margin-right: 0; + display: block; } + .el-progress--text-inside .el-progress-bar { + padding-right: 0; + margin-right: 0; } + .el-progress.is-success .el-progress-bar__inner { + background-color: #67C23A; } + .el-progress.is-success .el-progress__text { + color: #67C23A; } + .el-progress.is-warning .el-progress-bar__inner { + background-color: #E6A23C; } + .el-progress.is-warning .el-progress__text { + color: #E6A23C; } + .el-progress.is-exception .el-progress-bar__inner { + background-color: #F56C6C; } + .el-progress.is-exception .el-progress__text { + color: #F56C6C; } + +.el-progress-bar { + padding-right: 50px; + display: inline-block; + vertical-align: middle; + width: 100%; + margin-right: -55px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-progress-bar__outer { + height: 6px; + border-radius: 100px; + background-color: #EBEEF5; + overflow: hidden; + position: relative; + vertical-align: middle; } + .el-progress-bar__inner { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: #409EFF; + text-align: right; + border-radius: 100px; + line-height: 1; + white-space: nowrap; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; } + .el-progress-bar__inner::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-progress-bar__innerText { + display: inline-block; + vertical-align: middle; + color: #FFFFFF; + font-size: 12px; + margin: 0 5px; } + +@-webkit-keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +@keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/radio-button.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/radio-button.css new file mode 100644 index 00000000..26afe478 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/radio-button.css @@ -0,0 +1,458 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio-button { + position: relative; + display: inline-block; + outline: none; } + .el-radio-button__inner { + display: inline-block; + line-height: 1; + white-space: nowrap; + vertical-align: middle; + background: #FFFFFF; + border: 1px solid #DCDFE6; + font-weight: 500; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + cursor: pointer; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-radio-button__inner.is-round { + padding: 12px 20px; } + .el-radio-button__inner:hover { + color: #409EFF; } + .el-radio-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-radio-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-radio-button:first-child .el-radio-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-radio-button__orig-radio { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; } + .el-radio-button__orig-radio:checked + .el-radio-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #409EFF; + box-shadow: -1px 0 0 0 #409EFF; } + .el-radio-button__orig-radio:disabled + .el-radio-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-radio-button__orig-radio:disabled:checked + .el-radio-button__inner { + background-color: #F2F6FC; } + .el-radio-button:last-child .el-radio-button__inner { + border-radius: 0 4px 4px 0; } + .el-radio-button:first-child:last-child .el-radio-button__inner { + border-radius: 4px; } + .el-radio-button--medium .el-radio-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-radio-button--medium .el-radio-button__inner.is-round { + padding: 10px 20px; } + .el-radio-button--small .el-radio-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-radio-button--small .el-radio-button__inner.is-round { + padding: 9px 15px; } + .el-radio-button--mini .el-radio-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-radio-button--mini .el-radio-button__inner.is-round { + padding: 7px 15px; } + .el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/radio-group.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/radio-group.css new file mode 100644 index 00000000..f492eac0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/radio-group.css @@ -0,0 +1,255 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio-group { + display: inline-block; + line-height: 1; + vertical-align: middle; + font-size: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/radio.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/radio.css new file mode 100644 index 00000000..06fa228c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/radio.css @@ -0,0 +1,509 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/rate.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/rate.css new file mode 100644 index 00000000..8129949b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/rate.css @@ -0,0 +1,284 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-rate { + height: 20px; + line-height: 1; } + .el-rate:focus, .el-rate:active { + outline-width: 0; } + .el-rate__item { + display: inline-block; + position: relative; + font-size: 0; + vertical-align: middle; } + .el-rate__icon { + position: relative; + display: inline-block; + font-size: 18px; + margin-right: 6px; + color: #C0C4CC; + -webkit-transition: .3s; + transition: .3s; } + .el-rate__icon.hover { + -webkit-transform: scale(1.15); + transform: scale(1.15); } + .el-rate__icon .path2 { + position: absolute; + left: 0; + top: 0; } + .el-rate__decimal { + position: absolute; + top: 0; + left: 0; + display: inline-block; + overflow: hidden; } + .el-rate__text { + font-size: 14px; + vertical-align: middle; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/reset.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/reset.css new file mode 100644 index 00000000..e3e1b15f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/reset.css @@ -0,0 +1,174 @@ +@charset "UTF-8"; +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +body { + font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; + font-weight: 400; + font-size: 14px; + color: #000000; + -webkit-font-smoothing: antialiased; } + +a { + color: #409EFF; + text-decoration: none; } + a:hover, a:focus { + color: #66b1ff; } + a:active { + color: #3a8ee6; } + +h1, h2, h3, h4, h5, h6 { + color: #606266; + font-weight: inherit; } + h1:first-child, h2:first-child, h3:first-child, h4:first-child, h5:first-child, h6:first-child { + margin-top: 0; } + h1:last-child, h2:last-child, h3:last-child, h4:last-child, h5:last-child, h6:last-child { + margin-bottom: 0; } + +h1 { + font-size: 20px; } + +h2 { + font-size: 18px; } + +h3 { + font-size: 16px; } + +h4, h5, h6, p { + font-size: inherit; } + +p { + line-height: 1.8; } + p:first-child { + margin-top: 0; } + p:last-child { + margin-bottom: 0; } + +sup, sub { + font-size: 13px; } + +small { + font-size: 12px; } + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/row.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/row.css new file mode 100644 index 00000000..6818788b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/row.css @@ -0,0 +1,289 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-row { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-row::before, + .el-row::after { + display: table; + content: ""; } + .el-row::after { + clear: both; } + .el-row--flex { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-row--flex:before, .el-row--flex:after { + display: none; } + .el-row--flex.is-justify-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-row--flex.is-justify-end { + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; } + .el-row--flex.is-justify-space-between { + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; } + .el-row--flex.is-justify-space-around { + -ms-flex-pack: distribute; + justify-content: space-around; } + .el-row--flex.is-align-middle { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-row--flex.is-align-bottom { + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/scrollbar.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/scrollbar.css new file mode 100644 index 00000000..f73b67ef --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/scrollbar.css @@ -0,0 +1,296 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/select-dropdown.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/select-dropdown.css new file mode 100644 index 00000000..50a907da --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/select-dropdown.css @@ -0,0 +1,623 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/select.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/select.css new file mode 100644 index 00000000..58a426d7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/select.css @@ -0,0 +1,2825 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-select { + display: inline-block; + position: relative; } + .el-select .el-select__tags +> span { + display: contents; } + .el-select:hover .el-input__inner { + border-color: #C0C4CC; } + .el-select .el-input__inner { + cursor: pointer; + padding-right: 35px; } + .el-select .el-input__inner:focus { + border-color: #409EFF; } + .el-select .el-input .el-select__caret { + color: #C0C4CC; + font-size: 14px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + cursor: pointer; } + .el-select .el-input .el-select__caret.is-reverse { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + .el-select .el-input .el-select__caret.is-show-close { + font-size: 14px; + text-align: center; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + border-radius: 100%; + color: #C0C4CC; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-select .el-input .el-select__caret.is-show-close:hover { + color: #909399; } + .el-select .el-input.is-disabled .el-input__inner { + cursor: not-allowed; } + .el-select .el-input.is-disabled .el-input__inner:hover { + border-color: #E4E7ED; } + .el-select .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-select > .el-input { + display: block; } + .el-select__input { + border: none; + outline: none; + padding: 0; + margin-left: 15px; + color: #666; + font-size: 14px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 28px; + background-color: transparent; } + .el-select__input.is-mini { + height: 14px; } + .el-select__close { + cursor: pointer; + position: absolute; + top: 8px; + z-index: 1000; + right: 25px; + color: #C0C4CC; + line-height: 18px; + font-size: 14px; } + .el-select__close:hover { + color: #909399; } + .el-select__tags { + position: absolute; + line-height: normal; + white-space: normal; + z-index: 1; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-select .el-tag__close { + margin-top: -2px; } + .el-select .el-tag { + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-color: transparent; + margin: 2px 0 2px 6px; + background-color: #f0f2f5; } + .el-select .el-tag__close.el-icon-close { + background-color: #C0C4CC; + right: -7px; + top: 0; + color: #FFFFFF; } + .el-select .el-tag__close.el-icon-close:hover { + background-color: #909399; } + .el-select .el-tag__close.el-icon-close::before { + display: block; + -webkit-transform: translate(0, 0.5px); + transform: translate(0, 0.5px); } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/slider.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/slider.css new file mode 100644 index 00000000..2f30e55a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/slider.css @@ -0,0 +1,1677 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-input-number { + position: relative; + display: inline-block; + width: 180px; + line-height: 38px; } + .el-input-number .el-input { + display: block; } + .el-input-number .el-input__inner { + -webkit-appearance: none; + padding-left: 50px; + padding-right: 50px; + text-align: center; } + .el-input-number__increase, .el-input-number__decrease { + position: absolute; + z-index: 1; + top: 1px; + width: 40px; + height: auto; + text-align: center; + background: #F5F7FA; + color: #606266; + cursor: pointer; + font-size: 13px; } + .el-input-number__increase:hover, .el-input-number__decrease:hover { + color: #409EFF; } + .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled), .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) { + border-color: #409EFF; } + .el-input-number__increase.is-disabled, .el-input-number__decrease.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-input-number__increase { + right: 1px; + border-radius: 0 4px 4px 0; + border-left: 1px solid #DCDFE6; } + .el-input-number__decrease { + left: 1px; + border-radius: 4px 0 0 4px; + border-right: 1px solid #DCDFE6; } + .el-input-number.is-disabled .el-input-number__increase, .el-input-number.is-disabled .el-input-number__decrease { + border-color: #E4E7ED; + color: #E4E7ED; } + .el-input-number.is-disabled .el-input-number__increase:hover, .el-input-number.is-disabled .el-input-number__decrease:hover { + color: #E4E7ED; + cursor: not-allowed; } + .el-input-number--medium { + width: 200px; + line-height: 34px; } + .el-input-number--medium .el-input-number__increase, .el-input-number--medium .el-input-number__decrease { + width: 36px; + font-size: 14px; } + .el-input-number--medium .el-input__inner { + padding-left: 43px; + padding-right: 43px; } + .el-input-number--small { + width: 130px; + line-height: 30px; } + .el-input-number--small .el-input-number__increase, .el-input-number--small .el-input-number__decrease { + width: 32px; + font-size: 13px; } + .el-input-number--small .el-input-number__increase [class*=el-icon], .el-input-number--small .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.9); + transform: scale(0.9); } + .el-input-number--small .el-input__inner { + padding-left: 39px; + padding-right: 39px; } + .el-input-number--mini { + width: 130px; + line-height: 26px; } + .el-input-number--mini .el-input-number__increase, .el-input-number--mini .el-input-number__decrease { + width: 28px; + font-size: 12px; } + .el-input-number--mini .el-input-number__increase [class*=el-icon], .el-input-number--mini .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number--mini .el-input__inner { + padding-left: 35px; + padding-right: 35px; } + .el-input-number.is-without-controls .el-input__inner { + padding-left: 15px; + padding-right: 15px; } + .el-input-number.is-controls-right .el-input__inner { + padding-left: 15px; + padding-right: 50px; } + .el-input-number.is-controls-right .el-input-number__increase, .el-input-number.is-controls-right .el-input-number__decrease { + height: auto; + line-height: 19px; } + .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon], .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number.is-controls-right .el-input-number__increase { + border-radius: 0 4px 0 0; + border-bottom: 1px solid #DCDFE6; } + .el-input-number.is-controls-right .el-input-number__decrease { + right: 1px; + bottom: 1px; + top: auto; + left: auto; + border-right: none; + border-left: 1px solid #DCDFE6; + border-radius: 0 0 4px 0; } + .el-input-number.is-controls-right[class*=medium] [class*=increase], .el-input-number.is-controls-right[class*=medium] [class*=decrease] { + line-height: 17px; } + .el-input-number.is-controls-right[class*=small] [class*=increase], .el-input-number.is-controls-right[class*=small] [class*=decrease] { + line-height: 15px; } + .el-input-number.is-controls-right[class*=mini] [class*=increase], .el-input-number.is-controls-right[class*=mini] [class*=decrease] { + line-height: 13px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-slider::before, +.el-slider::after { + display: table; + content: ""; } + +.el-slider::after { + clear: both; } + +.el-slider__runway { + width: 100%; + height: 6px; + margin: 16px 0; + background-color: #E4E7ED; + border-radius: 3px; + position: relative; + cursor: pointer; + vertical-align: middle; } + .el-slider__runway.show-input { + margin-right: 160px; + width: auto; } + .el-slider__runway.disabled { + cursor: default; } + .el-slider__runway.disabled .el-slider__bar { + background-color: #C0C4CC; } + .el-slider__runway.disabled .el-slider__button { + border-color: #C0C4CC; } + .el-slider__runway.disabled .el-slider__button-wrapper:hover, .el-slider__runway.disabled .el-slider__button-wrapper.hover { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button-wrapper.dragging { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button:hover, .el-slider__runway.disabled .el-slider__button.hover, .el-slider__runway.disabled .el-slider__button.dragging { + -webkit-transform: scale(1); + transform: scale(1); } + .el-slider__runway.disabled .el-slider__button:hover, .el-slider__runway.disabled .el-slider__button.hover { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button.dragging { + cursor: not-allowed; } + +.el-slider__input { + float: right; + margin-top: 3px; + width: 130px; } + .el-slider__input.el-input-number--mini { + margin-top: 5px; } + .el-slider__input.el-input-number--medium { + margin-top: 0; } + .el-slider__input.el-input-number--large { + margin-top: -2px; } + +.el-slider__bar { + height: 6px; + background-color: #409EFF; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + position: absolute; } + +.el-slider__button-wrapper { + height: 36px; + width: 36px; + position: absolute; + z-index: 1001; + top: -15px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + background-color: transparent; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + line-height: normal; } + .el-slider__button-wrapper::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-slider__button-wrapper .el-tooltip { + vertical-align: middle; + display: inline-block; } + .el-slider__button-wrapper:hover, .el-slider__button-wrapper.hover { + cursor: -webkit-grab; + cursor: grab; } + .el-slider__button-wrapper.dragging { + cursor: -webkit-grabbing; + cursor: grabbing; } + +.el-slider__button { + width: 16px; + height: 16px; + border: solid 2px #409EFF; + background-color: #FFFFFF; + border-radius: 50%; + -webkit-transition: .2s; + transition: .2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .el-slider__button:hover, .el-slider__button.hover, .el-slider__button.dragging { + -webkit-transform: scale(1.2); + transform: scale(1.2); } + .el-slider__button:hover, .el-slider__button.hover { + cursor: -webkit-grab; + cursor: grab; } + .el-slider__button.dragging { + cursor: -webkit-grabbing; + cursor: grabbing; } + +.el-slider__stop { + position: absolute; + height: 6px; + width: 6px; + border-radius: 100%; + background-color: #FFFFFF; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + +.el-slider__marks { + top: 0; + left: 12px; + width: 18px; + height: 100%; } + .el-slider__marks-text { + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + font-size: 14px; + color: #909399; + margin-top: 15px; } + +.el-slider.is-vertical { + position: relative; } + .el-slider.is-vertical .el-slider__runway { + width: 6px; + height: 100%; + margin: 0 16px; } + .el-slider.is-vertical .el-slider__bar { + width: 6px; + height: auto; + border-radius: 0 0 3px 3px; } + .el-slider.is-vertical .el-slider__button-wrapper { + top: auto; + left: -15px; + -webkit-transform: translateY(50%); + transform: translateY(50%); } + .el-slider.is-vertical .el-slider__stop { + -webkit-transform: translateY(50%); + transform: translateY(50%); } + .el-slider.is-vertical.el-slider--with-input { + padding-bottom: 58px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input { + overflow: visible; + float: none; + position: absolute; + bottom: 22px; + width: 36px; + margin-top: 15px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner { + text-align: center; + padding-left: 5px; + padding-right: 5px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase { + top: 32px; + margin-top: -1px; + border: 1px solid #DCDFE6; + line-height: 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease { + width: 18px; + right: 18px; + border-bottom-left-radius: 4px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase { + width: 19px; + border-bottom-right-radius: 4px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase ~ .el-input .el-input__inner { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase { + border-color: #C0C4CC; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase { + border-color: #409EFF; } + .el-slider.is-vertical .el-slider__marks-text { + margin-top: 0; + left: 15px; + -webkit-transform: translateY(50%); + transform: translateY(50%); } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/spinner.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/spinner.css new file mode 100644 index 00000000..c8567104 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/spinner.css @@ -0,0 +1,180 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-time-spinner { + width: 100%; + white-space: nowrap; } + +.el-spinner { + display: inline-block; + vertical-align: middle; } + +.el-spinner-inner { + -webkit-animation: rotate 2s linear infinite; + animation: rotate 2s linear infinite; + width: 50px; + height: 50px; } + .el-spinner-inner .path { + stroke: #ececec; + stroke-linecap: round; + -webkit-animation: dash 1.5s ease-in-out infinite; + animation: dash 1.5s ease-in-out infinite; } + +@-webkit-keyframes rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-webkit-keyframes dash { + 0% { + stroke-dasharray: 1, 150; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -35; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -124; } } + +@keyframes dash { + 0% { + stroke-dasharray: 1, 150; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -35; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -124; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/step.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/step.css new file mode 100644 index 00000000..c154e2f4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/step.css @@ -0,0 +1,485 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-step { + position: relative; + -ms-flex-negative: 1; + flex-shrink: 1; } + .el-step:last-of-type .el-step__line { + display: none; } + .el-step:last-of-type.is-flex { + -ms-flex-preferred-size: auto !important; + flex-basis: auto !important; + -ms-flex-negative: 0; + flex-shrink: 0; + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; } + .el-step:last-of-type .el-step__main, .el-step:last-of-type .el-step__description { + padding-right: 0; } + .el-step__head { + position: relative; + width: 100%; } + .el-step__head.is-process { + color: #303133; + border-color: #303133; } + .el-step__head.is-wait { + color: #C0C4CC; + border-color: #C0C4CC; } + .el-step__head.is-success { + color: #67C23A; + border-color: #67C23A; } + .el-step__head.is-error { + color: #F56C6C; + border-color: #F56C6C; } + .el-step__head.is-finish { + color: #409EFF; + border-color: #409EFF; } + .el-step__icon { + position: relative; + z-index: 1; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + width: 24px; + height: 24px; + font-size: 14px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #FFFFFF; + -webkit-transition: .15s ease-out; + transition: .15s ease-out; } + .el-step__icon.is-text { + border-radius: 50%; + border: 2px solid; + border-color: inherit; } + .el-step__icon.is-icon { + width: 40px; } + .el-step__icon-inner { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-align: center; + font-weight: bold; + line-height: 1; + color: inherit; } + .el-step__icon-inner[class*=el-icon]:not(.is-status) { + font-size: 25px; + font-weight: normal; } + .el-step__icon-inner.is-status { + -webkit-transform: translateY(1px); + transform: translateY(1px); } + .el-step__line { + position: absolute; + border-color: inherit; + background-color: #C0C4CC; } + .el-step__line-inner { + display: block; + border-width: 1px; + border-style: solid; + border-color: inherit; + -webkit-transition: .15s ease-out; + transition: .15s ease-out; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 0; + height: 0; } + .el-step__main { + white-space: normal; + text-align: left; } + .el-step__title { + font-size: 16px; + line-height: 38px; } + .el-step__title.is-process { + font-weight: bold; + color: #303133; } + .el-step__title.is-wait { + color: #C0C4CC; } + .el-step__title.is-success { + color: #67C23A; } + .el-step__title.is-error { + color: #F56C6C; } + .el-step__title.is-finish { + color: #409EFF; } + .el-step__description { + padding-right: 10%; + margin-top: -5px; + font-size: 12px; + line-height: 20px; + font-weight: normal; } + .el-step__description.is-process { + color: #303133; } + .el-step__description.is-wait { + color: #C0C4CC; } + .el-step__description.is-success { + color: #67C23A; } + .el-step__description.is-error { + color: #F56C6C; } + .el-step__description.is-finish { + color: #409EFF; } + .el-step.is-horizontal { + display: inline-block; } + .el-step.is-horizontal .el-step__line { + height: 2px; + top: 11px; + left: 0; + right: 0; } + .el-step.is-vertical { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-step.is-vertical .el-step__head { + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; + width: 24px; } + .el-step.is-vertical .el-step__main { + padding-left: 10px; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .el-step.is-vertical .el-step__title { + line-height: 24px; + padding-bottom: 8px; } + .el-step.is-vertical .el-step__line { + width: 2px; + top: 0; + bottom: 0; + left: 11px; } + .el-step.is-vertical .el-step__icon.is-icon { + width: 24px; } + .el-step.is-center .el-step__head { + text-align: center; } + .el-step.is-center .el-step__main { + text-align: center; } + .el-step.is-center .el-step__description { + padding-left: 20%; + padding-right: 20%; } + .el-step.is-center .el-step__line { + left: 50%; + right: -50%; } + .el-step.is-simple { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-step.is-simple .el-step__head { + width: auto; + font-size: 0; + padding-right: 10px; } + .el-step.is-simple .el-step__icon { + background: transparent; + width: 16px; + height: 16px; + font-size: 12px; } + .el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status) { + font-size: 18px; } + .el-step.is-simple .el-step__icon-inner.is-status { + -webkit-transform: scale(0.8) translateY(1px); + transform: scale(0.8) translateY(1px); } + .el-step.is-simple .el-step__main { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .el-step.is-simple .el-step__title { + font-size: 16px; + line-height: 20px; } + .el-step.is-simple:not(:last-of-type) .el-step__title { + max-width: 50%; + word-break: break-all; } + .el-step.is-simple .el-step__arrow { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-step.is-simple .el-step__arrow::before, .el-step.is-simple .el-step__arrow::after { + content: ''; + display: inline-block; + position: absolute; + height: 15px; + width: 1px; + background: #C0C4CC; } + .el-step.is-simple .el-step__arrow::before { + -webkit-transform: rotate(-45deg) translateY(-4px); + transform: rotate(-45deg) translateY(-4px); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; } + .el-step.is-simple .el-step__arrow::after { + -webkit-transform: rotate(45deg) translateY(4px); + transform: rotate(45deg) translateY(4px); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; } + .el-step.is-simple:last-of-type .el-step__arrow { + display: none; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/steps.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/steps.css new file mode 100644 index 00000000..85c0bb55 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/steps.css @@ -0,0 +1,146 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-steps { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-steps--simple { + padding: 13px 8%; + border-radius: 4px; + background: #F5F7FA; } + .el-steps--horizontal { + white-space: nowrap; } + .el-steps--vertical { + height: 100%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column; + flex-flow: column; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/submenu.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/submenu.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/switch.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/switch.css new file mode 100644 index 00000000..e52e42d5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/switch.css @@ -0,0 +1,333 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-switch { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + font-size: 14px; + line-height: 20px; + height: 20px; + vertical-align: middle; } + .el-switch.is-disabled .el-switch__core, + .el-switch.is-disabled .el-switch__label { + cursor: not-allowed; } + .el-switch__label { + -webkit-transition: .2s; + transition: .2s; + height: 20px; + display: inline-block; + font-size: 14px; + font-weight: 500; + cursor: pointer; + vertical-align: middle; + color: #303133; } + .el-switch__label.is-active { + color: #409EFF; } + .el-switch__label--left { + margin-right: 10px; } + .el-switch__label--right { + margin-left: 10px; } + .el-switch__label * { + line-height: 1; + font-size: 14px; + display: inline-block; } + .el-switch__input { + position: absolute; + width: 0; + height: 0; + opacity: 0; + margin: 0; } + .el-switch__core { + margin: 0; + display: inline-block; + position: relative; + width: 40px; + height: 20px; + border: 1px solid #DCDFE6; + outline: none; + border-radius: 10px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #DCDFE6; + cursor: pointer; + -webkit-transition: border-color .3s, background-color .3s; + transition: border-color .3s, background-color .3s; + vertical-align: middle; } + .el-switch__core:after { + content: ""; + position: absolute; + top: 1px; + left: 1px; + border-radius: 100%; + -webkit-transition: all .3s; + transition: all .3s; + width: 16px; + height: 16px; + background-color: #FFFFFF; } + .el-switch.is-checked .el-switch__core { + border-color: #409EFF; + background-color: #409EFF; } + .el-switch.is-checked .el-switch__core::after { + left: 100%; + margin-left: -17px; } + .el-switch.is-disabled { + opacity: 0.6; } + .el-switch--wide .el-switch__label.el-switch__label--left span { + left: 10px; } + .el-switch--wide .el-switch__label.el-switch__label--right span { + right: 10px; } + .el-switch .label-fade-enter, + .el-switch .label-fade-leave-active { + opacity: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tab-pane.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tab-pane.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/table-column.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/table-column.css new file mode 100644 index 00000000..d1d98ede --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/table-column.css @@ -0,0 +1,1410 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-table-column--selection .cell { + padding-left: 14px; + padding-right: 14px; } + +.el-table-filter { + border: solid 1px #EBEEF5; + border-radius: 2px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 2px 0; + /** used for dropdown mode */ } + .el-table-filter__list { + padding: 5px 0; + margin: 0; + list-style: none; + min-width: 100px; } + .el-table-filter__list-item { + line-height: 36px; + padding: 0 10px; + cursor: pointer; + font-size: 14px; } + .el-table-filter__list-item:hover { + background-color: #409EFF; + color: #FFFFFF; } + .el-table-filter__list-item.is-active { + background-color: #409EFF; + color: #FFFFFF; } + .el-table-filter__content { + min-width: 100px; } + .el-table-filter__bottom { + border-top: 1px solid #EBEEF5; + padding: 8px; } + .el-table-filter__bottom button { + background: transparent; + border: none; + color: #606266; + cursor: pointer; + font-size: 13px; + padding: 0 3px; } + .el-table-filter__bottom button:hover { + color: #409EFF; } + .el-table-filter__bottom button:focus { + outline: none; } + .el-table-filter__bottom button.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-table-filter__wrap { + max-height: 280px; } + .el-table-filter__checkbox-group { + padding: 10px; } + .el-table-filter__checkbox-group label.el-checkbox { + display: block; + margin-right: 5px; + margin-bottom: 8px; + margin-left: 5px; } + .el-table-filter__checkbox-group .el-checkbox:last-child { + margin-bottom: 0; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/table.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/table.css new file mode 100644 index 00000000..71ca3219 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/table.css @@ -0,0 +1,2047 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-table { + position: relative; + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + width: 100%; + max-width: 100%; + background-color: #FFFFFF; + font-size: 14px; + color: #606266; } + .el-table__empty-block { + min-height: 60px; + text-align: center; + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-table__empty-text { + line-height: 60px; + width: 50%; + color: #909399; } + .el-table__expand-column .cell { + padding: 0; + text-align: center; } + .el-table__expand-icon { + position: relative; + cursor: pointer; + color: #666; + font-size: 12px; + -webkit-transition: -webkit-transform 0.2s ease-in-out; + transition: -webkit-transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out; + height: 20px; } + .el-table__expand-icon--expanded { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-table__expand-icon > .el-icon { + position: absolute; + left: 50%; + top: 50%; + margin-left: -5px; + margin-top: -5px; } + .el-table__expanded-cell { + background-color: #FFFFFF; } + .el-table__expanded-cell[class*=cell] { + padding: 20px 50px; } + .el-table__expanded-cell:hover { + background-color: transparent !important; } + .el-table__placeholder { + display: inline-block; + width: 20px; } + .el-table__append-wrapper { + overflow: hidden; } + .el-table--fit { + border-right: 0; + border-bottom: 0; } + .el-table--fit th.gutter, .el-table--fit td.gutter { + border-right-width: 1px; } + .el-table--scrollable-x .el-table__body-wrapper { + overflow-x: auto; } + .el-table--scrollable-y .el-table__body-wrapper { + overflow-y: auto; } + .el-table thead { + color: #909399; + font-weight: 500; } + .el-table thead.is-group th { + background: #F5F7FA; } + .el-table th, .el-table td { + padding: 12px 0; + min-width: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-overflow: ellipsis; + vertical-align: middle; + position: relative; + text-align: left; } + .el-table th.is-center, .el-table td.is-center { + text-align: center; } + .el-table th.is-right, .el-table td.is-right { + text-align: right; } + .el-table th.gutter, .el-table td.gutter { + width: 15px; + border-right-width: 0; + border-bottom-width: 0; + padding: 0; } + .el-table th.is-hidden > *, .el-table td.is-hidden > * { + visibility: hidden; } + .el-table--medium th, .el-table--medium td { + padding: 10px 0; } + .el-table--small { + font-size: 12px; } + .el-table--small th, .el-table--small td { + padding: 8px 0; } + .el-table--mini { + font-size: 12px; } + .el-table--mini th, .el-table--mini td { + padding: 6px 0; } + .el-table tr { + background-color: #FFFFFF; } + .el-table tr input[type="checkbox"] { + margin: 0; } + .el-table th.is-leaf, .el-table td { + border-bottom: 1px solid #EBEEF5; } + .el-table th.is-sortable { + cursor: pointer; } + .el-table th { + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #FFFFFF; } + .el-table th > .cell { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; + vertical-align: middle; + padding-left: 10px; + padding-right: 10px; + width: 100%; } + .el-table th > .cell.highlight { + color: #409EFF; } + .el-table th.required > div::before { + display: inline-block; + content: ""; + width: 8px; + height: 8px; + border-radius: 50%; + background: #ff4d51; + margin-right: 5px; + vertical-align: middle; } + .el-table td div { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-table td.gutter { + width: 0; } + .el-table .cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + text-overflow: ellipsis; + white-space: normal; + word-break: break-all; + line-height: 23px; + padding-left: 10px; + padding-right: 10px; } + .el-table .cell.el-tooltip { + white-space: nowrap; + min-width: 50px; } + .el-table--group, .el-table--border { + border: 1px solid #EBEEF5; } + .el-table--group::after, .el-table--border::after, .el-table::before { + content: ''; + position: absolute; + background-color: #EBEEF5; + z-index: 1; } + .el-table--group::after, .el-table--border::after { + top: 0; + right: 0; + width: 1px; + height: 100%; } + .el-table::before { + left: 0; + bottom: 0; + width: 100%; + height: 1px; } + .el-table--border { + border-right: none; + border-bottom: none; } + .el-table--border.el-loading-parent--relative { + border-color: transparent; } + .el-table--border th, .el-table--border td { + border-right: 1px solid #EBEEF5; } + .el-table--border th:first-child .cell, .el-table--border td:first-child .cell { + padding-left: 10px; } + .el-table--border th.gutter:last-of-type { + border-bottom: 1px solid #EBEEF5; + border-bottom-width: 1px; } + .el-table--border th { + border-bottom: 1px solid #EBEEF5; } + .el-table--hidden { + visibility: hidden; } + .el-table__fixed, .el-table__fixed-right { + position: absolute; + top: 0; + left: 0; + overflow-x: hidden; + overflow-y: hidden; + -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.12); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.12); } + .el-table__fixed::before, .el-table__fixed-right::before { + content: ''; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 1px; + background-color: #EBEEF5; + z-index: 4; } + .el-table__fixed-right-patch { + position: absolute; + top: -1px; + right: 0; + background-color: #FFFFFF; + border-bottom: 1px solid #EBEEF5; } + .el-table__fixed-right { + top: 0; + left: auto; + right: 0; } + .el-table__fixed-right .el-table__fixed-header-wrapper, + .el-table__fixed-right .el-table__fixed-body-wrapper, + .el-table__fixed-right .el-table__fixed-footer-wrapper { + left: auto; + right: 0; } + .el-table__fixed-header-wrapper { + position: absolute; + left: 0; + top: 0; + z-index: 3; } + .el-table__fixed-footer-wrapper { + position: absolute; + left: 0; + bottom: 0; + z-index: 3; } + .el-table__fixed-footer-wrapper tbody td { + border-top: 1px solid #EBEEF5; + background-color: #F5F7FA; + color: #606266; } + .el-table__fixed-body-wrapper { + position: absolute; + left: 0; + top: 37px; + overflow: hidden; + z-index: 3; } + .el-table__header-wrapper, .el-table__body-wrapper, .el-table__footer-wrapper { + width: 100%; } + .el-table__footer-wrapper { + margin-top: -1px; } + .el-table__footer-wrapper td { + border-top: 1px solid #EBEEF5; } + .el-table__header, .el-table__body, .el-table__footer { + table-layout: fixed; + border-collapse: separate; } + .el-table__header-wrapper, .el-table__footer-wrapper { + overflow: hidden; } + .el-table__header-wrapper tbody td, .el-table__footer-wrapper tbody td { + background-color: #F5F7FA; + color: #606266; } + .el-table__body-wrapper { + overflow: hidden; + position: relative; } + .el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed, + .el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed-right { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper.is-scrolling-left ~ .el-table__fixed { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper.is-scrolling-right ~ .el-table__fixed-right { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper .el-table--border.is-scrolling-right ~ .el-table__fixed-right { + border-left: 1px solid #EBEEF5; } + .el-table__body-wrapper .el-table--border.is-scrolling-left ~ .el-table__fixed { + border-right: 1px solid #EBEEF5; } + .el-table .caret-wrapper { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 34px; + width: 24px; + vertical-align: middle; + cursor: pointer; + overflow: initial; + position: relative; } + .el-table .sort-caret { + width: 0; + height: 0; + border: solid 5px transparent; + position: absolute; + left: 7px; } + .el-table .sort-caret.ascending { + border-bottom-color: #C0C4CC; + top: 5px; } + .el-table .sort-caret.descending { + border-top-color: #C0C4CC; + bottom: 7px; } + .el-table .ascending .sort-caret.ascending { + border-bottom-color: #409EFF; } + .el-table .descending .sort-caret.descending { + border-top-color: #409EFF; } + .el-table .hidden-columns { + visibility: hidden; + position: absolute; + z-index: -1; } + .el-table--striped .el-table__body tr.el-table__row--striped td { + background: #FAFAFA; } + .el-table--striped .el-table__body tr.el-table__row--striped.current-row td { + background-color: #ecf5ff; } + .el-table__body tr.hover-row > td, .el-table__body tr.hover-row.current-row > td, .el-table__body tr.hover-row.el-table__row--striped > td, .el-table__body tr.hover-row.el-table__row--striped.current-row > td { + background-color: #F5F7FA; } + .el-table__body tr.current-row > td { + background-color: #ecf5ff; } + .el-table__column-resize-proxy { + position: absolute; + left: 200px; + top: 0; + bottom: 0; + width: 0; + border-left: 1px solid #EBEEF5; + z-index: 10; } + .el-table__column-filter-trigger { + display: inline-block; + line-height: 34px; + cursor: pointer; } + .el-table__column-filter-trigger i { + color: #909399; + font-size: 12px; + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .el-table--enable-row-transition .el-table__body td { + -webkit-transition: background-color .25s ease; + transition: background-color .25s ease; } + .el-table--enable-row-hover .el-table__body tr:hover > td { + background-color: #F5F7FA; } + .el-table--fluid-height .el-table__fixed, + .el-table--fluid-height .el-table__fixed-right { + bottom: 0; + overflow: hidden; } + .el-table [class*=el-table__row--level] .el-table__expand-icon { + display: inline-block; + width: 20px; + line-height: 20px; + height: 20px; + text-align: center; + margin-right: 3px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tabs.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tabs.css new file mode 100644 index 00000000..32b99d6c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tabs.css @@ -0,0 +1,831 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tabs__header { + padding: 0; + position: relative; + margin: 0 0 15px; } + +.el-tabs__active-bar { + position: absolute; + bottom: 0; + left: 0; + height: 2px; + background-color: #409EFF; + z-index: 1; + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + list-style: none; } + +.el-tabs__new-tab { + float: right; + border: 1px solid #d3dce6; + height: 18px; + width: 18px; + line-height: 18px; + margin: 12px 0 9px 10px; + border-radius: 3px; + text-align: center; + font-size: 12px; + color: #d3dce6; + cursor: pointer; + -webkit-transition: all .15s; + transition: all .15s; } + .el-tabs__new-tab .el-icon-plus { + -webkit-transform: scale(0.8, 0.8); + transform: scale(0.8, 0.8); } + .el-tabs__new-tab:hover { + color: #409EFF; } + +.el-tabs__nav-wrap { + overflow: hidden; + margin-bottom: -1px; + position: relative; } + .el-tabs__nav-wrap::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 2px; + background-color: #E4E7ED; + z-index: 1; } + .el-tabs__nav-wrap.is-scrollable { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-tabs__nav-scroll { + overflow: hidden; } + +.el-tabs__nav-next, .el-tabs__nav-prev { + position: absolute; + cursor: pointer; + line-height: 44px; + font-size: 12px; + color: #909399; } + +.el-tabs__nav-next { + right: 0; } + +.el-tabs__nav-prev { + left: 0; } + +.el-tabs__nav { + white-space: nowrap; + position: relative; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + float: left; + z-index: 2; } + .el-tabs__nav.is-stretch { + min-width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-tabs__nav.is-stretch > * { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + text-align: center; } + +.el-tabs__item { + padding: 0 20px; + height: 40px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: 40px; + display: inline-block; + list-style: none; + font-size: 14px; + font-weight: 500; + color: #303133; + position: relative; } + .el-tabs__item:focus, .el-tabs__item:focus:active { + outline: none; } + .el-tabs__item:focus.is-active.is-focus:not(:active) { + -webkit-box-shadow: 0 0 2px 2px #409EFF inset; + box-shadow: 0 0 2px 2px #409EFF inset; + border-radius: 3px; } + .el-tabs__item .el-icon-close { + border-radius: 50%; + text-align: center; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + margin-left: 5px; } + .el-tabs__item .el-icon-close:before { + -webkit-transform: scale(0.9); + transform: scale(0.9); + display: inline-block; } + .el-tabs__item .el-icon-close:hover { + background-color: #C0C4CC; + color: #FFFFFF; } + .el-tabs__item.is-active { + color: #409EFF; } + .el-tabs__item:hover { + color: #409EFF; + cursor: pointer; } + .el-tabs__item.is-disabled { + color: #C0C4CC; + cursor: default; } + +.el-tabs__content { + overflow: hidden; + position: relative; } + +.el-tabs--card > .el-tabs__header { + border-bottom: 1px solid #E4E7ED; } + +.el-tabs--card > .el-tabs__header .el-tabs__nav-wrap::after { + content: none; } + +.el-tabs--card > .el-tabs__header .el-tabs__nav { + border: 1px solid #E4E7ED; + border-bottom: none; + border-radius: 4px 4px 0 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-tabs--card > .el-tabs__header .el-tabs__active-bar { + display: none; } + +.el-tabs--card > .el-tabs__header .el-tabs__item .el-icon-close { + position: relative; + font-size: 12px; + width: 0; + height: 14px; + vertical-align: middle; + line-height: 15px; + overflow: hidden; + top: -1px; + right: -2px; + -webkit-transform-origin: 100% 50%; + transform-origin: 100% 50%; } + +.el-tabs--card > .el-tabs__header .el-tabs__item { + border-bottom: 1px solid transparent; + border-left: 1px solid #E4E7ED; + -webkit-transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-tabs--card > .el-tabs__header .el-tabs__item:first-child { + border-left: none; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover { + padding-left: 13px; + padding-right: 13px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close { + width: 14px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active { + border-bottom-color: #FFFFFF; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable { + padding-left: 20px; + padding-right: 20px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close { + width: 14px; } + +.el-tabs--border-card { + background: #FFFFFF; + border: 1px solid #DCDFE6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); } + .el-tabs--border-card > .el-tabs__content { + padding: 15px; } + .el-tabs--border-card > .el-tabs__header { + background-color: #F5F7FA; + border-bottom: 1px solid #E4E7ED; + margin: 0; } + .el-tabs--border-card > .el-tabs__header .el-tabs__nav-wrap::after { + content: none; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item { + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + border: 1px solid transparent; + margin-top: -1px; + color: #909399; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item:first-child { + margin-left: -1px; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item + .el-tabs__item { + margin-left: -1px; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active { + color: #409EFF; + background-color: #FFFFFF; + border-right-color: #DCDFE6; + border-left-color: #DCDFE6; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item:not(.is-disabled):hover { + color: #409EFF; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-disabled { + color: #C0C4CC; } + .el-tabs--border-card > .el-tabs__header .is-scrollable .el-tabs__item:first-child { + margin-left: 0; } + +.el-tabs--top .el-tabs__item.is-top:nth-child(2), +.el-tabs--top .el-tabs__item.is-bottom:nth-child(2), .el-tabs--bottom .el-tabs__item.is-top:nth-child(2), +.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2) { + padding-left: 0; } + +.el-tabs--top .el-tabs__item.is-top:last-child, +.el-tabs--top .el-tabs__item.is-bottom:last-child, .el-tabs--bottom .el-tabs__item.is-top:last-child, +.el-tabs--bottom .el-tabs__item.is-bottom:last-child { + padding-right: 0; } + +.el-tabs--top.el-tabs--border-card > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--top.el-tabs--card > .el-tabs__header .el-tabs__item:nth-child(2), +.el-tabs--top .el-tabs--left > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--top .el-tabs--right > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom.el-tabs--border-card > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom.el-tabs--card > .el-tabs__header .el-tabs__item:nth-child(2), +.el-tabs--bottom .el-tabs--left > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom .el-tabs--right > .el-tabs__header .el-tabs__item:nth-child(2) { + padding-left: 20px; } + +.el-tabs--top.el-tabs--border-card > .el-tabs__header .el-tabs__item:last-child, .el-tabs--top.el-tabs--card > .el-tabs__header .el-tabs__item:last-child, +.el-tabs--top .el-tabs--left > .el-tabs__header .el-tabs__item:last-child, .el-tabs--top .el-tabs--right > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom.el-tabs--border-card > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom.el-tabs--card > .el-tabs__header .el-tabs__item:last-child, +.el-tabs--bottom .el-tabs--left > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom .el-tabs--right > .el-tabs__header .el-tabs__item:last-child { + padding-right: 20px; } + +.el-tabs--bottom .el-tabs__header.is-bottom { + margin-bottom: 0; + margin-top: 10px; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom { + border-bottom: 0; + border-top: 1px solid #DCDFE6; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom { + margin-top: -1px; + margin-bottom: 0; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active) { + border: 1px solid transparent; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom { + margin: 0 -1px -1px -1px; } + +.el-tabs--left, .el-tabs--right { + overflow: hidden; } + .el-tabs--left .el-tabs__header.is-left, + .el-tabs--left .el-tabs__header.is-right, + .el-tabs--left .el-tabs__nav-wrap.is-left, + .el-tabs--left .el-tabs__nav-wrap.is-right, + .el-tabs--left .el-tabs__nav-scroll, .el-tabs--right .el-tabs__header.is-left, + .el-tabs--right .el-tabs__header.is-right, + .el-tabs--right .el-tabs__nav-wrap.is-left, + .el-tabs--right .el-tabs__nav-wrap.is-right, + .el-tabs--right .el-tabs__nav-scroll { + height: 100%; } + .el-tabs--left .el-tabs__active-bar.is-left, + .el-tabs--left .el-tabs__active-bar.is-right, .el-tabs--right .el-tabs__active-bar.is-left, + .el-tabs--right .el-tabs__active-bar.is-right { + top: 0; + bottom: auto; + width: 2px; + height: auto; } + .el-tabs--left .el-tabs__nav-wrap.is-left, + .el-tabs--left .el-tabs__nav-wrap.is-right, .el-tabs--right .el-tabs__nav-wrap.is-left, + .el-tabs--right .el-tabs__nav-wrap.is-right { + margin-bottom: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next { + height: 30px; + line-height: 30px; + width: 100%; + text-align: center; + cursor: pointer; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i, + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i, + .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i { + -webkit-transform: rotateZ(90deg); + transform: rotateZ(90deg); } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev { + left: auto; + top: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next { + right: auto; + bottom: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable, + .el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable, .el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable, + .el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable { + padding: 30px 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left::after, + .el-tabs--left .el-tabs__nav-wrap.is-right::after, .el-tabs--right .el-tabs__nav-wrap.is-left::after, + .el-tabs--right .el-tabs__nav-wrap.is-right::after { + height: 100%; + width: 2px; + bottom: auto; + top: 0; } + .el-tabs--left .el-tabs__nav.is-left, + .el-tabs--left .el-tabs__nav.is-right, .el-tabs--right .el-tabs__nav.is-left, + .el-tabs--right .el-tabs__nav.is-right { + float: none; } + .el-tabs--left .el-tabs__item.is-left, + .el-tabs--left .el-tabs__item.is-right, .el-tabs--right .el-tabs__item.is-left, + .el-tabs--right .el-tabs__item.is-right { + display: block; } + +.el-tabs--left .el-tabs__header.is-left { + float: left; + margin-bottom: 0; + margin-right: 10px; } + +.el-tabs--left .el-tabs__nav-wrap.is-left { + margin-right: -1px; } + .el-tabs--left .el-tabs__nav-wrap.is-left::after { + left: auto; + right: 0; } + +.el-tabs--left .el-tabs__active-bar.is-left { + right: 0; + left: auto; } + +.el-tabs--left .el-tabs__item.is-left { + text-align: right; } + +.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left { + display: none; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left { + border-left: none; + border-right: 1px solid #E4E7ED; + border-bottom: none; + border-top: 1px solid #E4E7ED; + text-align: left; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child { + border-right: 1px solid #E4E7ED; + border-top: none; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active { + border: 1px solid #E4E7ED; + border-right-color: #fff; + border-left: none; + border-bottom: none; } + .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child { + border-top: none; } + .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child { + border-bottom: none; } + +.el-tabs--left.el-tabs--card .el-tabs__nav { + border-radius: 4px 0 0 4px; + border-bottom: 1px solid #E4E7ED; + border-right: none; } + +.el-tabs--left.el-tabs--card .el-tabs__new-tab { + float: none; } + +.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left { + border-right: 1px solid #dfe4ed; } + +.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left { + border: 1px solid transparent; + margin: -1px 0 -1px -1px; } + .el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active { + border-color: transparent; + border-top-color: #d1dbe5; + border-bottom-color: #d1dbe5; } + +.el-tabs--right .el-tabs__header.is-right { + float: right; + margin-bottom: 0; + margin-left: 10px; } + +.el-tabs--right .el-tabs__nav-wrap.is-right { + margin-left: -1px; } + .el-tabs--right .el-tabs__nav-wrap.is-right::after { + left: 0; + right: auto; } + +.el-tabs--right .el-tabs__active-bar.is-right { + left: 0; } + +.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right { + display: none; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right { + border-bottom: none; + border-top: 1px solid #E4E7ED; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child { + border-left: 1px solid #E4E7ED; + border-top: none; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active { + border: 1px solid #E4E7ED; + border-left-color: #fff; + border-right: none; + border-bottom: none; } + .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child { + border-top: none; } + .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child { + border-bottom: none; } + +.el-tabs--right.el-tabs--card .el-tabs__nav { + border-radius: 0 4px 4px 0; + border-bottom: 1px solid #E4E7ED; + border-left: none; } + +.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right { + border-left: 1px solid #dfe4ed; } + +.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right { + border: 1px solid transparent; + margin: -1px -1px -1px 0; } + .el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active { + border-color: transparent; + border-top-color: #d1dbe5; + border-bottom-color: #d1dbe5; } + +.slideInRight-transition, +.slideInLeft-transition { + display: inline-block; } + +.slideInRight-enter { + -webkit-animation: slideInRight-enter .3s; + animation: slideInRight-enter .3s; } + +.slideInRight-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInRight-leave .3s; + animation: slideInRight-leave .3s; } + +.slideInLeft-enter { + -webkit-animation: slideInLeft-enter .3s; + animation: slideInLeft-enter .3s; } + +.slideInLeft-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInLeft-leave .3s; + animation: slideInLeft-leave .3s; } + +@-webkit-keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@-webkit-keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; } } + +@keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; } } + +@-webkit-keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@-webkit-keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; } } + +@keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tag.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tag.css new file mode 100644 index 00000000..b037ffab --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tag.css @@ -0,0 +1,462 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/time-picker.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/time-picker.css new file mode 100644 index 00000000..e5c85a0d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/time-picker.css @@ -0,0 +1,2523 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-spinner.has-seconds .el-time-spinner__wrapper { + width: 33.3%; } + +.el-time-spinner__wrapper { + max-height: 190px; + overflow: auto; + display: inline-block; + width: 50%; + vertical-align: top; + position: relative; } + .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) { + padding-bottom: 15px; } + .el-time-spinner__wrapper.is-arrow { + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__list { + -webkit-transform: translateY(-32px); + transform: translateY(-32px); } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #FFFFFF; + cursor: default; } + +.el-time-spinner__arrow { + font-size: 12px; + color: #909399; + position: absolute; + left: 0; + width: 100%; + z-index: 1; + text-align: center; + height: 30px; + line-height: 30px; + cursor: pointer; } + .el-time-spinner__arrow:hover { + color: #409EFF; } + .el-time-spinner__arrow.el-icon-arrow-up { + top: 10px; } + .el-time-spinner__arrow.el-icon-arrow-down { + bottom: 10px; } + +.el-time-spinner__input.el-input { + width: 70%; } + .el-time-spinner__input.el-input .el-input__inner { + padding: 0; + text-align: center; } + +.el-time-spinner__list { + padding: 0; + margin: 0; + list-style: none; + text-align: center; } + .el-time-spinner__list::after, .el-time-spinner__list::before { + content: ''; + display: block; + width: 100%; + height: 80px; } + +.el-time-spinner__item { + height: 32px; + line-height: 32px; + font-size: 12px; + color: #606266; } + .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #F5F7FA; + cursor: pointer; } + .el-time-spinner__item.active:not(.disabled) { + color: #303133; + font-weight: bold; } + .el-time-spinner__item.disabled { + color: #C0C4CC; + cursor: not-allowed; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-panel { + margin: 5px 0; + border: solid 1px #E4E7ED; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 2px; + position: absolute; + width: 180px; + left: 0; + z-index: 1000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .el-time-panel__content { + font-size: 0; + position: relative; + overflow: hidden; } + .el-time-panel__content::after, .el-time-panel__content::before { + content: ""; + top: 50%; + position: absolute; + margin-top: -15px; + height: 32px; + z-index: -1; + left: 0; + right: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + text-align: left; + border-top: 1px solid #E4E7ED; + border-bottom: 1px solid #E4E7ED; } + .el-time-panel__content::after { + left: 50%; + margin-left: 12%; + margin-right: 12%; } + .el-time-panel__content::before { + padding-left: 50%; + margin-right: 12%; + margin-left: 12%; } + .el-time-panel__content.has-seconds::after { + left: calc(100% / 3 * 2); } + .el-time-panel__content.has-seconds::before { + padding-left: calc(100% / 3); } + .el-time-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + height: 36px; + line-height: 25px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-time-panel__btn { + border: none; + line-height: 28px; + padding: 0 5px; + margin: 0 5px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; + color: #303133; } + .el-time-panel__btn.confirm { + font-weight: 800; + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-range-picker { + width: 354px; + overflow: visible; } + .el-time-range-picker__content { + position: relative; + text-align: center; + padding: 10px; } + .el-time-range-picker__cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 4px 7px 7px; + width: 50%; + display: inline-block; } + .el-time-range-picker__header { + margin-bottom: 5px; + text-align: center; + font-size: 14px; } + .el-time-range-picker__body { + border-radius: 2px; + border: 1px solid #E4E7ED; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/time-select.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/time-select.css new file mode 100644 index 00000000..c80f5c05 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/time-select.css @@ -0,0 +1,1918 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +.el-date-picker { + width: 322px; } + .el-date-picker.has-sidebar.has-time { + width: 434px; } + .el-date-picker.has-sidebar { + width: 438px; } + .el-date-picker.has-time .el-picker-panel__body-wrapper { + position: relative; } + .el-date-picker .el-picker-panel__content { + width: 292px; } + .el-date-picker table { + table-layout: fixed; + width: 100%; } + .el-date-picker__editor-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-picker__header { + margin: 12px; + text-align: center; } + .el-date-picker__header--bordered { + margin-bottom: 0; + padding-bottom: 12px; + border-bottom: solid 1px #EBEEF5; } + .el-date-picker__header--bordered + .el-picker-panel__content { + margin-top: 0; } + .el-date-picker__header-label { + font-size: 16px; + font-weight: 500; + padding: 0 5px; + line-height: 22px; + text-align: center; + cursor: pointer; + color: #606266; } + .el-date-picker__header-label:hover { + color: #409EFF; } + .el-date-picker__header-label.active { + color: #409EFF; } + .el-date-picker__prev-btn { + float: left; } + .el-date-picker__next-btn { + float: right; } + .el-date-picker__time-wrap { + padding: 10px; + text-align: center; } + .el-date-picker__time-label { + float: left; + cursor: pointer; + line-height: 30px; + margin-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.time-select { + margin: 5px 0; + min-width: 0; } + +.time-select .el-picker-panel__content { + max-height: 200px; + margin: 0; } + +.time-select-item { + padding: 8px 10px; + font-size: 14px; + line-height: 20px; } + +.time-select-item.selected:not(.disabled) { + color: #409EFF; + font-weight: bold; } + +.time-select-item.disabled { + color: #E4E7ED; + cursor: not-allowed; } + +.time-select-item:hover { + background-color: #F5F7FA; + font-weight: bold; + cursor: pointer; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/timeline-item.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/timeline-item.css new file mode 100644 index 00000000..5a52cd66 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/timeline-item.css @@ -0,0 +1,318 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-timeline-item { + position: relative; + padding-bottom: 20px; } + .el-timeline-item__wrapper { + position: relative; + padding-left: 28px; + top: -3px; } + .el-timeline-item__tail { + position: absolute; + left: 4px; + height: 100%; + border-left: 2px solid #E4E7ED; } + .el-timeline-item__icon { + color: #FFFFFF; + font-size: 13px; } + .el-timeline-item__node { + position: absolute; + background-color: #E4E7ED; + border-radius: 50%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-timeline-item__node--normal { + left: -1px; + width: 12px; + height: 12px; } + .el-timeline-item__node--large { + left: -2px; + width: 14px; + height: 14px; } + .el-timeline-item__node--primary { + background-color: #409EFF; } + .el-timeline-item__node--success { + background-color: #67C23A; } + .el-timeline-item__node--warning { + background-color: #E6A23C; } + .el-timeline-item__node--danger { + background-color: #F56C6C; } + .el-timeline-item__node--info { + background-color: #909399; } + .el-timeline-item__dot { + position: absolute; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-timeline-item__content { + color: #303133; } + .el-timeline-item__timestamp { + color: #909399; + line-height: 1; + font-size: 13px; } + .el-timeline-item__timestamp.is-top { + margin-bottom: 8px; + padding-top: 4px; } + .el-timeline-item__timestamp.is-bottom { + margin-top: 8px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/timeline.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/timeline.css new file mode 100644 index 00000000..0456b063 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/timeline.css @@ -0,0 +1,256 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-timeline { + margin: 0; + font-size: 14px; + list-style: none; } + .el-timeline .el-timeline-item:last-child .el-timeline-item__tail { + display: none; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tooltip.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tooltip.css new file mode 100644 index 00000000..876f42ed --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tooltip.css @@ -0,0 +1,342 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/transfer.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/transfer.css new file mode 100644 index 00000000..458fde82 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/transfer.css @@ -0,0 +1,2349 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +.el-transfer { + font-size: 14px; } + .el-transfer__buttons { + display: inline-block; + vertical-align: middle; + padding: 0 30px; } + .el-transfer__button { + display: block; + margin: 0 auto; + padding: 10px; + border-radius: 50%; + color: #FFFFFF; + background-color: #409EFF; + font-size: 0; } + .el-transfer__button.is-with-texts { + border-radius: 4px; } + .el-transfer__button.is-disabled { + border: 1px solid #DCDFE6; + background-color: #F5F7FA; + color: #C0C4CC; } + .el-transfer__button.is-disabled:hover { + border: 1px solid #DCDFE6; + background-color: #F5F7FA; + color: #C0C4CC; } + .el-transfer__button:first-child { + margin-bottom: 10px; } + .el-transfer__button:nth-child(2) { + margin: 0; } + .el-transfer__button i, .el-transfer__button span { + font-size: 14px; } + .el-transfer__button [class*="el-icon-"] + span { + margin-left: 0; } + +.el-transfer-panel { + border: 1px solid #EBEEF5; + border-radius: 4px; + overflow: hidden; + background: #FFFFFF; + display: inline-block; + vertical-align: middle; + width: 200px; + max-height: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; } + .el-transfer-panel__body { + height: 246px; } + .el-transfer-panel__body.is-with-footer { + padding-bottom: 40px; } + .el-transfer-panel__list { + margin: 0; + padding: 6px 0; + list-style: none; + height: 246px; + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-transfer-panel__list.is-filterable { + height: 194px; + padding-top: 0; } + .el-transfer-panel__item { + height: 30px; + line-height: 30px; + padding-left: 15px; + display: block !important; } + .el-transfer-panel__item + .el-transfer-panel__item { + margin-left: 0; } + .el-transfer-panel__item.el-checkbox { + color: #606266; } + .el-transfer-panel__item:hover { + color: #409EFF; } + .el-transfer-panel__item.el-checkbox .el-checkbox__label { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-left: 24px; + line-height: 30px; } + .el-transfer-panel__item .el-checkbox__input { + position: absolute; + top: 8px; } + .el-transfer-panel__filter { + text-align: center; + margin: 15px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: block; + width: auto; } + .el-transfer-panel__filter .el-input__inner { + height: 32px; + width: 100%; + font-size: 12px; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 16px; + padding-right: 10px; + padding-left: 30px; } + .el-transfer-panel__filter .el-input__icon { + margin-left: 5px; } + .el-transfer-panel__filter .el-icon-circle-close { + cursor: pointer; } + .el-transfer-panel .el-transfer-panel__header { + height: 40px; + line-height: 40px; + background: #F5F7FA; + margin: 0; + padding-left: 15px; + border-bottom: 1px solid #EBEEF5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #000000; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox { + display: block; + line-height: 40px; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label { + font-size: 16px; + color: #303133; + font-weight: normal; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span { + position: absolute; + right: 15px; + color: #909399; + font-size: 12px; + font-weight: normal; } + .el-transfer-panel .el-transfer-panel__footer { + height: 40px; + background: #FFFFFF; + margin: 0; + padding: 0; + border-top: 1px solid #EBEEF5; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + z-index: 1; } + .el-transfer-panel .el-transfer-panel__footer::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-transfer-panel .el-transfer-panel__footer .el-checkbox { + padding-left: 20px; + color: #606266; } + .el-transfer-panel .el-transfer-panel__empty { + margin: 0; + height: 30px; + line-height: 30px; + padding: 6px 15px 0; + color: #909399; + text-align: center; } + .el-transfer-panel .el-checkbox__label { + padding-left: 8px; } + .el-transfer-panel .el-checkbox__inner { + height: 14px; + width: 14px; + border-radius: 3px; } + .el-transfer-panel .el-checkbox__inner::after { + height: 6px; + width: 3px; + left: 4px; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tree.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tree.css new file mode 100644 index 00000000..e1885014 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/tree.css @@ -0,0 +1,1210 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +.el-tree { + position: relative; + cursor: default; + background: #FFFFFF; + color: #606266; } + .el-tree__empty-block { + position: relative; + min-height: 60px; + text-align: center; + width: 100%; + height: 100%; } + .el-tree__empty-text { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + color: #909399; + font-size: 14px; } + .el-tree__drop-indicator { + position: absolute; + left: 0; + right: 0; + height: 1px; + background-color: #409EFF; } + +.el-tree-node { + white-space: nowrap; + outline: none; } + .el-tree-node:focus { + /* focus */ } + .el-tree-node:focus > .el-tree-node__content { + background-color: #F5F7FA; } + .el-tree-node.is-drop-inner > .el-tree-node__content .el-tree-node__label { + background-color: #409EFF; + color: #fff; } + .el-tree-node__content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 26px; + cursor: pointer; } + .el-tree-node__content > .el-tree-node__expand-icon { + padding: 6px; } + .el-tree-node__content > label.el-checkbox { + margin-right: 8px; } + .el-tree-node__content:hover { + background-color: #F5F7FA; } + .el-tree.is-dragging .el-tree-node__content { + cursor: move; } + .el-tree.is-dragging .el-tree-node__content * { + pointer-events: none; } + .el-tree.is-dragging.is-drop-not-allow .el-tree-node__content { + cursor: not-allowed; } + .el-tree-node__expand-icon { + cursor: pointer; + color: #C0C4CC; + font-size: 12px; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: -webkit-transform 0.3s ease-in-out; + transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out; } + .el-tree-node__expand-icon.expanded { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-tree-node__expand-icon.is-leaf { + color: transparent; + cursor: default; } + .el-tree-node__label { + font-size: 14px; } + .el-tree-node__loading-icon { + margin-right: 8px; + font-size: 14px; + color: #C0C4CC; } + .el-tree-node > .el-tree-node__children { + overflow: hidden; + background-color: transparent; } + .el-tree-node.is-expanded > .el-tree-node__children { + display: block; } + +.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content { + background-color: #f0f7ff; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/upload.css b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/upload.css new file mode 100644 index 00000000..a0e29ae0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/theme/upload.css @@ -0,0 +1,1045 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-progress { + position: relative; + line-height: 1; } + .el-progress__text { + font-size: 14px; + color: #606266; + display: inline-block; + vertical-align: middle; + margin-left: 10px; + line-height: 1; } + .el-progress__text i { + vertical-align: middle; + display: block; } + .el-progress--circle, .el-progress--dashboard { + display: inline-block; } + .el-progress--circle .el-progress__text, .el-progress--dashboard .el-progress__text { + position: absolute; + top: 50%; + left: 0; + width: 100%; + text-align: center; + margin: 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); } + .el-progress--circle .el-progress__text i, .el-progress--dashboard .el-progress__text i { + vertical-align: middle; + display: inline-block; } + .el-progress--without-text .el-progress__text { + display: none; } + .el-progress--without-text .el-progress-bar { + padding-right: 0; + margin-right: 0; + display: block; } + .el-progress--text-inside .el-progress-bar { + padding-right: 0; + margin-right: 0; } + .el-progress.is-success .el-progress-bar__inner { + background-color: #67C23A; } + .el-progress.is-success .el-progress__text { + color: #67C23A; } + .el-progress.is-warning .el-progress-bar__inner { + background-color: #E6A23C; } + .el-progress.is-warning .el-progress__text { + color: #E6A23C; } + .el-progress.is-exception .el-progress-bar__inner { + background-color: #F56C6C; } + .el-progress.is-exception .el-progress__text { + color: #F56C6C; } + +.el-progress-bar { + padding-right: 50px; + display: inline-block; + vertical-align: middle; + width: 100%; + margin-right: -55px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-progress-bar__outer { + height: 6px; + border-radius: 100px; + background-color: #EBEEF5; + overflow: hidden; + position: relative; + vertical-align: middle; } + .el-progress-bar__inner { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: #409EFF; + text-align: right; + border-radius: 100px; + line-height: 1; + white-space: nowrap; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; } + .el-progress-bar__inner::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-progress-bar__innerText { + display: inline-block; + vertical-align: middle; + color: #FFFFFF; + font-size: 12px; + margin: 0 5px; } + +@-webkit-keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +@keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-upload { + display: inline-block; + text-align: center; + cursor: pointer; + outline: none; + /* 照片墙模式 */ } + .el-upload__input { + display: none; } + .el-upload__tip { + font-size: 12px; + color: #606266; + margin-top: 7px; } + .el-upload iframe { + position: absolute; + z-index: -1; + top: 0; + left: 0; + opacity: 0; + filter: alpha(opacity=0); } + .el-upload--picture-card { + background-color: #fbfdff; + border: 1px dashed #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 148px; + height: 148px; + cursor: pointer; + line-height: 146px; + vertical-align: top; } + .el-upload--picture-card i { + font-size: 28px; + color: #8c939d; } + .el-upload--picture-card:hover { + border-color: #409EFF; + color: #409EFF; } + .el-upload:focus { + border-color: #409EFF; + color: #409EFF; } + .el-upload:focus .el-upload-dragger { + border-color: #409EFF; } + +.el-upload-dragger { + background-color: #fff; + border: 1px dashed #d9d9d9; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 360px; + height: 180px; + text-align: center; + cursor: pointer; + position: relative; + overflow: hidden; } + .el-upload-dragger .el-icon-upload { + font-size: 67px; + color: #C0C4CC; + margin: 40px 0 16px; + line-height: 50px; } + .el-upload-dragger + .el-upload__tip { + text-align: center; } + .el-upload-dragger ~ .el-upload__files { + border-top: 1px solid #DCDFE6; + margin-top: 7px; + padding-top: 5px; } + .el-upload-dragger .el-upload__text { + color: #606266; + font-size: 14px; + text-align: center; } + .el-upload-dragger .el-upload__text em { + color: #409EFF; + font-style: normal; } + .el-upload-dragger:hover { + border-color: #409EFF; } + .el-upload-dragger.is-dragover { + background-color: rgba(32, 159, 255, 0.06); + border: 2px dashed #409EFF; } + +.el-upload-list { + margin: 0; + padding: 0; + list-style: none; } + .el-upload-list__item { + -webkit-transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + font-size: 14px; + color: #606266; + line-height: 1.8; + margin-top: 5px; + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + width: 100%; } + .el-upload-list__item .el-progress { + position: absolute; + top: 20px; + width: 100%; } + .el-upload-list__item .el-progress__text { + position: absolute; + right: 0; + top: -13px; } + .el-upload-list__item .el-progress-bar { + margin-right: 0; + padding-right: 0; } + .el-upload-list__item:first-child { + margin-top: 10px; } + .el-upload-list__item .el-icon-upload-success { + color: #67C23A; } + .el-upload-list__item .el-icon-close { + display: none; + position: absolute; + top: 5px; + right: 5px; + cursor: pointer; + opacity: .75; + color: #606266; } + .el-upload-list__item .el-icon-close:hover { + opacity: 1; } + .el-upload-list__item .el-icon-close-tip { + display: none; + position: absolute; + top: 5px; + right: 5px; + font-size: 12px; + cursor: pointer; + opacity: 1; + color: #409EFF; } + .el-upload-list__item:hover { + background-color: #F5F7FA; } + .el-upload-list__item:hover .el-icon-close { + display: inline-block; } + .el-upload-list__item:hover .el-progress__text { + display: none; } + .el-upload-list__item.is-success .el-upload-list__item-status-label { + display: block; } + .el-upload-list__item.is-success .el-upload-list__item-name:hover, .el-upload-list__item.is-success .el-upload-list__item-name:focus { + color: #409EFF; + cursor: pointer; } + .el-upload-list__item.is-success:focus:not(:hover) { + /* 键盘focus */ } + .el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip { + display: inline-block; } + .el-upload-list__item.is-success:not(.focusing):focus, .el-upload-list__item.is-success:active { + /* click时 */ + outline-width: 0; } + .el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip, .el-upload-list__item.is-success:active .el-icon-close-tip { + display: none; } + .el-upload-list__item.is-success:hover .el-upload-list__item-status-label, .el-upload-list__item.is-success:focus .el-upload-list__item-status-label { + display: none; } + .el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label { + display: block; } + .el-upload-list__item-name { + color: #606266; + display: block; + margin-right: 40px; + overflow: hidden; + padding-left: 4px; + text-overflow: ellipsis; + -webkit-transition: color .3s; + transition: color .3s; + white-space: nowrap; } + .el-upload-list__item-name [class^="el-icon"] { + height: 100%; + margin-right: 7px; + color: #909399; + line-height: inherit; } + .el-upload-list__item-status-label { + position: absolute; + right: 5px; + top: 0; + line-height: inherit; + display: none; } + .el-upload-list__item-delete { + position: absolute; + right: 10px; + top: 0; + font-size: 12px; + color: #606266; + display: none; } + .el-upload-list__item-delete:hover { + color: #409EFF; } + .el-upload-list--picture-card { + margin: 0; + display: inline; + vertical-align: top; } + .el-upload-list--picture-card .el-upload-list__item { + overflow: hidden; + background-color: #fff; + border: 1px solid #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 148px; + height: 148px; + margin: 0 8px 8px 0; + display: inline-block; } + .el-upload-list--picture-card .el-upload-list__item .el-icon-check, + .el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check { + color: #FFFFFF; } + .el-upload-list--picture-card .el-upload-list__item .el-icon-close { + display: none; } + .el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label { + display: none; } + .el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text { + display: block; } + .el-upload-list--picture-card .el-upload-list__item-name { + display: none; } + .el-upload-list--picture-card .el-upload-list__item-thumbnail { + width: 100%; + height: 100%; } + .el-upload-list--picture-card .el-upload-list__item-status-label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); } + .el-upload-list--picture-card .el-upload-list__item-status-label i { + font-size: 12px; + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .el-upload-list--picture-card .el-upload-list__item-actions { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + cursor: default; + text-align: center; + color: #fff; + opacity: 0; + font-size: 20px; + background-color: rgba(0, 0, 0, 0.5); + -webkit-transition: opacity .3s; + transition: opacity .3s; } + .el-upload-list--picture-card .el-upload-list__item-actions::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-upload-list--picture-card .el-upload-list__item-actions span { + display: none; + cursor: pointer; } + .el-upload-list--picture-card .el-upload-list__item-actions span + span { + margin-left: 15px; } + .el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete { + position: static; + font-size: inherit; + color: inherit; } + .el-upload-list--picture-card .el-upload-list__item-actions:hover { + opacity: 1; } + .el-upload-list--picture-card .el-upload-list__item-actions:hover span { + display: inline-block; } + .el-upload-list--picture-card .el-progress { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + bottom: auto; + width: 126px; } + .el-upload-list--picture-card .el-progress .el-progress__text { + top: 50%; } + .el-upload-list--picture .el-upload-list__item { + overflow: hidden; + z-index: 0; + background-color: #fff; + border: 1px solid #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin-top: 10px; + padding: 10px 10px 10px 90px; + height: 92px; } + .el-upload-list--picture .el-upload-list__item .el-icon-check, + .el-upload-list--picture .el-upload-list__item .el-icon-circle-check { + color: #FFFFFF; } + .el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label { + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + top: -2px; + right: -12px; } + .el-upload-list--picture .el-upload-list__item:hover .el-progress__text { + display: block; } + .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name { + line-height: 70px; + margin-top: 0; } + .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i { + display: none; } + .el-upload-list--picture .el-upload-list__item-thumbnail { + vertical-align: middle; + display: inline-block; + width: 70px; + height: 70px; + float: left; + position: relative; + z-index: 1; + margin-left: -80px; + background-color: #FFFFFF; } + .el-upload-list--picture .el-upload-list__item-name { + display: block; + margin-top: 20px; } + .el-upload-list--picture .el-upload-list__item-name i { + font-size: 70px; + line-height: 1; + position: absolute; + left: 9px; + top: 10px; } + .el-upload-list--picture .el-upload-list__item-status-label { + position: absolute; + right: -17px; + top: -7px; + width: 46px; + height: 26px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; } + .el-upload-list--picture .el-upload-list__item-status-label i { + font-size: 12px; + margin-top: 12px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .el-upload-list--picture .el-progress { + position: relative; + top: -7px; } + +.el-upload-cover { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + z-index: 10; + cursor: default; } + .el-upload-cover::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-upload-cover img { + display: block; + width: 100%; + height: 100%; } + .el-upload-cover__label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); } + .el-upload-cover__label i { + font-size: 12px; + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + color: #fff; } + .el-upload-cover__progress { + display: inline-block; + vertical-align: middle; + position: static; + width: 243px; } + .el-upload-cover__progress + .el-upload__inner { + opacity: 0; } + .el-upload-cover__content { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + .el-upload-cover__interact { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.72); + text-align: center; } + .el-upload-cover__interact .btn { + display: inline-block; + color: #FFFFFF; + font-size: 14px; + cursor: pointer; + vertical-align: middle; + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + margin-top: 60px; } + .el-upload-cover__interact .btn i { + margin-top: 0; } + .el-upload-cover__interact .btn span { + opacity: 0; + -webkit-transition: opacity .15s linear; + transition: opacity .15s linear; } + .el-upload-cover__interact .btn:not(:first-child) { + margin-left: 35px; } + .el-upload-cover__interact .btn:hover { + -webkit-transform: translateY(-13px); + transform: translateY(-13px); } + .el-upload-cover__interact .btn:hover span { + opacity: 1; } + .el-upload-cover__interact .btn i { + color: #FFFFFF; + display: block; + font-size: 24px; + line-height: inherit; + margin: 0 auto 5px; } + .el-upload-cover__title { + position: absolute; + bottom: 0; + left: 0; + background-color: #FFFFFF; + height: 36px; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: normal; + text-align: left; + padding: 0 10px; + margin: 0; + line-height: 36px; + font-size: 14px; + color: #303133; } + .el-upload-cover + .el-upload__inner { + opacity: 0; + position: relative; + z-index: 1; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/DateRange/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/DateRange/index.vue new file mode 100644 index 00000000..f4dd2c0b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/DateRange/index.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Dialog/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/components/Dialog/index.js new file mode 100644 index 00000000..5118d7a6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Dialog/index.js @@ -0,0 +1,77 @@ +import $ from 'jquery'; +import Vue from 'vue'; +import router from '@/router'; +import store from '@/store'; + +window.jQuery = $; +const layer = require('layui-layer'); + +class Dialog { + /** + * 关闭弹窗 + * @param {*} index 要关闭的弹窗的index + */ + static close (index) { + layer.close(index); + } + /** + * 关闭所有弹窗 + */ + static closeAll () { + layer.closeAll(); + } + /** + * 打开弹窗 + * @param {*} title 弹窗标题 + * @param {*} component 弹窗内容的组件 + * @param {*} options 弹窗设置(详情请见layui官网) + * @param {*} params 弹窗组件参数 + */ + static show (title, component, options, params) { + return new Promise((resolve, reject) => { + let layerOptions = { + title: title, + type: 1, + skin: 'layer-dialog', + resize: false, + offset: 'auto', + zIndex: 1000, + index: 0, + contentDom: null + }; + + layerOptions = {...layerOptions, ...options}; + layerOptions.end = () => { + if (layerOptions.contentDom) document.body.removeChild(layerOptions.contentDom); + } + + let observer = { + cancel: function (isSuccess = false, data = undefined) { + layer.close(this.index); + if (isSuccess) { + resolve(data); + } else { + reject(); + } + }, + index: -1 + } + layerOptions.cancel = () => { + reject(); + } + let dom = document.createElement('div'); + document.body.appendChild(dom); + let Content = Vue.extend(component); + let vueObj = new Content({router: router, store: store, propsData: params}); + vueObj.observer = observer; + vueObj.$mount(dom); + layerOptions.contentDom = vueObj.$el; + layerOptions.content = $(layerOptions.contentDom); + observer.index = layer.open(layerOptions); + }); + } +} + +Vue.prototype.$dialog = Dialog; + +export default Dialog; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/FilterBox/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/FilterBox/index.vue new file mode 100644 index 00000000..d7350358 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/FilterBox/index.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Hamburger/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/Hamburger/index.vue new file mode 100644 index 00000000..6df80299 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/IconSelect/icon.json b/orange-demo-flowable/orange-demo-flowable-web/src/components/IconSelect/icon.json new file mode 100644 index 00000000..13f2f58b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/IconSelect/icon.json @@ -0,0 +1,280 @@ +[ + "el-icon-delete-solid", + "el-icon-delete", + "el-icon-s-tools", + "el-icon-setting", + "el-icon-user-solid", + "el-icon-user", + "el-icon-phone", + "el-icon-phone-outline", + "el-icon-more", + "el-icon-more-outline", + "el-icon-star-on", + "el-icon-star-off", + "el-icon-s-goods", + "el-icon-goods", + "el-icon-warning", + "el-icon-warning-outline", + "el-icon-question", + "el-icon-info", + "el-icon-remove", + "el-icon-circle-plus", + "el-icon-success", + "el-icon-error", + "el-icon-zoom-in", + "el-icon-zoom-out", + "el-icon-remove-outline", + "el-icon-circle-plus-outline", + "el-icon-circle-check", + "el-icon-circle-close", + "el-icon-s-help", + "el-icon-help", + "el-icon-minus", + "el-icon-plus", + "el-icon-check", + "el-icon-close", + "el-icon-picture", + "el-icon-picture-outline", + "el-icon-picture-outline-round", + "el-icon-upload", + "el-icon-upload2", + "el-icon-download", + "el-icon-camera-solid", + "el-icon-camera", + "el-icon-video-camera-solid", + "el-icon-video-camera", + "el-icon-message-solid", + "el-icon-bell", + "el-icon-s-cooperation", + "el-icon-s-order", + "el-icon-s-platform", + "el-icon-s-fold", + "el-icon-s-unfold", + "el-icon-s-operation", + "el-icon-s-promotion", + "el-icon-s-home", + "el-icon-s-release", + "el-icon-s-ticket", + "el-icon-s-management", + "el-icon-s-open", + "el-icon-s-shop", + "el-icon-s-marketing", + "el-icon-s-flag", + "el-icon-s-comment", + "el-icon-s-finance", + "el-icon-s-claim", + "el-icon-s-custom", + "el-icon-s-opportunity", + "el-icon-s-data", + "el-icon-s-check", + "el-icon-s-grid", + "el-icon-menu", + "el-icon-share", + "el-icon-d-caret", + "el-icon-caret-left", + "el-icon-caret-right", + "el-icon-caret-bottom", + "el-icon-caret-top", + "el-icon-bottom-left", + "el-icon-bottom-right", + "el-icon-back", + "el-icon-right", + "el-icon-bottom", + "el-icon-top", + "el-icon-top-left", + "el-icon-top-right", + "el-icon-arrow-left", + "el-icon-arrow-right", + "el-icon-arrow-down", + "el-icon-arrow-up", + "el-icon-d-arrow-left", + "el-icon-d-arrow-right", + "el-icon-video-pause", + "el-icon-video-play", + "el-icon-refresh", + "el-icon-refresh-right", + "el-icon-refresh-left", + "el-icon-finished", + "el-icon-sort", + "el-icon-sort-up", + "el-icon-sort-down", + "el-icon-rank", + "el-icon-loading", + "el-icon-view", + "el-icon-c-scale-to-original", + "el-icon-date", + "el-icon-edit", + "el-icon-edit-outline", + "el-icon-folder", + "el-icon-folder-opened", + "el-icon-folder-add", + "el-icon-folder-remove", + "el-icon-folder-delete", + "el-icon-folder-checked", + "el-icon-tickets", + "el-icon-document-remove", + "el-icon-document-delete", + "el-icon-document-copy", + "el-icon-document-checked", + "el-icon-document", + "el-icon-document-add", + "el-icon-printer", + "el-icon-paperclip", + "el-icon-takeaway-box", + "el-icon-search", + "el-icon-monitor", + "el-icon-attract", + "el-icon-mobile", + "el-icon-scissors", + "el-icon-umbrella", + "el-icon-headset", + "el-icon-brush", + "el-icon-mouse", + "el-icon-coordinate", + "el-icon-magic-stick", + "el-icon-reading", + "el-icon-data-line", + "el-icon-data-board", + "el-icon-pie-chart", + "el-icon-data-analysis", + "el-icon-collection-tag", + "el-icon-film", + "el-icon-suitcase", + "el-icon-suitcase-1", + "el-icon-receiving", + "el-icon-collection", + "el-icon-files", + "el-icon-notebook-1", + "el-icon-notebook-2", + "el-icon-toilet-paper", + "el-icon-office-building", + "el-icon-school", + "el-icon-table-lamp", + "el-icon-house", + "el-icon-no-smoking", + "el-icon-smoking", + "el-icon-shopping-cart-full", + "el-icon-shopping-cart-1", + "el-icon-shopping-cart-2", + "el-icon-shopping-bag-1", + "el-icon-shopping-bag-2", + "el-icon-sold-out", + "el-icon-sell", + "el-icon-present", + "el-icon-box", + "el-icon-bank-card", + "el-icon-money", + "el-icon-coin", + "el-icon-wallet", + "el-icon-discount", + "el-icon-price-tag", + "el-icon-news", + "el-icon-guide", + "el-icon-male", + "el-icon-female", + "el-icon-thumb", + "el-icon-cpu", + "el-icon-link", + "el-icon-connection", + "el-icon-open", + "el-icon-turn-off", + "el-icon-set-up", + "el-icon-chat-round", + "el-icon-chat-line-round", + "el-icon-chat-square", + "el-icon-chat-dot-round", + "el-icon-chat-dot-square", + "el-icon-chat-line-square", + "el-icon-message", + "el-icon-postcard", + "el-icon-position", + "el-icon-turn-off-microphone", + "el-icon-microphone", + "el-icon-close-notification", + "el-icon-bangzhu", + "el-icon-time", + "el-icon-odometer", + "el-icon-crop", + "el-icon-aim", + "el-icon-switch-button", + "el-icon-full-screen", + "el-icon-copy-document", + "el-icon-mic", + "el-icon-stopwatch", + "el-icon-medal-1", + "el-icon-medal", + "el-icon-trophy", + "el-icon-trophy-1", + "el-icon-first-aid-kit", + "el-icon-discover", + "el-icon-place", + "el-icon-location", + "el-icon-location-outline", + "el-icon-location-information", + "el-icon-add-location", + "el-icon-delete-location", + "el-icon-map-location", + "el-icon-alarm-clock", + "el-icon-timer", + "el-icon-watch-1", + "el-icon-watch", + "el-icon-lock", + "el-icon-unlock", + "el-icon-key", + "el-icon-service", + "el-icon-mobile-phone", + "el-icon-bicycle", + "el-icon-truck", + "el-icon-ship", + "el-icon-basketball", + "el-icon-football", + "el-icon-soccer", + "el-icon-baseball", + "el-icon-wind-power", + "el-icon-light-rain", + "el-icon-lightning", + "el-icon-heavy-rain", + "el-icon-sunrise", + "el-icon-sunrise-1", + "el-icon-sunset", + "el-icon-sunny", + "el-icon-cloudy", + "el-icon-partly-cloudy", + "el-icon-cloudy-and-sunny", + "el-icon-moon", + "el-icon-moon-night", + "el-icon-dish", + "el-icon-dish-1", + "el-icon-food", + "el-icon-chicken", + "el-icon-fork-spoon", + "el-icon-knife-fork", + "el-icon-burger", + "el-icon-tableware", + "el-icon-sugar", + "el-icon-dessert", + "el-icon-ice-cream", + "el-icon-hot-water", + "el-icon-water-cup", + "el-icon-coffee-cup", + "el-icon-cold-drink", + "el-icon-goblet", + "el-icon-goblet-full", + "el-icon-goblet-square", + "el-icon-goblet-square-full", + "el-icon-refrigerator", + "el-icon-grape", + "el-icon-watermelon", + "el-icon-cherry", + "el-icon-apple", + "el-icon-pear", + "el-icon-orange", + "el-icon-coffee", + "el-icon-ice-tea", + "el-icon-ice-drink", + "el-icon-milk-tea", + "el-icon-potato-strips", + "el-icon-lollipop", + "el-icon-ice-cream-square", + "el-icon-ice-cream-round" +] \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/IconSelect/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/IconSelect/index.vue new file mode 100644 index 00000000..06be852b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/IconSelect/index.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/InputNumberRange/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/InputNumberRange/index.vue new file mode 100644 index 00000000..94f59ba4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/InputNumberRange/index.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Progress/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/Progress/index.vue new file mode 100644 index 00000000..2225e489 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Progress/index.vue @@ -0,0 +1,44 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/RichEditor/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/RichEditor/index.vue new file mode 100644 index 00000000..fea000a9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/RichEditor/index.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/TableProgressColumn/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/TableProgressColumn/index.vue new file mode 100644 index 00000000..7e82a4eb --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/TableProgressColumn/index.vue @@ -0,0 +1,119 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/TreeSelect/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/TreeSelect/index.vue new file mode 100644 index 00000000..d10b1123 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/TreeSelect/index.vue @@ -0,0 +1,290 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/config/development.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/config/development.js new file mode 100644 index 00000000..883e8c0e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/config/development.js @@ -0,0 +1,4 @@ +module.exports = { + baseUrl: 'http://localhost:8082/', + projectName: '橙单代码生成平台' +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/config/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/config/index.js new file mode 100644 index 00000000..35003bc1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/config/index.js @@ -0,0 +1,18 @@ +const projectConfig = require('../config/' + process.env.NODE_ENV); + +export const globalConfig = { + httpOption: { + // 调用的时候是否显示蒙版 + showMask: true, + // 是否显示公共的错误提示 + showError: true, + // 是否开启节流功能,同一个url不能频繁重复调用 + throttleFlag: false, + // 节流间隔 + throttleTimeout: 50 + }, + axiosOption: { + } +}; + +export default projectConfig; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/config/production.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/config/production.js new file mode 100644 index 00000000..1f34bb53 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/config/production.js @@ -0,0 +1,4 @@ +module.exports = { + baseUrl: 'http://localhost:8082/', + projectName: '橙单项目' +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/directive/sortable.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/directive/sortable.js new file mode 100644 index 00000000..410de2d9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/directive/sortable.js @@ -0,0 +1,14 @@ +import Vue from 'vue' +import { SortableData } from './sortableData'; + +/** + * 拖拽排序指令 + */ +Vue.directive('sortable', { + inserted: function (el, binding, vnode) { + let sortableData = binding.value; + if (sortableData == null || !(sortableData instanceof SortableData)) return; + + sortableData.init(vnode.elm); + } +}); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/directive/sortableData.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/directive/sortableData.js new file mode 100644 index 00000000..4993e08a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/directive/sortableData.js @@ -0,0 +1,60 @@ +import sortable from 'sortablejs' +/** + * 拖拽排序对象 + * expample + *
    + *
  • A
  • + *
  • B
  • + *
  • C
  • + *
  • D
  • + *
+ */ +export class SortableData { + constructor (data, group) { + this.list = data; + this.group = group; + this.ghostClass = 'sortable-ghost'; + this.sortable = null; + this.disabled = false; + }; + + setData (list) { + this.list = list; + } + + getElement (el) { + return el; + }; + + onEnd (oldIndex, newIndex) { + if (oldIndex === newIndex || this.list == null) return; + let targetRow = this.list.splice(oldIndex, 1)[0] + this.list.splice(newIndex, 0, targetRow); + }; + + init (el) { + var _this = this; + + var _option = {}; + if (this.ghostClass != null) _option.ghostClass = this.ghostClass; + if (this.group != null) _option.group = this.group; + if (this.disabled != null) _option.disabled = this.disabled; + // 列表中能拖动的dom的选择器(例如:.drag-item) + if (this.draggable != null) _option.draggable = this.draggable; + // 列表中拖动项,拖动把柄的选择器,只有点击这个选择出来的dom才可以开始拖动(例如:.drag-handle) + if (this.handle != null) _option.handle = this.handle; + _option.setData = function (dataTransfer) { + dataTransfer.setData('Text', ''); + }; + _option.onEnd = function (evt) { + _this.onEnd(evt.oldIndex, evt.newIndex); + }; + + this.sortable = sortable.create(_this.getElement(el), _option); + }; + + release () { + if (this.sortable != null) this.sortable.destroy(); + this.sortable = null; + } +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/http/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/http/index.js new file mode 100644 index 00000000..8e17cff6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/http/index.js @@ -0,0 +1,197 @@ +import Vue from 'vue'; +import { Loading, Message } from 'element-ui'; +import request from './request'; +import requestUrl from './requestUrl'; +import merge from 'lodash/merge'; +import { globalConfig } from '@/core/config'; + +/** + * 遮罩管理,多次调用支持引用计数 + */ +class LoadingManager { + constructor (options) { + this.options = options; + this.refCount = 0; + this.loading = undefined; + } + + showMask () { + this.loading = Loading.service(this.options); + this.refCount++; + } + + hideMask () { + if (this.refCount <= 1 && this.loading != null) { + this.loading.close(); + this.loading = null; + } + this.refCount--; + this.refCount = Math.max(0, this.refCount); + } +} + +const loadingManager = new LoadingManager({ + fullscreen: true, + background: 'rgba(0, 0, 0, 0.1)' +}); + +/** + * post请求 + * @param {String} url 请求的url + * @param {Object} params 请求参数 + * @param {Object} options axios设置项 + * @returns {Promise} + */ +const fetchPost = function (url, params, options) { + if (options == null) return {}; + let tempOptions = { + ...options, + method: 'post', + url: requestUrl(url), + data: params + }; + + return request(tempOptions); +}; +/** + * get请求 + * @param {String} url 请求的url + * @param {Object} params 请求参数 + * @param {Object} options axios设置项 + * @returns {Promise} + */ +const fetchGet = function (url, params, options) { + if (options == null) return {}; + let tempOptions = { + ...options, + method: 'get', + url: requestUrl(url), + params + }; + return request(tempOptions); +}; +/** + * 下载请求 + * @param {String} url 请求的url + * @param {Object} params 请求参数 + * @param {String} fileName 下载后保存的文件名 + * @returns {Promise} + */ +const fetchDownload = function (url, params, fileName) { + return new Promise((resolve, reject) => { + request({ + url: requestUrl(url), + method: 'post', + data: params, + responseType: 'blob', + transformResponse: function (data) { + return (data instanceof Blob && data.size > 0) ? data : undefined; + } + }).then(res => { + if (res.data == null) { + reject(new Error('下载文件失败')); + } else { + let blobData = new Blob([res.data], { type: 'application/octet-stream' }); + let blobUrl = window.URL.createObjectURL(blobData); + let linkDom = document.createElement('a'); + linkDom.style.display = 'none'; + linkDom.href = blobUrl; + linkDom.setAttribute('download', fileName); + if (typeof linkDom.download === 'undefined') { + linkDom.setAttribute('target', '_blank'); + } + document.body.appendChild(linkDom); + linkDom.click(); + document.body.removeChild(linkDom); + window.URL.revokeObjectURL(blobData); + resolve(); + } + }).catch(e => { + if (e instanceof Blob) { + let reader = new FileReader(); + reader.onload = function () { + let jsonObj = JSON.parse(reader.result); + reject((jsonObj || {}).errorMessage || '下载文件失败'); + } + reader.readAsText(e); + } else { + reject(e); + } + }); + }); +} + +// url调用节流Set +const ajaxThrottleSet = new Set(); +/** + * 数据请求 + * @param {String} url 请求的url + * @param {String} type 请求类型 (get,post) + * @param {Object} params 请求参数 + * @param {Object} axiosOption axios设置 + * @param {Object} options 显示设置 + */ +const doUrl = function (url, type, params, axiosOption, options) { + options = merge(globalConfig.httpOption, options); + axiosOption = merge(globalConfig.axiosOption, axiosOption); + if (type == null || type === '') type = 'post'; + if (ajaxThrottleSet.has(url) && options.throttleFlag) { + return Promise.resolve(); + } else { + if (options.throttleFlag) { + ajaxThrottleSet.add(url); + setTimeout(() => { + ajaxThrottleSet.delete(url); + }, options.throttleTimeout || 50); + } + return new Promise((resolve, reject) => { + if (options.showMask) loadingManager.showMask(); + let ajaxCall = null; + if (type.toLowerCase() === 'get') { + ajaxCall = fetchGet(url, params, axiosOption); + } else if (type.toLowerCase() === 'post') { + ajaxCall = fetchPost(url, params, axiosOption); + } + + if (ajaxCall != null) { + ajaxCall.then(res => { + if (options.showMask) loadingManager.hideMask(); + if (res.data && res.data.success) { + resolve(res.data); + } else { + if (options.showError) { + Message.error({ + showClose: true, + message: res.data.errorMessage ? res.data.errorMessage : '数据请求失败' + }); + } + reject(res.data); + } + }).catch(e => { + if (options.showMask) loadingManager.hideMask(); + if (options.showError) { + Message.error({ + showClose: true, + message: e.errorMessage ? e.errorMessage : '网络请求错误' + }); + } + reject(e); + }); + } else { + if (options.showMask) loadingManager.hideMask(); + reject(new Error('错误的请求类型 - ' + type)); + } + }); + } +}; + +Vue.prototype.download = fetchDownload; +Vue.prototype.doUrl = doUrl; +Vue.prototype.loadingManager = loadingManager; + +export default { + doUrl, + fetchPost, + fetchGet, + fetchDownload +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/http/request.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/http/request.js new file mode 100644 index 00000000..13210938 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/http/request.js @@ -0,0 +1,75 @@ +import axios from 'axios'; +import router from '@/router'; +import dialog from '@/components/Dialog'; +import JSONbig from 'json-bigint'; +import { getToken, setToken } from '@/utils'; + +// 创建axios实例 +const service = axios.create({ + timeout: 1000 * 30, + withCredentials: true, + headers: { + // 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' + 'Content-Type': 'application/json; charset=utf-8', + 'deviceType': '4' + }, + transformResponse: [ + function (data) { + if (typeof data === 'string') { + const JSONbigString = new JSONbig({storeAsString: true}); + return JSONbigString.parse(data); + } else { + return data; + } + } + ] +}) + +// request拦截器 +service.interceptors.request.use( + config => { + let token = getToken(); + let menuIdJsonStr = window.sessionStorage.getItem('currentMenuId'); + let currentMenuId; + if (menuIdJsonStr != null) { + currentMenuId = (JSON.parse(menuIdJsonStr) || {}).data; + } + if (token != null) config.headers['Authorization'] = token; + if (currentMenuId != null) config.headers['MenuId'] = currentMenuId; + return config + }, error => { + return Promise.reject(error) + } +); + +// response拦截器 +service.interceptors.response.use( + response => { + if (response.data && response.data.errorCode === 'UNAUTHORIZED_LOGIN') { // 401, token失效 + dialog.closeAll(); + router.push({ name: 'login' }) + } else { + if (response.headers['refreshedtoken'] != null) { + setToken(response.headers['refreshedtoken']); + } + } + return response + }, error => { + let response = error.response; + + if (response && response.data) { + if (response.data.errorCode === 'UNAUTHORIZED_LOGIN') { + dialog.closeAll(); + router.push({ name: 'login' }); + } + + return Promise.reject(response.data); + } else { + return Promise.reject(new Error({ + errorMessage: '数据获取失败,请稍后再试' + })); + } + } +); + +export default service diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/http/requestUrl.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/http/requestUrl.js new file mode 100644 index 00000000..96a921e1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/http/requestUrl.js @@ -0,0 +1,27 @@ +import projectConfig from '@/core/config'; +import { objectToQueryString } from '@/utils'; +console.log(process.env.NODE_ENV, projectConfig); + +/** + * 请求地址统一处理/组装 + * @param actionName action方法名称 + */ +export default function (actionName) { + if (actionName != null && actionName !== '') { + if (actionName.substr(0, 1) === '/') actionName = actionName.substr(1); + } + return projectConfig.baseUrl + actionName; +} + +export function buildGetUrl (actionName, params) { + let queryString = objectToQueryString(params); + if (actionName != null && actionName !== '') { + if (actionName.substr(0, 1) === '/') actionName = actionName.substr(1); + } + + return projectConfig.baseUrl + actionName + (queryString == null ? '' : ('?' + queryString)); +} + +export { + projectConfig +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/global.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/global.js new file mode 100644 index 00000000..7c78fa4b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/global.js @@ -0,0 +1,114 @@ +import Vue from 'vue'; +import Request from '@/core/http/request.js'; +import { mapMutations, mapGetters } from 'vuex'; + +// 全局mixin对象 +const globalMixin = { + data () { + return { + isHttpLoading: false + } + }, + methods: { + /** + * 是否显示遮罩 + * @param {Boolean} isShow 是否显示 + */ + showMask (isShow) { + isShow ? this.loadingManager.showMask() : this.loadingManager.hideMask(); + }, + /** + * 判读用户是否有权限 + * @param {String} permCode 权限字 + */ + checkPermCodeExist (permCode) { + if ((this.getUserInfo || {}).permCodeSet != null) { + return this.getUserInfo.permCodeSet.has(permCode); + } else { + return this.getUserInfo.isAdmin; + } + }, + /** + * 将输入的值转换成指定的类型 + * @param {Any} value + * @param {String} type 要转换的类型(integer、float、boolean、string) + */ + parseParams (value, type = 'string') { + if (value == null) return value; + switch (type) { + case 'integer': return Number.parseInt(value); + case 'float': return Number.parseFloat(value); + case 'boolean': return (value === 'true' || value); + default: return String(value); + } + }, + /** + * 将输入值转换为执行的类型数组 + * @param {Array} value 输入数组 + * @param {String} type 要转换的类型(integer、float、boolean、string) + */ + parseArrayParams (value, type = 'string') { + if (Array.isArray(value)) { + return value.map((item) => { + switch (type) { + case 'integer': return Number.parseInt(item); + case 'float': return Number.parseFloat(item); + case 'boolean': return (item === 'true' || item); + default: return String(item); + } + }); + } else { + return []; + } + }, + /** + * 下载上传的文件 + * @param {*} url 下载文件的url + * @param {*} fileName 下载文件名 + */ + downloadFile (url, fileName) { + Request({ + url: url, + method: 'get', + responseType: 'blob', + transformResponse: function (data) { + return data; + } + }).then(res => { + let data = res.data; + if (res.status === 200 && data instanceof Blob) { + let url = window.URL.createObjectURL(data); + let link = document.createElement('a'); + link.style.display = 'none'; + link.href = url; + link.setAttribute('download', fileName); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else { + this.$message.error('下载文件失败'); + } + }).catch(e => { + let reader = new FileReader(); + reader.onload = () => { + let jsonObj = JSON.parse(reader.result); + this.$message.error((jsonObj || {}).errorMessage || '下载文件失败'); + } + reader.readAsText(e); + }); + }, + ...mapMutations(['setLoadingStatus']) + }, + computed: { + ...mapGetters(['getUserInfo']) + }, + watch: { + 'loadingManager.loading': { + handler: function (newValue) { + this.isHttpLoading = (newValue != null); + } + } + } +} + +Vue.mixin(globalMixin); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/index.js new file mode 100644 index 00000000..43cffa1e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/index.js @@ -0,0 +1,298 @@ +import projectConfig from '@/core/config'; +import { buildGetUrl } from '@/core/http/requestUrl.js'; +import { formatDate, parseDate } from 'element-ui/src/utils/date-util'; +import { mapMutations } from 'vuex'; +import { getToken } from '@/utils'; + +/** + * 上传文件组件相关方法 + */ +const uploadMixin = { + methods: { + /** + * 解析返回的上传文件数据 + * @param {String} jsonData 上传文件数据,[{name, downloadUri, filename}] + * @param {Object} params 上传文件的参数 + * @returns {Array} 上传文件信息,[{name, downloadUri, filename, url}] + */ + parseUploadData (jsonData, params) { + let pathList = []; + if (jsonData != null) { + try { + pathList = JSON.parse(jsonData); + } catch (e) { + console.error(e); + } + } + + return pathList.map((item) => { + let downloadParams = {...params}; + downloadParams.filename = item.filename; + return { + ...item, + url: this.getUploadFileUrl(item, downloadParams) + } + }); + }, + /** + * 获得上传文件url列表 + * @param {*} jsonData 上传文件数据,[{name, downloadUri, filename}] + * @param {*} params 上传文件的参数 + * @returns {Array} 文件url列表 + */ + getPictureList (jsonData, params) { + let tempList = this.parseUploadData(jsonData, params); + if (Array.isArray(tempList)) { + return tempList.map(item => item.url); + } else { + return []; + } + }, + /** + * 将选中文件信息格式化成json信息 + * @param {Array} fileList 上传文件列表,[{name, fileUrl, data}] + */ + fileListToJson (fileList) { + if (Array.isArray(fileList)) { + return JSON.stringify(fileList.map((item) => { + return { + name: item.name, + downloadUri: item.downloadUri || item.response.data.downloadUri, + filename: item.filename || item.response.data.filename + } + })); + } else { + return undefined; + } + }, + /** + * 获得上传文件url + * @param {*} item 上传文件 + * @param {*} params 上传文件的参数 + */ + getUploadFileUrl (item, params) { + if (item == null || item.downloadUri == null) { + return null; + } else { + let menuIdJsonStr = window.sessionStorage.getItem('currentMenuId'); + let currentMenuId; + if (menuIdJsonStr != null) { + currentMenuId = (JSON.parse(menuIdJsonStr) || {}).data; + } + params.Authorization = getToken(); + params.MenuId = currentMenuId; + return buildGetUrl(item.downloadUri, params); + } + }, + /** + * 获得上传接口 + * @param {*} url 上传路径 + */ + getUploadActionUrl (url) { + if (url != null && url[0] === '/') { + url = url.substr(1); + } + return projectConfig.baseUrl + url; + }, + /** + * 上传文件是否图片文件 + * @param {*} file 上传文件 + */ + pictureFile (file) { + if (['image/jpeg', 'image/jpg', 'image/png'].indexOf(file.type) !== -1) { + return true; + } else { + this.$message.error('图片文件格式不正确,请重新选择'); + return false; + } + } + }, + computed: { + getUploadHeaders () { + let token = getToken(); + return { + Authorization: token + } + } + } +}; + +const allowStatsType = [ + 'time', + 'datetime', + 'day', + 'month', + 'year' +]; +/** + * 日期相关方法 + */ +const statsDateRangeMixin = { + methods: { + /** + * 根据输入的日期获得日期范围(例如:输入2019-12-12,输出['2019-12-12 00:00:00', '2019-12-12 23:59:59']) + * @param {Date|String} date 要转换的日期 + * @param {String} statsType 转换类型(day, month, year) + * @param {String} format 输出格式 + */ + getDateRangeFilter (date, statsType = 'day', format = 'yyyy-MM-dd HH:mm:ss') { + if (date == null) return []; + + statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; + date = date.substr(0, date.indexOf(' ')); + let tempList = date.split('-'); + let year = Number.parseInt(tempList[0]); + let month = Number.parseInt(tempList[1]); + let day = Number.parseInt(tempList[2]); + if (isNaN(year) || isNaN(month) || isNaN(day)) { + return []; + } + let tempDate = new Date(year, month - 1, day); + // 判断是否正确的日期 + if (isNaN(tempDate.getTime())) return []; + + tempDate.setHours(0, 0, 0, 0); + let retDate; + switch (statsType) { + case 'day': + retDate = [ + new Date(tempDate), + new Date(tempDate.setDate(tempDate.getDate() + 1)) + ]; + break; + case 'month': + tempDate.setDate(1); + retDate = [ + new Date(tempDate), + new Date(tempDate.setMonth(tempDate.getMonth() + 1)) + ]; + break; + case 'year': + tempDate.setDate(1); + tempDate.setMonth(0); + retDate = [ + new Date(tempDate), + new Date(tempDate.setFullYear(tempDate.getFullYear() + 1)) + ] + } + + retDate[1] = new Date(retDate[1].getTime() - 1); + + return [ + formatDate(retDate[0], format), + formatDate(retDate[1], format) + ]; + }, + /** + * 格式化日期 + * @param {Date|String} date 要格式化的日期 + * @param {String} statsType 输出日期类型 + * @param {String} format 输入日期的格式 + */ + formatDateByStatsType (date, statsType = 'day', format = 'yyyy-MM-dd') { + if (date == null) return undefined; + statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; + if (statsType === 'datetime') format = 'yyyy-MM-dd HH:mm:ss'; + + let tempDate = ((date instanceof Date) ? date : parseDate(date, format)); + if (!tempDate) return undefined; + switch (statsType) { + case 'time': + return formatDate(tempDate, 'HH:mm:ss'); + case 'datetime': + return formatDate(tempDate, 'yyyy-MM-dd HH:mm:ss'); + case 'day': + return formatDate(tempDate, 'yyyy-MM-dd'); + case 'month': + return formatDate(tempDate, 'yyyy-MM'); + case 'year': + return formatDate(tempDate, 'yyyy'); + default: + return formatDate(tempDate, 'yyyy-MM-dd'); + } + }, + /** + * 获得统计类型中文名称 + * @param {String} statsType 统计类型(day, month, year) + */ + getStatsTypeShowName (statsType) { + statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; + switch (statsType) { + case 'day': return '日统计'; + case 'month': return '月统计'; + case 'year': return '年统计'; + } + }, + /** + * 获取统计类型字典列表 + * @param {Array} statsTypeList 统计类型列表 + */ + getAllowStatsTypeList (statsTypeList) { + if (Array.isArray(statsTypeList) && statsTypeList.length > 0) { + return statsTypeList.map((item) => { + return { + id: item, + name: this.getStatsTypeShowName(item) + } + }); + } else { + return []; + } + } + } +} +/** + * 页面缓存相关方法 + */ +const cachePageMixin = { + methods: { + /** + * 移除缓存页面 + * @param {*} name 缓存组件的名称 + */ + removeCachePage (name) { + this.removeCachePage(name); + }, + /** + * 从跳转页面返回并且刷新当前页面时调用 + */ + onResume () { + }, + ...mapMutations(['addCachePage', 'removeCachePage']) + }, + created () { + this.addCachePage(this.$options.name); + }, + mounted () { + this.$route.meta.refresh = false; + }, + activated () { + if (this.$route && this.$route.meta && this.$route.meta.refresh) { + this.onResume(); + } + this.$route.meta.refresh = true; + } +} +/** + * 缓存页面跳转页面相关方法 + */ +const cachedPageChildMixin = { + data () { + return { + // 是否刷新父页面 + refreshParentCachedPage: false + } + }, + beforeRouteLeave (to, from, next) { + if (to.meta == null) to.meta = {}; + to.meta.refresh = this.refreshParentCachedPage; + next(); + } +} + +export { + uploadMixin, + statsDateRangeMixin, + cachePageMixin, + cachedPageChildMixin +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/main.js b/orange-demo-flowable/orange-demo-flowable-web/src/main.js new file mode 100644 index 00000000..25828f8f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/main.js @@ -0,0 +1,39 @@ +import '@/core/http'; +import JSONbig from 'json-bigint'; +import '@/components/Dialog'; +import Vue from 'vue'; +import ElementUI from 'element-ui'; +// import 'element-ui/lib/theme-chalk/index.css' +import '@/assets/style/index.scss'; +import '@/core/mixins/global.js'; +import App from './App'; +import router from './router'; +import store from './store'; +import TreeSelect from '@/components/TreeSelect'; +import RichEditor from '@/components/RichEditor'; +import InputNumberRange from '@/components/InputNumberRange'; +import DateRange from '@/components/DateRange'; +import FilterBox from '@/components/FilterBox'; +import TableProgressColumn from '@/components/TableProgressColumn'; +import VCharts from 'v-charts'; + +window.JSON = new JSONbig({storeAsString: true}); + +Vue.component('tree-select', TreeSelect); +Vue.component('rich-editor', RichEditor); +Vue.component('input-number-range', InputNumberRange); +Vue.component('date-range', DateRange); +Vue.component('filter-box', FilterBox); +Vue.component('table-progress-column', TableProgressColumn); + +Vue.use(ElementUI); +Vue.use(VCharts); + +Vue.config.productionTip = false; + +/* eslint-disable no-new */ +new Vue({ + router, + store, + render: h => h(App) +}).$mount('#app'); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/registerServiceWorker.js b/orange-demo-flowable/orange-demo-flowable-web/src/registerServiceWorker.js new file mode 100644 index 00000000..76cede07 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/registerServiceWorker.js @@ -0,0 +1,32 @@ +/* eslint-disable no-console */ + +import { register } from 'register-service-worker' + +if (process.env.NODE_ENV === 'production') { + register(`${process.env.BASE_URL}service-worker.js`, { + ready () { + console.log( + 'App is being served from cache by a service worker.\n' + + 'For more details, visit https://goo.gl/AFskqB' + ) + }, + registered () { + console.log('Service worker has been registered.') + }, + cached () { + console.log('Content has been cached for offline use.') + }, + updatefound () { + console.log('New content is downloading.') + }, + updated () { + console.log('New content is available; please refresh.') + }, + offline () { + console.log('No internet connection found. App is running in offline mode.') + }, + error (error) { + console.error('Error during service worker registration:', error) + } + }) +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/router/import-development.js b/orange-demo-flowable/orange-demo-flowable-web/src/router/import-development.js new file mode 100644 index 00000000..b29a72d9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/router/import-development.js @@ -0,0 +1 @@ +module.exports = file => require('../views/' + file + '.vue').default diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/router/import-production.js b/orange-demo-flowable/orange-demo-flowable-web/src/router/import-production.js new file mode 100644 index 00000000..10d919de --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/router/import-production.js @@ -0,0 +1 @@ +module.exports = file => () => import('../views/' + file + '.vue') diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/router/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/router/index.js new file mode 100644 index 00000000..7c3a42fd --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/router/index.js @@ -0,0 +1,41 @@ +import Vue from 'vue'; +import Router from 'vue-router'; +import routers from './systemRouters.js'; +import dialog from '@/components/Dialog'; +import { getToken } from '@/utils'; + +Vue.use(Router) + +const router = new Router({ + mode: 'hash', + routes: routers +}); + +const originalPush = Router.prototype.push; +Router.prototype.push = function push (location) { + return originalPush.call(this, location).catch(e => {}); +} + +const originalReplace = Router.prototype.replace; +Router.prototype.replace = function push (location, onComplete, onAbort) { + return originalReplace.call(this, location, onComplete, onAbort).catch(e => {}); +} + +/** + * 路由跳转的时候判断token是否存在 + */ +router.beforeResolve((to, from, next) => { + if (to.name === 'login') { + next(); + } else { + let token = getToken(); + if (!token || !/\S/.test(token)) { + dialog.closeAll(); + next({ name: 'login' }) + } else { + next(); + } + } +}); + +export default router; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/router/systemRouters.js b/orange-demo-flowable/orange-demo-flowable-web/src/router/systemRouters.js new file mode 100644 index 00000000..514a029e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/router/systemRouters.js @@ -0,0 +1,68 @@ +import state from '../store/state.js'; +// 开发环境不使用懒加载, 因为懒加载页面太多的话会造成webpack热更新太慢 +const _import = require('./import-' + process.env.NODE_ENV) + +function getProps (route) { + return route.query; +} + +// 系统生成路由 +const routers = [ + { path: '/login', component: _import('login/index'), name: 'login', props: getProps, desc: '登录' }, + { + path: '/', + component: _import('login/index'), + name: 'root' + }, + { + path: '/main', + component: _import('layout/index'), + name: 'main', + props: getProps, + redirect: { + name: 'welcome' + }, + meta: { + title: '主页', + showOnly: true + }, + children: [ + {path: 'formSysUser', component: _import('upms/formSysUser/index'), name: 'formSysUser', meta: {title: '用户管理'}}, + {path: 'formSysDept', component: _import('upms/formSysDept/index'), name: 'formSysDept', meta: {title: '部门管理'}}, + {path: 'formSysRole', component: _import('upms/formSysRole/index'), name: 'formSysRole', meta: {title: '角色管理'}}, + {path: 'formSysDataPerm', component: _import('upms/formSysDataPerm/index'), name: 'formSysDataPerm', meta: {title: '数据权限管理'}}, + {path: 'formSysMenu', component: _import(state.supportColumn ? 'upms/formSysMenu/formSysColumnMenu' : 'upms/formSysMenu/index'), name: 'formSysMenu', meta: {title: '菜单列表'}}, + {path: 'formSysDict', component: _import('upms/formDictManagement/index'), name: 'formSysDict', meta: {title: '字典管理'}}, + {path: 'formSysPermCode', component: _import('upms/formSysPermCode/index'), name: 'formSysPermCode', meta: {title: '权限字管理'}}, + {path: 'formSysPerm', component: _import('upms/formSysPerm/index'), name: 'formSysPerm', meta: {title: '权限资源管理'}}, + {path: 'formSysLoginUser', component: _import('upms/formSysLoginUser/index'), name: 'formSysLoginUser', meta: {title: '在线用户'}}, + // 岗位模块路由配置 + {path: 'formSysPost', component: _import('upms/formSysPost/index'), name: 'formSysPost', meta: {title: '岗位管理'}}, + {path: 'formSysDeptPost', component: _import('upms/formSysDeptPost/index'), name: 'formSysDeptPost', props: getProps, meta: {title: '设置部门岗位'}}, + // 在线表单模块路由配置 + {path: 'formOnlineDict', component: _import('onlineForm/formOnlineDict/index'), name: 'formOnlineDict', props: getProps, meta: {title: '在线表单字典管理'}}, + {path: 'formOnlinePage', component: _import('onlineForm/formOnlinePage/index'), name: 'formOnlinePage', props: getProps, meta: {title: '在线表单管理'}}, + {path: 'onlineForm', component: _import('onlineForm/index'), name: 'onlineForm', props: getProps, meta: {title: '在线表单'}}, + // 工作流模块路由配置 + {path: 'formFlowCategory', component: _import('workflow/flowCategory/formFlowCategory'), name: 'formFlowCategory', props: getProps, meta: {title: '流程分类管理'}}, + {path: 'formFlowEntry', component: _import('workflow/flowEntry/formFlowEntry'), name: 'formFlowEntry', props: getProps, meta: {title: '流程设计'}}, + {path: 'formAllInstance', component: _import('workflow/taskManager/formAllInstance'), name: 'formAllInstance', props: getProps, meta: {title: '流程实例'}}, + {path: 'formMyTask', component: _import('workflow/taskManager/formMyTask'), name: 'formMyTask', props: getProps, meta: {title: '我的待办'}}, + {path: 'formMyApprovedTask', component: _import('workflow/taskManager/formMyApprovedTask'), name: 'formMyApprovedTask', props: getProps, meta: {title: '已办任务'}}, + {path: 'formMyHistoryTask', component: _import('workflow/taskManager/formMyHistoryTask'), name: 'formMyHistoryTask', props: getProps, meta: {title: '历史流程'}}, + { + path: 'handlerFlowTask', + component: _import('workflow/handlerFlowTask/index'), + name: 'handlerFlowTask', + props: getProps, + meta: {title: '流程处理'}, + children: [ + // 静态表单路由设置 + ] + }, + {path: 'welcome', component: _import('welcome/index'), name: 'welcome', meta: {title: '欢迎'}} + ] + } +]; + +export default routers; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/flowStaticDict.js b/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/flowStaticDict.js new file mode 100644 index 00000000..8472e8c6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/flowStaticDict.js @@ -0,0 +1,178 @@ +/** + * 工作流常量字典 + */ +import Vue from 'vue'; +import { DictionaryBase } from './index.js'; + +const SysFlowEntryBindFormType = new DictionaryBase('流程绑定表单类型', [ + { + id: 0, + name: '动态表单', + symbol: 'ONLINE_FORM' + }, + { + id: 1, + name: '路由表单', + symbol: 'ROUTER_FORM' + } +]); +Vue.prototype.SysFlowEntryBindFormType = SysFlowEntryBindFormType; + +const SysFlowEntryPublishedStatus = new DictionaryBase('流程设计发布状态', [ + { + id: 0, + name: '未发布', + symbol: 'UNPUBLISHED' + }, + { + id: 1, + name: '已发布', + symbol: 'PUBLISHED' + } +]); +Vue.prototype.SysFlowEntryPublishedStatus = SysFlowEntryPublishedStatus; + +const SysFlowEntryStep = new DictionaryBase('流程设计步骤', [ + { + id: 0, + name: '编辑基础信息', + symbol: 'BASIC' + }, + { + id: 1, + name: '流程变量设置', + symbol: 'PROCESS_VARIABLE' + }, + { + id: 2, + name: '设计流程', + symbol: 'PROCESS_DESIGN' + } +]); +Vue.prototype.SysFlowEntryStep = SysFlowEntryStep; + +const SysFlowTaskOperationType = new DictionaryBase('任务操作类型', [ + { + id: 'agree', + name: '同意', + symbol: 'AGREE' + }, + { + id: 'refuse', + name: '拒绝', + symbol: 'REFUSE' + }, + { + id: 'transfer', + name: '转办', + symbol: 'TRANSFER' + }, + { + id: 'multi_consign', + name: '加签', + symbol: 'CO_SIGN' + }, + { + id: 'save', + name: '保存', + symbol: 'SAVE' + }, + { + id: 'stop', + name: '终止', + symbol: 'STOP' + }, + { + id: 'multi_sign', + name: '会签', + symbol: 'MULTI_SIGN' + }, + { + id: 'multi_agree', + name: '同意(会签)', + symbol: 'MULTI_AGREE' + }, + { + id: 'multi_refuse', + name: '拒绝(会签)', + symbol: 'MULTI_REFUSE' + }, + { + id: 'multi_abstain', + name: '弃权(会签)', + symbol: 'MULTI_ABSTAIN' + } +]); +Vue.prototype.SysFlowTaskOperationType = SysFlowTaskOperationType; + +const SysFlowTaskType = new DictionaryBase('工作流任务类型', [ + { + id: 0, + name: '其他任务', + symbol: 'OTHER_TASK' + }, + { + id: 1, + name: '用户任务', + symbol: 'USER_TASK' + } +]); +Vue.prototype.SysFlowTaskType = SysFlowTaskType; + +const SysFlowVariableType = new DictionaryBase('工作流变量类型', [ + { + id: 0, + name: '流程变量', + symbol: 'INSTANCE' + }, + { + id: 1, + name: '任务变量', + symbol: 'TASK' + } +]); +Vue.prototype.SysFlowVariableType = SysFlowVariableType; + +const SysFlowWorkOrderStatus = new DictionaryBase('工单状态', [ + { + id: 0, + name: '已提交', + symbol: 'SUBMITED' + }, + { + id: 1, + name: '审批中', + symbol: 'APPROVING' + }, + { + id: 2, + name: '已拒绝', + symbol: 'REFUSED' + }, + { + id: 3, + name: '已完成', + symbol: 'FINISHED' + }, + { + id: 4, + name: '终止', + symbol: 'STOPPED' + }, + { + id: 5, + name: '撤销', + symbol: 'CANCEL' + } +]); +Vue.prototype.SysFlowWorkOrderStatus = SysFlowWorkOrderStatus; + +export { + SysFlowEntryPublishedStatus, + SysFlowEntryBindFormType, + SysFlowEntryStep, + SysFlowTaskOperationType, + SysFlowTaskType, + SysFlowVariableType, + SysFlowWorkOrderStatus +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/index.js new file mode 100644 index 00000000..38171887 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/index.js @@ -0,0 +1,201 @@ +/** + * 常量字典数据 + */ +import Vue from 'vue'; + +class DictionaryBase extends Map { + constructor (name, dataList, keyId = 'id', symbolId = 'symbol') { + super(); + this.showName = name; + this.setList(dataList, keyId, symbolId); + } + + setList (dataList, keyId = 'id', symbolId = 'symbol') { + this.clear(); + if (Array.isArray(dataList)) { + dataList.forEach((item) => { + this.set(item[keyId], item); + if (item[symbolId] != null) { + Object.defineProperty(this, item[symbolId], { + get: function () { + return item[keyId]; + } + }); + } + }); + } + } + + getList (valueId = 'name', parentIdKey = 'parentId', filter) { + let temp = []; + this.forEach((value, key) => { + let obj = { + id: key, + name: (typeof value === 'string') ? value : value[valueId], + parentId: value[parentIdKey] + }; + if (typeof filter !== 'function' || filter(obj)) { + temp.push(obj); + } + }); + + return temp; + } + + getValue (id, valueId = 'name') { + // 如果id为boolean类型,则自动转换为0和1 + if (typeof id === 'boolean') { + id = id ? 1 : 0; + } + return (this.get(id) || {})[valueId]; + } +} + +const SysUserStatus = new DictionaryBase('用户状态', [ + { + id: 0, + name: '正常状态', + symbol: 'NORMAL' + }, + { + id: 1, + name: '锁定状态', + symbol: 'LOCKED' + } +]); +Vue.prototype.SysUserStatus = SysUserStatus; + +const SysUserType = new DictionaryBase('用户类型', [ + { + id: 0, + name: '管理员', + symbol: 'ADMIN' + }, + { + id: 1, + name: '系统操作员', + symbol: 'SYSTEM' + }, + { + id: 2, + name: '普通操作员', + symbol: 'OPERATOR' + } +]); +Vue.prototype.SysUserType = SysUserType; + +const SysPermModuleType = new DictionaryBase('权限分组类型', [ + { + id: 0, + name: '分组模块', + symbol: 'GROUP' + }, { + id: 1, + name: '接口模块', + symbol: 'CONTROLLER' + } +]); +Vue.prototype.SysPermModuleType = SysPermModuleType; + +const SysPermCodeType = new DictionaryBase('权限字类型', [{ + id: 0, + name: '表单', + symbol: 'FORM' +}, { + id: 1, + name: '片段', + symbol: 'FRAGMENT' +}, { + id: 2, + name: '操作', + symbol: 'OPERATION' +}]); +Vue.prototype.SysPermCodeType = SysPermCodeType; + +const SysMenuType = new DictionaryBase('菜单类型', [ + { + id: 0, + name: '目录', + symbol: 'DIRECTORY' + }, + { + id: 1, + name: '表单', + symbol: 'MENU' + }, + { + id: 2, + name: '片段', + symbol: 'FRAGMENT' + }, + { + id: 3, + name: '按钮', + symbol: 'BUTTON' + } +]); +Vue.prototype.SysMenuType = SysMenuType; + +const SysMenuBindType = new DictionaryBase('菜单绑定类型', [ + { + id: 0, + name: '路由菜单', + symbol: 'ROUTER' + }, + { + id: 1, + name: '在线表单', + symbol: 'ONLINE_FORM' + }, + { + id: 2, + name: '工单列表', + symbol: 'WORK_ORDER' + } +]); +Vue.prototype.SysMenuBindType = SysMenuBindType; + +const SysDataPermType = new DictionaryBase('数据权限类型', [ + { + id: 0, + name: '查看全部', + symbol: 'ALL' + }, + { + id: 1, + name: '仅看自己', + symbol: 'ONLY_USER' + }, + { + id: 2, + name: '仅看所在部门', + symbol: 'ONLY_DEPT' + }, + { + id: 3, + name: '仅看所在部门及子部门', + symbol: 'ONLY_DEPT_AND_CHILD' + }, + { + id: 4, + name: '自选部门及子部门', + symbol: 'CUSTOM_DEPT_AND_CHILD' + }, + { + id: 5, + name: '仅自选部门', + symbol: 'CUSTOM_DEPT' + } +]); +Vue.prototype.SysDataPermType = SysDataPermType; + +export { + DictionaryBase, + SysUserStatus, + SysUserType, + SysDataPermType, + SysPermModuleType, + SysPermCodeType, + SysMenuBindType, + SysMenuType +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/onlineStaticDict.js b/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/onlineStaticDict.js new file mode 100644 index 00000000..00ebfea3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/onlineStaticDict.js @@ -0,0 +1,566 @@ +/** + * 在线表单常量字典 + */ +import Vue from 'vue'; +import { DictionaryBase } from './index.js'; + +const SysOnlineFieldKind = new DictionaryBase('字段类型', [ + { + id: 1, + name: '文件上传字段', + symbol: 'UPLOAD' + }, + { + id: 2, + name: '图片上传字段', + symbol: 'UPLOAD_IMAGE' + }, + { + id: 3, + name: '富文本字段', + symbol: 'RICH_TEXT' + }, + { + id: 20, + name: '创建时间字段', + symbol: 'CREATE_TIME' + }, + { + id: 21, + name: '创建人字段', + symbol: 'CREATE_USER_ID' + }, + { + id: 22, + name: '更新时间字段', + symbol: 'UPDATE_TIME' + }, + { + id: 23, + name: '更新人字段', + symbol: 'UPDATE_USER_ID' + }, + /** + * 暂时屏蔽掉,等租户运营支持在线表单再开启 + { + id: 30, + name: '租户过滤字段', + symbol: 'TENANT_FILTER' + }, + */ + { + id: 31, + name: '逻辑删除字段', + symbol: 'LOGIC_DELETE' + } +]); +Vue.prototype.SysOnlineFieldKind = SysOnlineFieldKind; + +const SysOnlineDataPermFilterType = new DictionaryBase('数据权限过滤类型', [ + { + id: 1, + name: '用户过滤字段', + symbol: 'USER_FILTER' + }, + { + id: 2, + name: '部门过滤字段', + symbol: 'DEPT_FILTER' + } +]); +Vue.prototype.SysOnlineDataPermFilterType = SysOnlineDataPermFilterType; + +const SysOnlineRelationType = new DictionaryBase('关联类型', [ + { + id: 0, + name: '一对一关联', + symbol: 'ONE_TO_ONE' + }, + { + id: 1, + name: '一对多关联', + symbol: 'ONE_TO_MANY' + } +]); +Vue.prototype.SysOnlineRelationType = SysOnlineRelationType; + +const SysOnlineFormType = new DictionaryBase('表单类型', [ + { + id: 1, + name: '查询表单', + symbol: 'QUERY' + }, + { + id: 5, + name: '编辑表单', + symbol: 'FORM' + }, + { + id: 10, + name: '流程表单', + symbol: 'FLOW' + }, + { + id: 11, + name: '工单列表', + symbol: 'WORK_ORDER' + } +]); +Vue.prototype.SysOnlineFormType = SysOnlineFormType; + +const SysOnlineFormKind = new DictionaryBase('表单类别', [ + { + id: 1, + name: '弹出窗口', + symbol: 'DIALOG' + }, + { + id: 5, + name: '跳转页面', + symbol: 'PAGE' + } +]); +Vue.prototype.SysOnlineFormKind = SysOnlineFormKind; + +const SysOnlinePageType = new DictionaryBase('页面类型', [ + { + id: 1, + name: '业务页面', + symbol: 'BIZ' + }, + { + id: 5, + name: '统计页面', + symbol: 'STATS' + }, + { + id: 10, + name: '流程页面', + symbol: 'FLOW' + } +]); +Vue.prototype.SysOnlinePageType = SysOnlinePageType; + +const SysOnlinePageStatus = new DictionaryBase('页面状态', [ + { + id: 0, + name: '基础信息录入', + symbol: 'BASIC' + }, + { + id: 1, + name: '数模模型录入', + symbol: 'DATASOURCE' + }, + { + id: 2, + name: '表单设计', + symbol: 'DESIGNING' + } +]); +Vue.prototype.SysOnlinePageStatus = SysOnlinePageStatus; + +const SysOnlineDictType = new DictionaryBase('字典类型', [ + { + id: 1, + name: '数据表字典', + symbol: 'TABLE' + }, + { + id: 5, + name: 'URL字典', + symbol: 'URL' + }, + { + id: 10, + name: '静态字典', + symbol: 'STATIC' + }, + { + id: 15, + name: '自定义字典', + symbol: 'CUSTOM' + } +]); +Vue.prototype.SysOnlineDictType = SysOnlineDictType; + +const SysOnlineRuleType = new DictionaryBase('验证规则类型', [ + { + id: 1, + name: '只允许整数', + symbol: 'INTEGER_ONLY' + }, + { + id: 2, + name: '只允许数字', + symbol: 'DIGITAL_ONLY' + }, + { + id: 3, + name: '只允许英文字符', + symbol: 'LETTER_ONLY' + }, + { + id: 4, + name: '范围验证', + symbol: 'RANGE' + }, + { + id: 5, + name: '邮箱格式验证', + symbol: 'EMAIL' + }, + { + id: 6, + name: '手机格式验证', + symbol: 'MOBILE' + }, + { + id: 7, + name: '自定义验证', + symbol: 'CUSTOM' + } +]); +Vue.prototype.SysOnlineRuleType = SysOnlineRuleType; + +const SysCustomWidgetType = new DictionaryBase('组件类型', [ + { + id: 0, + name: '文本显示', + symbol: 'Label' + }, + { + id: 1, + name: '文本输入框', + symbol: 'Input' + }, + { + id: 3, + name: '数字输入框', + symbol: 'NumberInput' + }, + { + id: 4, + name: '数字范围输入框', + symbol: 'NumberRange' + }, + { + id: 5, + name: '开关组件', + symbol: 'Switch' + }, + { + id: 10, + name: '下拉选择框', + symbol: 'Select' + }, + { + id: 12, + name: '级联选择框', + symbol: 'Cascader' + }, + { + id: 20, + name: '日期选择框', + symbol: 'Date' + }, + { + id: 21, + name: '日期范围选择框', + symbol: 'DateRange' + }, + { + id: 31, + name: '上传组件', + symbol: 'Upload' + }, + { + id: 32, + name: '富文本编辑', + symbol: 'RichEditor' + }, + { + id: 40, + name: '分割线', + symbol: 'Divider' + }, + { + id: 41, + name: '文本', + symbol: 'Text' + }, + { + id: 42, + name: '图片', + symbol: 'Image' + }, + { + id: 100, + name: '表格组件', + symbol: 'Table' + }, + { + id: 300, + name: '基础块', + symbol: 'Block' + }, + { + id: 301, + name: '卡片组件', + symbol: 'Card' + } +]); +Vue.prototype.SysCustomWidgetType = SysCustomWidgetType; + +const SysCustomWidgetKind = new DictionaryBase('组件类别', [ + { + id: 0, + name: '过滤组件', + symbol: 'Filter' + }, + { + id: 1, + name: '表单组件', + symbol: 'Form' + }, + { + id: 2, + name: '数据组件', + symbol: 'Data' + }, + { + id: 4, + name: '容器组件', + symbol: 'Container' + } +]); +Vue.prototype.SysCustomWidgetKind = SysCustomWidgetKind; + +const SysOnlineColumnFilterType = new DictionaryBase('组件类别', [ + { + id: 0, + name: '无过滤', + symbol: 'NONE' + }, + { + id: 1, + name: '普通过滤', + symbol: 'EQUAL_FILTER' + }, + { + id: 2, + name: '范围过滤', + symbol: 'RANFGE_FILTER' + }, + { + id: 3, + name: '模糊过滤', + symbol: 'LIKE_FILTER' + } +]); +Vue.prototype.SysOnlineColumnFilterType = SysOnlineColumnFilterType; + +const SysCustomWidgetOperationType = new DictionaryBase('操作类型', [ + { + id: 0, + name: '新建', + symbol: 'ADD' + }, + { + id: 1, + name: '编辑', + symbol: 'EDIT' + }, + { + id: 2, + name: '删除', + symbol: 'DELETE' + }, + { + id: 3, + name: '导出', + symbol: 'EXPORT' + }, + { + id: 20, + name: '自定义操作', + symbol: 'CUSTOM' + } +]); +Vue.prototype.SysCustomWidgetOperationType = SysCustomWidgetOperationType; + +const SysOnlinePageDatasourceFieldStatus = new DictionaryBase('数据表状态', [ + { + id: 0, + name: '已删除', + symbol: 'DELETED' + }, + { + id: 1, + name: '已使用', + symbol: 'USED' + }, + { + id: 0, + name: '未使用', + symbol: 'UNUSED' + } +]); +Vue.prototype.SysOnlinePageDatasourceFieldStatus = SysOnlinePageDatasourceFieldStatus; + +const SysOnlinePageSettingStep = new DictionaryBase('在线表单编辑步骤', [ + { + id: 0, + name: '编辑基础信息', + symbol: 'BASIC' + }, + { + id: 1, + name: '编辑数据模型', + symbol: 'DATASOURCE' + }, + { + id: 2, + name: '设计表单', + symbol: 'FORM_DESIGN' + } +]); +Vue.prototype.SysOnlinePageSettingStep = SysOnlinePageSettingStep; + +const SysOnlineParamValueType = new DictionaryBase('参数值类型', [ + { + id: 0, + name: '表单参数', + symbol: 'FORM_PARAM' + }, + { + id: 1, + name: '数据字段', + symbol: 'TABLE_COLUMN' + }, + { + id: 2, + name: '静态字典', + symbol: 'STATIC_DICT' + }, + { + id: 3, + name: '直接输入', + symbol: 'INPUT_VALUE' + } +]); +Vue.prototype.SysOnlineParamValueType = SysOnlineParamValueType; + +const SysOnlineAggregationType = new DictionaryBase('字段聚合类型', [ + { + id: 0, + name: '总数', + symbol: 'SUM' + }, + { + id: 1, + name: '个数', + symbol: 'COUNT' + }, + { + id: 2, + name: '平均数', + symbol: 'AVG' + }, + { + id: 3, + name: '最小值', + symbol: 'MIN' + }, + { + id: 4, + name: '最大值', + symbol: 'MAX' + } +]); +Vue.prototype.SysOnlineAggregationType = SysOnlineAggregationType; + +const SysOnlineFilterOperationType = new DictionaryBase('过滤条件操作类型', [ + { + id: 0, + name: ' = ', + symbol: 'EQUAL' + }, + { + id: 1, + name: ' != ', + symbol: 'NOT_EQUAL' + }, + { + id: 2, + name: ' >= ', + symbol: 'GREATER_THAN_OR_EQUAL' + }, + { + id: 3, + name: ' > ', + symbol: 'GREATER_THAN' + }, + { + id: 4, + name: ' <= ', + symbol: 'LESS_THAN_OR_EQUAL' + }, + { + id: 5, + name: ' < ', + symbol: 'LESS_THAN' + }, + { + id: 6, + name: ' like ', + symbol: 'LIKE' + }, + { + id: 7, + name: ' not null ', + symbol: 'NOT_NULL' + }, + { + id: 8, + name: ' is null ', + symbol: 'IS_NULL' + } +]); +Vue.prototype.SysOnlineFilterOperationType = SysOnlineFilterOperationType; + +const SysOnlineVirtualColumnFilterValueType = new DictionaryBase('虚拟字段过滤值类型', [ + { + id: 0, + name: '输入值', + symbol: 'CUSTOM_INPUT' + }, + { + id: 1, + name: '静态字典', + symbol: 'STATIC_DICT' + } +]); +Vue.prototype.SysOnlineVirtualColumnFilterValueType = SysOnlineVirtualColumnFilterValueType; + +export { + SysOnlineFieldKind, + SysOnlineDataPermFilterType, + SysOnlineRelationType, + SysOnlineFormType, + SysOnlineFormKind, + SysOnlinePageType, + SysOnlinePageStatus, + SysOnlineDictType, + SysOnlineRuleType, + SysCustomWidgetType, + SysCustomWidgetKind, + SysOnlineColumnFilterType, + SysCustomWidgetOperationType, + SysOnlinePageSettingStep, + SysOnlinePageDatasourceFieldStatus, + SysOnlineParamValueType, + SysOnlineAggregationType, + SysOnlineFilterOperationType, + SysOnlineVirtualColumnFilterValueType +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/actions.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/actions.js new file mode 100644 index 00000000..b1c6ea43 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/actions.js @@ -0,0 +1 @@ +export default {} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/getters.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/getters.js new file mode 100644 index 00000000..6c458e3b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/getters.js @@ -0,0 +1,86 @@ +import { findMenuItem } from './utils'; +import * as StaticDict from '@/staticDict'; + +export default { + getMultiTags: (state) => { + return state.supportTags; + }, + getCollapse: (state) => { + return state.isCollapse; + }, + getClientHeight: (state) => { + return state.documentClientHeight; + }, + getClientWidth: (state) => { + return state.documentClienWidth; + }, + getMainContextHeight: (state) => { + return state.documentClientHeight - (state.supportTags ? 130 : 90); + }, + getOnlineFormCache: (state) => { + return state.onlineFormCache; + }, + getUserInfo: (state) => { + return state.userInfo; + }, + getCachePages: (state) => { + return state.cachePages; + }, + getTagList: (state) => { + return state.tagList; + }, + getMenuList: (state) => { + if (state.supportColumn) { + if (state.currentColumnId == null || state.currentColumnId === '') return []; + for (let i = 0; i < state.menuList.length; i++) { + if (state.menuList[i].menuId === state.currentColumnId) { + return state.menuList[i].children || []; + } + } + + return []; + } else { + return state.menuList; + } + }, + getColumnList: (state) => { + if (!state.supportColumn) return []; + return state.menuList.map(menu => { + if (menu.menuType === StaticDict.SysMenuType.DIRECTORY) { + return { + columnId: menu.menuId, + columnName: menu.menuName + } + } + }).filter(item => item != null); + }, + getCurrentMenuId: (state) => { + return state.currentMenuId; + }, + getMenuItem: (state) => { + if (Array.isArray(state.menuList)) { + for (let i = 0; i < state.menuList.length; i++) { + let temp = findMenuItem(state.menuList[i], state.currentMenuId); + if (temp != null) return temp; + } + } + return null; + }, + getCurrentMenuPath: (state) => { + let menuPath = []; + if (Array.isArray(state.menuList)) { + for (let i = 0; i < state.menuList.length; i++) { + let temp = findMenuItem(state.menuList[i], state.currentMenuId, menuPath); + if (temp != null) break; + } + } + + return menuPath; + }, + getMultiColumn: (state) => { + return state.supportColumn; + }, + getCurrentColumnId: (state) => { + return state.currentColumnId; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/index.js new file mode 100644 index 00000000..5fc44198 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/index.js @@ -0,0 +1,15 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import state from './state.js'; +import getters from './getters.js'; +import mutations from './mutations.js'; +import actions from './actions.js'; + +Vue.use(Vuex); +export default new Vuex.Store({ + state, + getters, + mutations, + actions, + strict: process.env.NODE_ENV !== 'production' +}); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/mutations.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/mutations.js new file mode 100644 index 00000000..5d755609 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/mutations.js @@ -0,0 +1,161 @@ +import { initUserInfo, findMenuItem } from './utils'; +import { setObjectToSessionStorage, findItemFromList, treeDataTranslate } from '@/utils'; + +export default { + setCollapse: (state, isCollapse) => { + state.isCollapse = isCollapse; + }, + setClientHeight: (state, height) => { + state.documentClientHeight = height; + }, + setClientWidth: (state, width) => { + state.documentClienWidth = width; + }, + addOnlineFormCache: (state, data) => { + state.onlineFormCache[data.key] = data.value; + }, + removeOnlineFormCache: (state, key) => { + delete state.onlineFormCache[key]; + }, + clearOnlineFormCache: (state) => { + state.onlineFormCache = {}; + }, + setUserInfo: (state, info) => { + setObjectToSessionStorage('userInfo', info); + state.userInfo = initUserInfo(info); + }, + addCachePage (state, name) { + if (state.cachePages.indexOf(name) === -1) { + let temp = [...state.cachePages]; + temp.push(name); + setObjectToSessionStorage('cachePages', temp); + state.cachePages = temp; + } + }, + removeCachePage (state, name) { + let pos = state.cachePages.indexOf(name); + if (pos !== -1) { + let temp = [...state.cachePages]; + temp.splice(pos, 1); + setObjectToSessionStorage('cachePages', temp); + state.cachePages = temp; + } + }, + clearCachePage (state) { + setObjectToSessionStorage('cachePages', []); + state.cachePages = []; + }, + addTag (state, id) { + if (id == null || id === '') return; + // 新增的标签是否存在 + let tagList = state.tagList; + let tagItem = null; + if (Array.isArray(tagList)) { + tagItem = findItemFromList(tagList, id, 'menuId'); + } + if (tagItem != null) return; + // 添加新增标签以及更新页面缓存 + let menuList = state.menuList; + let menuObject = null; + if (Array.isArray(menuList)) { + for (let i = 0; i < menuList.length; i++) { + menuObject = findMenuItem(menuList[i], id); + if (menuObject != null) break; + } + } + if (menuObject != null) { + state.tagList = [...state.tagList, menuObject]; + if (Array.isArray(state.cachePages) && (menuObject.onlineFormId == null || menuObject.onlineFormId === '') && + state.cachePages.indexOf(menuObject.formRouterName) === -1) { + state.cachePages = [...state.cachePages, menuObject.formRouterName]; + } + } + setObjectToSessionStorage('cachePages', state.cachePages); + setObjectToSessionStorage('tagList', state.tagList); + }, + removeTag (state, id) { + if (id == null || id === '') return; + // 移除标签 + let nextPos = -1; + let tagItem = null; + for (let i = 0; i < state.tagList.length; i++) { + if (state.tagList[i].menuId === id) { + tagItem = state.tagList[i]; + state.tagList.splice(i, 1); + nextPos = Math.min(i, state.tagList.length - 1); + } + } + // let tagItem = findItemFromList(state.tagList, id, 'menuId', true); + if (tagItem == null) return; + // 移除页面缓存 + findItemFromList(state.cachePages, tagItem.formRouterName, undefined, true); + setObjectToSessionStorage('cachePages', state.cachePages); + setObjectToSessionStorage('tagList', state.tagList); + // 如果移除的是当前显示页面,重新选择显示页面 + let showTag = null; + if (state.currentMenuId === id) { + showTag = state.tagList[nextPos]; + let tempId = (showTag || {}).menuId; + if (setObjectToSessionStorage('currentMenuId', tempId)) state.currentMenuId = tempId; + } + }, + closeOtherTags (state, id) { + if (id == null || id === '') return; + // 移除其他所有标签 + if (Array.isArray(state.tagList)) { + state.tagList = state.tagList.filter((item) => { + return item.menuId === id; + }); + } + + let menuObject = state.tagList[0]; + if (menuObject && (menuObject.onlineFormId == null || menuObject.onlineFormId === '') && + menuObject.formRouterName && menuObject.formRouterName !== '') { + state.cachePages = [menuObject.formRouterName]; + if (setObjectToSessionStorage('currentMenuId', menuObject.menuId)) state.currentMenuId = menuObject.menuId; + } + setObjectToSessionStorage('cachePages', state.cachePages); + setObjectToSessionStorage('tagList', state.tagList); + }, + clearAllTags (state) { + if (setObjectToSessionStorage('currentMenuId', undefined)) state.currentMenuId = undefined; + if (setObjectToSessionStorage('cachePages', [])) state.cachePages = []; + if (setObjectToSessionStorage('tagList', [])) state.tagList = []; + }, + setMenuList: (state, list) => { + if (Array.isArray(list)) { + if (setObjectToSessionStorage('menuList', list)) state.menuList = treeDataTranslate(list, 'menuId', 'parentId'); + let columnId = (state.menuList[0] || {}).menuId; + if (setObjectToSessionStorage('currentColumnId', columnId)) state.currentColumnId = columnId; + } + }, + setCurrentMenuId: (state, menuId) => { + let menuItem = null; + if (setObjectToSessionStorage('currentMenuId', menuId)) state.currentMenuId = menuId; + if (Array.isArray(state.tagList) && Array.isArray(state.menuList)) { + for (let i = 0; i < state.menuList.length; i++) { + menuItem = findMenuItem(state.menuList[i], menuId, 'menuId'); + if (menuItem != null) { + // 添加新的tag + let tagItem = findItemFromList(state.tagList, menuId, 'menuId'); + if (tagItem == null) { + state.tagList = [...state.tagList, menuItem]; + setObjectToSessionStorage('tagList', state.tagList); + } + // 添加新缓存 + if (Array.isArray(state.cachePages) && state.cachePages.indexOf(menuItem.formRouterName) === -1) { + if (menuItem.onlineFormId == null || menuItem.onlineFormId === '') { + state.cachePages = [...state.cachePages, menuItem.formRouterName]; + } + setObjectToSessionStorage('cachePages', state.cachePages); + } + break; + } + } + } + }, + setCurrentColumnId: (state, columnId) => { + if (setObjectToSessionStorage('currentColumnId', columnId)) state.currentColumnId = columnId; + if (setObjectToSessionStorage('currentMenuId', null)) state.currentMenuId = null; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/state.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/state.js new file mode 100644 index 00000000..eaa80e4c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/state.js @@ -0,0 +1,29 @@ +import { initUserInfo } from './utils'; +import { getObjectFromSessionStorage, treeDataTranslate } from '@/utils'; + +export default { + // 是否左侧菜单折叠 + isCollapse: false, + // 是否多栏目 + supportColumn: false, + // 是否多标签 + supportTags: true, + // 浏览器客户区高度 + documentClientHeight: 100, + // 浏览器客户区宽度 + documentClientWidth: undefined, + // 在线表单查询页面缓存 + onlineFormCache: {}, + // 用户登录信息 + userInfo: initUserInfo(), + // 缓存页面 + cachePages: getObjectFromSessionStorage('cachePages', []), + // 当前标签 + tagList: getObjectFromSessionStorage('tagList', []), + // 菜单列表 + menuList: treeDataTranslate(getObjectFromSessionStorage('menuList', []), 'menuId', 'parentId'), + // 当前菜单 + currentMenuId: getObjectFromSessionStorage('currentMenuId', undefined), + // 当前栏目 + currentColumnId: getObjectFromSessionStorage('currentColumnId', undefined) +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/utils/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/utils/index.js new file mode 100644 index 00000000..ec129435 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/utils/index.js @@ -0,0 +1,36 @@ +import { getObjectFromSessionStorage } from '@/utils'; + +function findMenuItem (menuItem, menuId, path) { + if (Array.isArray(path)) path.push(menuItem); + if ((menuItem.menuId + '') === (menuId + '')) return menuItem; + + let bFind = false; + let findItem = null; + if (Array.isArray(menuItem.children)) { + for (let i = 0; i < menuItem.children.length; i++) { + findItem = findMenuItem(menuItem.children[i], menuId, path); + if (findItem != null) { + bFind = true; + break; + } + } + } + + if (!bFind && Array.isArray(path)) path.pop(); + return bFind ? findItem : null; +} + +function initUserInfo (userInfo) { + if (userInfo == null) userInfo = getObjectFromSessionStorage('userInfo'); + + if (userInfo != null && userInfo.permCodeList != null && Array.isArray(userInfo.permCodeList)) { + userInfo.permCodeSet = new Set(userInfo.permCodeList); + } + + return userInfo; +} + +export { + findMenuItem, + initUserInfo +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/utils/chartOption.js b/orange-demo-flowable/orange-demo-flowable-web/src/utils/chartOption.js new file mode 100644 index 00000000..76b12e02 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/utils/chartOption.js @@ -0,0 +1,56 @@ +const defaultLineChartOption = { + grid: { + left: '3%', + right: '4%', + bottom: '20px', + containLabel: true + }, + xAxis: { + axisLabel: { + interval: 0, + showMaxLabel: true + } + }, + legend: { + top: '3%' + } +} + +const defaultBarChartOption = { + grid: { + left: '3%', + right: '4%', + bottom: '20px', + containLabel: true + }, + xAxis: { + axisLabel: { + interval: 0, + showMaxLabel: true + } + }, + legend: { + top: '3%' + } +} + +const defaultPieChartOption = { + grid: { + left: '3%', + right: '4%', + bottom: '20px', + containLabel: true + }, + legend: { + top: '3%' + }, + series: { + center: ['50%', '60%'] + } +} + +export { + defaultLineChartOption, + defaultBarChartOption, + defaultPieChartOption +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/utils/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/utils/index.js new file mode 100644 index 00000000..6b8a54a6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/utils/index.js @@ -0,0 +1,438 @@ +import JSEncrypt from 'jsencrypt'; +// eslint-disable-next-line no-unused-vars +// import Cookies from 'js-cookie'; + +/** + * 列表数据转换树形数据 + * @param {Array} data 要转换的列表 + * @param {String} id 主键字段字段名 + * @param {String} pid 父字段字段名 + * @returns {Array} 转换后的树数据 + */ +export function treeDataTranslate (data, id = 'id', pid = 'parentId') { + var res = [] + var temp = {} + for (var i = 0; i < data.length; i++) { + temp[data[i][id]] = data[i] + } + for (var k = 0; k < data.length; k++) { + if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) { + if (!temp[data[k][pid]]['children']) { + temp[data[k][pid]]['children'] = [] + } + if (!temp[data[k][pid]]['_level']) { + temp[data[k][pid]]['_level'] = 1 + } + data[k]['_level'] = temp[data[k][pid]]._level + 1 + data[k]['_parent'] = data[k][pid] + temp[data[k][pid]]['children'].push(data[k]) + } else { + res.push(data[k]) + } + } + + return res +} +/** + * 获取字符串字节长度(中文算2个字符) + * @param {String} str 要获取长度的字符串 + */ +export function getStringLength (str) { + return str.replace(/[\u4e00-\u9fa5\uff00-\uffff]/g, '**').length +} +/** + * 获取uuid + */ +export function getUUID () { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { + return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) + }); +} +/** + * 大小驼峰变换函数 + * @param name 要转换的字符串 + * @param type 转换的类型0:转换成小驼峰,1:转换成大驼峰 + */ +export function nameTranslate (name, type) { + name = name.toLowerCase(); + let nameArray = name.split('_'); + nameArray.forEach((item, index) => { + if (index === 0) { + name = type === 1 ? item.slice(0, 1).toUpperCase() + item.slice(1) : item; + } else { + name = name + item.slice(0, 1).toUpperCase() + item.slice(1); + } + }); + + nameArray = name.split('-'); + nameArray.forEach((item, index) => { + if (index === 0) { + name = type === 1 ? item.slice(0, 1).toUpperCase() + item.slice(1) : item; + } else { + name = name + item.slice(0, 1).toUpperCase() + item.slice(1); + } + }); + return name; +} +/** + * 通过id从树中获取指定的节点 + * @param {Object} node 根节点 + * @param {String|Nubmer} id 键值 + * @param {Array} list 保存查询路径 + * @param {String} idKey 主键字段名 + * @param {String} childKey 子节点字段名 + */ +function findNode (node, id, list, idKey = 'id', childKey = 'children') { + if (Array.isArray(list)) list.push(node[idKey]); + if (node[idKey] === id) { + return node; + } + + if (node[childKey] != null && Array.isArray(node[childKey])) { + for (let i = 0; i < node[childKey].length; i++) { + let tempNode = findNode(node[childKey][i], id, list, idKey, childKey); + if (tempNode) return tempNode; + } + } + + if (Array.isArray(list)) list.pop(); +} +/** + * 通过id返回从根节点到指定节点的路径 + * @param {Array} treeRoot 树根节点数组 + * @param {*} id 要查询的节点的id + * @param {*} idKey 主键字段名 + * @param {*} childKey 子节点字段名 + */ +export function findTreeNodePath (treeRoot, id, idKey = 'id', childKey = 'children') { + let tempList = []; + for (let i = 0; i < treeRoot.length; i++) { + if (findNode(treeRoot[i], id, tempList, idKey, childKey)) { + return tempList; + } + } + + return []; +} +/** + * 通过id从树中查找节点 + * @param {Array} treeRoot 根节点数组 + * @param {*} id 要查找的节点的id + * @param {*} idKey 主键字段名 + * @param {*} childKey 子节点字段名 + */ +export function findTreeNode (treeRoot, id, idKey = 'id', childKey = 'children') { + for (let i = 0; i < treeRoot.length; i++) { + let tempNode = findNode(treeRoot[i], id, undefined, idKey, childKey); + if (tempNode) return tempNode; + } +} +/** + * 把Object转换成query字符串 + * @param {Object} params 要转换的Object + */ +export function objectToQueryString (params) { + if (params == null) { + return null; + } else { + return Object.keys(params).map((key) => { + return `${key}=${params[key]}`; + }).join('&'); + } +} +/** + * 从数组中查找某一项 + * @param {Array} list 要查找的数组 + * @param {String} id 要查找的节点id + * @param {String} idKey 主键字段名(如果为null则直接比较) + * @param {Boolean} removeItem 是否从数组中移除查找到的节点 + * @returns {Object} 找到返回节点,没找到返回undefined + */ +export function findItemFromList (list, id, idKey, removeItem = false) { + if (Array.isArray(list) && list.length > 0 && id != null) { + for (let i = 0; i < list.length; i++) { + let item = list[i]; + if (((idKey == null || idKey === '') && item === id) || (idKey != null && item[idKey] === id)) { + if (removeItem) list.splice(i, 1); + return item; + } + } + } + return null; +} +/** + * 将数据保存到sessionStorage + * @param {*} key sessionStorage的键值 + * @param {*} value 要保存的数据 + */ +export function setObjectToSessionStorage (key, value) { + if (key == null || key === '') return false; + if (value == null) { + window.sessionStorage.removeItem(key); + return true; + } else { + let jsonObj = { + data: value + } + window.sessionStorage.setItem(key, JSON.stringify(jsonObj)); + return true; + } +} +/** + * 从sessionStorage里面获取数据 + * @param {String} key 键值 + * @param {*} defaultValue 默认值 + */ +export function getObjectFromSessionStorage (key, defaultValue) { + let jsonObj = null; + try { + jsonObj = JSON.parse(window.sessionStorage.getItem(key)); + jsonObj = (jsonObj || {}).data; + } catch (e) { + jsonObj = defaultValue; + }; + return (jsonObj != null) ? jsonObj : defaultValue; +} +/** + * 判读字符串是否一个数字 + * @param {String} str 要判断的字符串 + */ +export function isNumber (str) { + let num = Number.parseFloat(str); + if (Number.isNaN(num)) return false; + return num.toString() === str; +} +/** + * 生成随机数 + * @param {Integer} min 随机数最小值 + * @param {Integer} max 随机数最大值 + */ +export function random (min, max) { + let base = Math.random(); + return min + base * (max - min); +} +/** + * 加密 + * @param {*} value 要加密的字符串 + */ +const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpC4QMnbTrQOFriJJCCFFWhlruBJThAEBfRk7pRx1jsAhyNVL3CqJb0tRvpnbCnJhrRAEPdgFHXv5A0RrvFp+5Cw7QoFH6O9rKB8+0H7+aVQeKITMUHf/XMXioymw6Iq4QfWd8RhdtM1KM6eGTy8aU7SO2s69Mc1LXefg/x3yw6wIDAQAB'; +export function encrypt (value) { + if (value == null || value === '') return null; + let encrypt = new JSEncrypt(); + encrypt.setPublicKey(publicKey); + return encodeURIComponent(encrypt.encrypt(value)); +} + +export function getToken () { + return sessionStorage.getItem('token'); + // return Cookies.get('token'); +} + +export function setToken (token) { + if (token == null || token === '') { + sessionStorage.removeItem('token'); + // Cookies.remove('token'); + } else { + sessionStorage.setItem('token', token); + // Cookies.set('token', token); + } +} + +export function traversalTree (treeNode, callback, childrenKey = 'children') { + if (treeNode != null && Array.isArray(treeNode[childrenKey]) && treeNode[childrenKey].length > 0) { + treeNode[childrenKey].forEach(childNode => { + traversalTree(childNode, callback, childrenKey); + }); + } + return typeof callback === 'function' ? callback(treeNode) : undefined; +} + +export class TreeTableImpl { + constructor (dataList, options) { + this.options = { + idKey: options ? options.idKey : 'id', + nameKey: options ? options.nameKey : 'name', + parentIdKey: options ? options.parentIdKey : 'parentId', + isLefeCallback: options ? options.isLefeCallback : undefined, + checkStrictly: options ? options.checkStrictly : false + } + + this.dataList = Array.isArray(dataList) ? dataList : []; + this.dataMap = new Map(); + this.dataList.forEach(item => { + this.dataMap.set(item[this.options.idKey], item); + }); + // 表格选中行 + this.checkedRows = undefined; + this.onCheckedRowChange = this.onCheckedRowChange.bind(this); + } + + /** + * 过滤表格数据 + * @param {string} filterString 过滤条件字符串 + * @param {boolean} onlyChecked 是否只显示选中节点 + * @returns {array} 过滤后的表格数据列表 + */ + getFilterTableData (filterString, onlyChecked = false) { + let { idKey, nameKey, parentIdKey, isLefeCallback } = this.options; + let tempMap = new Map(); + let parentIdList = []; + this.dataList.forEach(item => { + if ((filterString == null || filterString === '' || item[nameKey].indexOf(filterString) !== -1) && + (!onlyChecked || (this.checkedRows != null && this.checkedRows.get(item[idKey])))) { + if (isLefeCallback == null || !isLefeCallback(item)) { + parentIdList.push(item[idKey]); + } + // 将命中节点以及它的父节点都设置为命中 + let tempItem = item; + do { + tempMap.set(tempItem[idKey], tempItem); + tempItem = this.dataMap.get(tempItem[parentIdKey]); + } while (tempItem != null) + } + }); + + return this.dataList.map(item => { + let disabled = true; + + if (parentIdList.indexOf(item[parentIdKey]) !== -1 || tempMap.get(item[idKey]) != null) { + if (parentIdList.indexOf(item[parentIdKey]) !== -1 && (isLefeCallback == null || !isLefeCallback(item))) { + parentIdList.push(item[idKey]); + } + disabled = false; + } + + return { + ...item, + __disabled: disabled + } + }); + } + + /** + * 获取表格树数据,计算选中状态 + * @param {array} dataList 表格列表数据 + */ + getTableTreeData (dataList, checkedRows) { + let { idKey, parentIdKey, checkStrictly } = this.options; + let treeData = []; + function calcPermCodeTreeAttribute (treeNode, checkedRows) { + let checkedItem = checkedRows == null ? null : checkedRows.get(treeNode[idKey]); + treeNode.__checked = checkedItem != null; + // 是否所有子权限字都被选中 + let allChildChecked = true; + // 是否任意子权限字被选中 + let hasChildChecked = false; + // 如果存在子权限字 + if (Array.isArray(treeNode.children) && treeNode.children.length > 0) { + treeNode.children.forEach(item => { + let isChecked = calcPermCodeTreeAttribute(item, checkedRows); + hasChildChecked = hasChildChecked || isChecked; + allChildChecked = allChildChecked && isChecked; + }); + } else { + allChildChecked = false; + } + treeNode.__indeterminate = !checkStrictly && hasChildChecked && !allChildChecked; + treeNode.__checked = treeNode.__checked || (allChildChecked && !checkStrictly); + return treeNode.__checked || treeNode.__indeterminate; + } + + if (Array.isArray(dataList)) { + treeData = treeDataTranslate(dataList.map(item => { + return {...item}; + }), idKey, parentIdKey); + treeData.forEach(item => { + calcPermCodeTreeAttribute(item, checkedRows); + }); + } + + return treeData; + } + + /** + * 树表格行选中状态改变 + * @param {object} row 选中状态改变行数据 + */ + onCheckedRowChange (row) { + if (this.checkedRows == null) { + this.checkedRows = new Map(); + } else { + let temp = new Map(); + this.checkedRows.forEach((item, key) => { + temp.set(key, item); + }); + this.checkedRows = temp; + } + let { idKey } = this.options; + if (!row.__checked || row.__indeterminate) { + // 节点之前未被选中或者之前为半选状态,修改当前节点以及子节点为选中状态 + this.checkedRows.set(row[idKey], row); + if (Array.isArray(row.children) && !this.options.checkStrictly) { + row.children.forEach(childNode => { + traversalTree(childNode, (node) => { + this.checkedRows.set(node[idKey], node); + }); + }); + } + } else { + // 节点之前为选中状态,修改节点以及子节点为未选中状态 + this.checkedRows.delete(row[idKey]); + if (Array.isArray(row.children) && !this.options.checkStrictly) { + row.children.forEach(childNode => { + traversalTree(childNode, (node) => { + this.checkedRows.delete(node[idKey]); + }); + }); + } + } + } + + /** + * 获取所有选中的权限字节点 + * @param {array} treeData 树数据 + * @param {boolean} includeHalfChecked 是否包含半选节点,默认为false + * @returns {array} 选中节点列表 + */ + getCheckedRows (treeData, includeHalfChecked = false) { + let checkedRows = []; + + function traversalCallback (node) { + if (node == null) return; + if (node.__checked || (includeHalfChecked && node.__indeterminate)) { + checkedRows.push(node); + } + } + + if (Array.isArray(treeData) && treeData.length > 0) { + treeData.forEach(permCode => { + traversalTree(permCode, traversalCallback, 'children'); + }); + } + + return checkedRows; + } + + /** + * 设置选中节点 + * @param {array} checkedRows + */ + setCheckedRows (checkedRows) { + this.checkedRows = new Map(); + if (Array.isArray(checkedRows)) { + checkedRows.forEach(item => { + let node = this.dataMap.get(item[this.options.idKey]); + if (node != null) { + this.checkedRows.set(node[this.options.idKey], node); + } + }); + } + } + /** + * 根据id获取表格行 + * @param {*} id + */ + getTableRow (id) { + return this.dataMap.get(id); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/utils/validate.js b/orange-demo-flowable/orange-demo-flowable-web/src/utils/validate.js new file mode 100644 index 00000000..5b148e39 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/utils/validate.js @@ -0,0 +1,33 @@ +const pattern = { + mobie: /^((\+?86)|(\(\+86\)))?(13[012356789][0-9]{8}|15[012356789][0-9]{8}|18[02356789][0-9]{8}|147[0-9]{8}|1349[0-9]{7})$/, + english: /^[a-zA-Z]+$/, + englishAndNumber: /^[a-zA-Z0-9]+$/ +} + +/** + * 邮箱 + * @param str + */ +export function isEmail (str) { + return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(str) +} + +/** + * 手机号码 + * @param str + */ +export function isMobile (str) { + return pattern.mobie.test(str) +} + +/** + * 电话号码 + * @param str + */ +export function isPhone (str) { + return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(str) +} + +export default { + pattern +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/utils/widget.js b/orange-demo-flowable/orange-demo-flowable-web/src/utils/widget.js new file mode 100644 index 00000000..057f328b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/utils/widget.js @@ -0,0 +1,322 @@ +import { Message } from 'element-ui'; +import { treeDataTranslate } from '@/utils'; + +const DEFAULT_PAGE_SIZE = 10; + +export class DropdownWidget { + /** + * 下拉组件(Select、Cascade、TreeSelect、Tree等) + * @param {function () : Promise} loadDropdownData 下拉数据获取函数 + * @param {Boolean} isTree 是否是树数据 + * @param {String} idKey 键字段字段名 + * @param {String} parentIdKey 父字段字段名 + */ + constructor (loadDropdownData, isTree = false, idKey = 'id', parentIdKey = 'parentId') { + this.loading = false; + this.dirty = true; + this.dropdownList = []; + this.isTree = isTree; + this.idKey = idKey; + this.parentIdKey = parentIdKey; + this.loadDropdownData = loadDropdownData; + this.setDropdownList = this.setDropdownList.bind(this); + this.onVisibleChange = this.onVisibleChange.bind(this); + } + /** + * 重新获取下拉数据 + */ + reloadDropdownData () { + return new Promise((resolve, reject) => { + if (!this.loading) { + if (typeof this.loadDropdownData === 'function') { + this.loading = true; + this.loadDropdownData().then(dataList => { + this.setDropdownList(dataList); + this.loading = false; + this.dirty = false; + resolve(this.dropdownList); + }).catch(e => { + this.setDropdownList([]); + this.loading = false; + reject(this.dropdownList); + }); + } else { + reject(new Error('获取下拉数据失败')); + } + } else { + resolve(this.dropdownList); + } + }); + } + /** + * 下拉框显示或隐藏时调用 + * @param {Boolean} isShow 正在显示或者隐藏 + */ + onVisibleChange (isShow) { + return new Promise((resolve, reject) => { + if (isShow && this.dirty && !this.loading) { + this.reloadDropdownData().then(res => { + resolve(res); + }).catch(e => { + reject(e); + }); + } else { + resolve(this.dropdownList); + } + }); + } + /** + * 设置下拉数据 + * @param {Array} dataList 要显示的下拉数据 + */ + setDropdownList (dataList) { + if (Array.isArray(dataList)) { + this.dropdownList = this.isTree ? treeDataTranslate(dataList, this.idKey, this.parentIdKey) : dataList; + } + } +} + +export class TableWidget { + /** + * 表格组件 + * @param {function (params: Object) : Promise} loadTableData 表数据获取函数 + * @param {function () : Boolean} verifyTableParameter 表数据获取检验函数 + * @param {Boolean} paged 是否支持分页 + * @param {Boolean} rowSelection 是否支持行选择 + * @param {String} orderFieldName 默认排序字段 + * @param {Boolean} ascending 默认排序方式(true为正序,false为倒序) + * @param {String} dateAggregateBy 默认排序字段的日期统计类型 + */ + constructor (loadTableData, verifyTableParameter, paged, rowSelection, orderFieldName, ascending, dateAggregateBy) { + this.currentRow = null; + this.loading = false; + this.oldPage = 0; + this.currentPage = 1; + this.oldPageSize = DEFAULT_PAGE_SIZE; + this.pageSize = DEFAULT_PAGE_SIZE; + this.totalCount = 0; + this.dataList = []; + this.orderInfo = { + fieldName: orderFieldName, + asc: ascending, + dateAggregateBy: dateAggregateBy + }; + this.paged = paged; + this.rowSelection = rowSelection; + this.searchVerify = verifyTableParameter || function () { return true; }; + this.loadTableData = loadTableData || function () { return Promise.resolve(); }; + this.onCurrentPageChange = this.onCurrentPageChange.bind(this); + this.onPageSizeChange = this.onPageSizeChange.bind(this); + this.onSortChange = this.onSortChange.bind(this); + this.getTableIndex = this.getTableIndex.bind(this); + this.currentRowChange = this.currentRowChange.bind(this); + } + /** + * 表格分页变化 + * @param {Integer} newCurrentPage 变化后的显示页面 + */ + onCurrentPageChange (newCurrentPage) { + this.loadTableDataImpl(newCurrentPage, this.pageSize).then(() => { + this.oldPage = this.currentPage = newCurrentPage; + }).catch(() => { + this.currentPage = this.oldPage; + }); + } + /** + * 表格分页每页显示数量变化 + * @param {Integer} newPageSize 变化后的每页显示数量 + */ + onPageSizeChange (newPageSize) { + this.pageSize = newPageSize; + this.currentPage = 1 + this.loadTableDataImpl(1, newPageSize).then(() => { + this.oldPage = this.currentPage; + this.oldPageSize = this.pageSize; + }).catch(e => { + this.currentPage = this.oldPage; + this.pageSize = this.oldPageSize; + }); + } + /** + * 表格排序字段变化 + * @param {String} prop 排序字段的字段名 + * @param {String} order 正序还是倒序 + */ + onSortChange ({ prop, order }) { + this.orderInfo.fieldName = prop; + this.orderInfo.asc = (order === 'ascending'); + this.refreshTable(); + } + /** + * 获取每一行的index信息 + * @param {Integer} index 表格在本页位置 + */ + getTableIndex (index) { + return this.paged ? ((this.currentPage - 1) * this.pageSize + (index + 1)) : (index + 1); + } + /** + * 当前选中行改变 + * @param {Object} currentRow 当前选中行 + * @param {Object} oldRow 老的选中行 + */ + currentRowChange (currentRow, oldRow) { + this.currentRow = currentRow; + } + clearTable () { + this.currentRow = null; + this.oldPage = 0; + this.currentPage = 1; + this.totalCount = 0; + this.dataList = []; + } + /** + * 获取表格数据 + * @param {Integer} pageNum 当前分页 + * @param {Integer} pageSize 每页数量 + * @param {Boolean} reload 是否重新获取数据 + */ + loadTableDataImpl (pageNum, pageSize, reload = false) { + return new Promise((resolve, reject) => { + if (typeof this.loadTableData !== 'function') { + reject(); + } else { + // 如果pageSize和pageNum没有变化,并且不强制刷新 + if (this.paged && !reload && this.oldPage === pageNum && this.oldPageSize === pageSize) { + resolve(); + } else { + let params = {}; + if (this.orderInfo.fieldName != null) params.orderParam = [this.orderInfo]; + if (this.paged) { + params.pageParam = { + pageNum, + pageSize + } + } + this.loading = true; + this.loadTableData(params).then(tableData => { + this.dataList = tableData.dataList; + this.totalCount = tableData.totalCount; + this.loading = false; + resolve(); + }).catch(e => { + this.loading = false; + reject(e); + }); + } + } + }); + } + /** + * 刷新表格数据 + * @param {Boolean} research 是否按照新的查询条件重新查询(调用verify函数) + * @param {Integer} pageNum 当前页面 + */ + refreshTable (research = false, pageNum = undefined, showMsg = false) { + let reload = false; + if (research) { + if (typeof this.searchVerify === 'function' && !this.searchVerify()) return; + reload = true; + } + + if (Number.isInteger(pageNum) && pageNum !== this.currentPage) { + this.loadTableDataImpl(pageNum, this.pageSize, reload).then(res => { + this.oldPage = this.currentPage = pageNum; + if (research && showMsg) Message.success('查询成功'); + }).catch(e => { + this.currentPage = this.oldPage; + }); + } else { + this.loadTableDataImpl(this.currentPage, this.pageSize, true).catch(e => {}); + } + } +} + +export class UploadWidget { + /** + * 上传组件 + * @param {Integer} maxCount 最大上传数量 + */ + constructor (maxCount = 1) { + this.maxCount = maxCount; + this.fileList = []; + this.onFileChange = this.onFileChange.bind(this); + } + /** + * 上传文件列表改变 + * @param {Object} file 改变的文件 + * @param {Array} fileList 改变后的文件列表 + */ + onFileChange (file, fileList) { + if (Array.isArray(fileList) && fileList.length > 0) { + if (this.maxCount === 1) { + this.fileList = [fileList[fileList.length - 1]]; + } else { + this.fileList = fileList; + } + } else { + this.fileList = undefined; + } + return this.fileList; + } +} + +export class ChartWidget { + /** + * 图表组件 + * @param {function (params) : Promise} loadTableData chart数据获取函数 + * @param {function () : Boolean} verifyTableParameter 数据参数检验函数 + * @param {Array} columns 数据列 + */ + constructor (loadTableData, verifyTableParameter, columns) { + this.columns = columns; + this.loading = false; + this.dataEmpty = false; + this.chartData = undefined; + this.chartObject = undefined; + this.dimensionMaps = new Map(); + this.chartSetting = undefined; + this.searchVerify = verifyTableParameter || function () { return true; }; + this.loadTableData = loadTableData || function () { return Promise.resolve(); }; + } + /** + * 获取图表数据 + * @param {Boolean} reload 是否重新获取数据 + */ + loadChartDataImpl (reload = false) { + return new Promise((resolve, reject) => { + if (typeof this.loadTableData !== 'function') { + reject(); + } else { + if (!reload) { + resolve(); + } else { + this.loading = true; + this.loadTableData().then(tableData => { + this.chartData = { + columns: this.columns, + rows: tableData.dataList + } + this.loading = false; + if (this.chartObject) this.chartObject.resize(); + resolve(); + }).catch(e => { + console.error(e); + this.loading = false; + reject(e); + }); + } + } + }); + } + /** + * 刷新图表数据 + * @param {Boolean} research 是否按照新的查询条件重新查询(调用verify函数) + */ + refreshChart (research = false) { + if (research) { + if (typeof this.searchVerify === 'function' && !this.searchVerify()) return; + } + + this.loadChartDataImpl(true).catch(e => {}); + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/breadcrumb/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/breadcrumb/index.vue new file mode 100644 index 00000000..286430df --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/breadcrumb/index.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyPassword/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyPassword/index.vue new file mode 100644 index 00000000..42ba14b2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyPassword/index.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/sidebar/menu-item.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/sidebar/menu-item.vue new file mode 100644 index 00000000..3a28543f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/sidebar/menu-item.vue @@ -0,0 +1,59 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/sidebar/sidebar.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/sidebar/sidebar.vue new file mode 100644 index 00000000..0971c0ee --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/sidebar/sidebar.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/tags/tagItem.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/tags/tagItem.vue new file mode 100644 index 00000000..800669e6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/tags/tagItem.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/tags/tagPanel.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/tags/tagPanel.vue new file mode 100644 index 00000000..9378134a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/tags/tagPanel.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/index.vue new file mode 100644 index 00000000..210f4bc2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/index.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/login/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/login/index.vue new file mode 100644 index 00000000..4c78418a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/login/index.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customFilterWidget.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customFilterWidget.vue new file mode 100644 index 00000000..39988cb0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customFilterWidget.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customImage.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customImage.vue new file mode 100644 index 00000000..1aaffb62 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customImage.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customTable.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customTable.vue new file mode 100644 index 00000000..00cda255 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customTable.vue @@ -0,0 +1,529 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customText.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customText.vue new file mode 100644 index 00000000..c311ab81 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customText.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customUpload.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customUpload.vue new file mode 100644 index 00000000..c72b1687 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customUpload.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customWidget.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customWidget.vue new file mode 100644 index 00000000..bafa3c99 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customWidget.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/dragableFilterBox.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/dragableFilterBox.vue new file mode 100644 index 00000000..9c7b9544 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/dragableFilterBox.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editDictParamValue.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editDictParamValue.vue new file mode 100644 index 00000000..d050b3c4 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editDictParamValue.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editFormParam.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editFormParam.vue new file mode 100644 index 00000000..08186023 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editFormParam.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editTableQueryParam.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editTableQueryParam.vue new file mode 100644 index 00000000..b5f699b8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editTableQueryParam.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editWidgetTableColumn.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editWidgetTableColumn.vue new file mode 100644 index 00000000..6ae944ac --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editWidgetTableColumn.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editWidgetTableOperation.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editWidgetTableOperation.vue new file mode 100644 index 00000000..11818c7b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editWidgetTableOperation.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editableWidgetItem.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editableWidgetItem.vue new file mode 100644 index 00000000..f36e830a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/editableWidgetItem.vue @@ -0,0 +1,150 @@ + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/formGenerator.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/formGenerator.vue new file mode 100644 index 00000000..8bf37624 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/formGenerator.vue @@ -0,0 +1,1565 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/data/onlineFormOptions.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/data/onlineFormOptions.js new file mode 100644 index 00000000..813a0181 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/data/onlineFormOptions.js @@ -0,0 +1,239 @@ +import { SysCustomWidgetKind, SysCustomWidgetType, SysCustomWidgetOperationType } from '@/staticDict/onlineStaticDict.js'; + +const defaultWidgetAttributes = { + label: { + widgetKind: SysCustomWidgetKind.Form, + widgetType: SysCustomWidgetType.Label, + span: 12, + placeholder: '', + defaultValue: '', + readOnly: true + }, + input: { + widgetKind: SysCustomWidgetKind.Form, + widgetType: SysCustomWidgetType.Input, + span: 12, + type: 'text', + placeholder: '', + defaultValue: '', + minRows: 2, + maxRows: 2, + readOnly: false, + disabled: false + }, + numberInput: { + widgetKind: SysCustomWidgetKind.Form, + widgetType: SysCustomWidgetType.NumberInput, + span: 12, + defaultValue: 0, + min: 0, + max: 100, + step: 1, + precision: 0, + controlVisible: 1, + controlPosition: 0, + readOnly: false, + disabled: false + }, + numberRange: { + widgetKind: SysCustomWidgetKind.Filter, + widgetType: SysCustomWidgetType.NumberRange, + readOnly: false, + disabled: false + }, + switch: { + widgetKind: SysCustomWidgetKind.Form, + widgetType: SysCustomWidgetType.Switch, + span: 12, + readOnly: false, + disabled: false + }, + select: { + widgetKind: SysCustomWidgetKind.Form, + widgetType: SysCustomWidgetType.Select, + span: 12, + placeholder: '' + }, + cascader: { + widgetKind: SysCustomWidgetKind.Form, + widgetType: SysCustomWidgetType.Cascader, + span: 12, + placeholder: '' + }, + date: { + widgetKind: SysCustomWidgetKind.Form, + widgetType: SysCustomWidgetType.Date, + span: 12, + placeholder: '', + type: 'date', + format: 'yyyy-MM-dd', + valueFormat: 'yyyy-MM-dd', + readOnly: false, + disabled: false + }, + dateRange: { + widgetKind: SysCustomWidgetKind.Filter, + widgetType: SysCustomWidgetType.DateRange, + readOnly: false, + disabled: false + }, + richEditor: { + widgetKind: SysCustomWidgetKind.Form, + widgetType: SysCustomWidgetType.RichEditor, + span: 24 + }, + upload: { + widgetKind: SysCustomWidgetKind.Form, + widgetType: SysCustomWidgetType.Upload, + span: 12, + isImage: true, + maxFileCount: undefined, + fileFieldName: 'uploadFile', + actionUrl: '', + downloadUrl: '' + }, + divider: { + widgetKind: SysCustomWidgetKind.Data, + widgetType: SysCustomWidgetType.Divider, + span: 24, + position: 'center' + }, + text: { + widgetKind: SysCustomWidgetKind.Data, + widgetType: SysCustomWidgetType.Text, + span: 24, + color: undefined, + backgroundColor: undefined, + fontSize: undefined, + lineHeight: undefined, + indent: undefined, + decoration: 'none', + align: 'left', + padding: 0 + }, + image: { + widgetKind: SysCustomWidgetKind.Data, + widgetType: SysCustomWidgetType.Image, + span: 24, + src: 'https://www.w3school.com.cn/i/eg_tulip.jpg', + height: undefined, + width: undefined, + fit: 'fill' + }, + table: { + widgetKind: SysCustomWidgetKind.Data, + widgetType: SysCustomWidgetType.Table, + span: 24, + supportBottom: 0, + tableInfo: { + height: undefined, + paged: true, + optionColumnWidth: 150 + }, + titleColor: '#409EFF', + tableColumnList: [], + operationList: [ + /** + * 暂时去掉导出操作,等支持后再开启 + { + id: 0, + type: SysCustomWidgetOperationType.EXPORT, + name: '导出', + enabled: true, + builtin: true, + rowOperation: false, + btnType: 'primary', + plain: true, + formId: undefined + }, + */ + { + id: 1, + type: SysCustomWidgetOperationType.ADD, + name: '新建', + enabled: true, + builtin: true, + rowOperation: false, + btnType: 'primary', + plain: false, + formId: undefined + }, + { + id: 2, + type: SysCustomWidgetOperationType.EDIT, + name: '编辑', + enabled: true, + builtin: true, + rowOperation: true, + btnClass: 'table-btn success', + formId: undefined + }, + { + id: 3, + type: SysCustomWidgetOperationType.DELETE, + name: '删除', + enabled: true, + builtin: true, + rowOperation: true, + btnClass: 'table-btn delete', + formId: undefined + } + ], + queryParamList: [] + }, + card: { + widgetKind: SysCustomWidgetKind.Container, + widgetType: SysCustomWidgetType.Card, + span: 12, + supportBottom: 0, + padding: 15, + gutter: 15, + height: undefined, + shadow: 'always', + childWidgetList: [] + } +} + +const defaultFormConfig = { + formType: undefined, + formKind: undefined, + gutter: 20, + labelWidth: 100, + labelPosition: 'right', + tableWidget: undefined, + width: 800, + height: undefined +} + +const baseWidgetList = [ + { + id: 'orang_base_card', + columnName: 'card', + showName: '基础卡片', + widgetType: SysCustomWidgetType.Card + }, + { + id: 'orange_base_divider', + columnName: 'divider', + showName: '分割线', + widgetType: SysCustomWidgetType.Divider + }, + { + id: 'orange_base_text', + columnName: 'text', + showName: '文本', + widgetType: SysCustomWidgetType.Text + }, + { + id: 'orange_base_image', + columnName: 'image', + showName: '图片', + widgetType: SysCustomWidgetType.Image + } +]; + +export { + baseWidgetList, + defaultWidgetAttributes, + defaultFormConfig +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlineDict/editDictDataButton.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlineDict/editDictDataButton.vue new file mode 100644 index 00000000..6e9d2f1c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlineDict/editDictDataButton.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlineDict/editOnlineDict.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlineDict/editOnlineDict.vue new file mode 100644 index 00000000..1d3f0f6a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlineDict/editOnlineDict.vue @@ -0,0 +1,495 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlineDict/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlineDict/index.vue new file mode 100644 index 00000000..1209cf55 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlineDict/index.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editOnlineForm.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editOnlineForm.vue new file mode 100644 index 00000000..5f2163b8 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editOnlineForm.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editOnlinePageDatasource.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editOnlinePageDatasource.vue new file mode 100644 index 00000000..5543a7b9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editOnlinePageDatasource.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editOnlinePageDatasourceRelation.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editOnlinePageDatasourceRelation.vue new file mode 100644 index 00000000..32df3c5d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editOnlinePageDatasourceRelation.vue @@ -0,0 +1,358 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editVirtualColumnFilter.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editVirtualColumnFilter.vue new file mode 100644 index 00000000..f650ba9e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/editVirtualColumnFilter.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/index.vue new file mode 100644 index 00000000..c8a9c7f6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/index.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/onlinePageSetting.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/onlinePageSetting.vue new file mode 100644 index 00000000..55fe4ec1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/onlinePageSetting.vue @@ -0,0 +1,936 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/onlinePageTableColumnRule.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/onlinePageTableColumnRule.vue new file mode 100644 index 00000000..a729dabc --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/onlinePageTableColumnRule.vue @@ -0,0 +1,568 @@ + + + + +> diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/onlinePageVirtualColumn.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/onlinePageVirtualColumn.vue new file mode 100644 index 00000000..288e9631 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/onlinePageVirtualColumn.vue @@ -0,0 +1,582 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/setOnlineTableColumnRule.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/setOnlineTableColumnRule.vue new file mode 100644 index 00000000..9c8399b1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formOnlinePage/setOnlineTableColumnRule.vue @@ -0,0 +1,285 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineEditForm.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineEditForm.vue new file mode 100644 index 00000000..c65846bc --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineEditForm.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineFormMixins.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineFormMixins.js new file mode 100644 index 00000000..2ccec496 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineFormMixins.js @@ -0,0 +1,836 @@ +import { mapMutations } from 'vuex'; +import * as StaticDict from '@/staticDict'; +import rules from '@/utils/validate.js'; +import { getOperationPermCode } from '../utils/index.js'; +import OnlineForm from '@/views/onlineForm/index.vue'; +import { + OnlineFormController +} from '@/api/onlineController.js'; + +const OnlineFormMixins = { + props: { + formId: { + type: String, + required: true + }, + readOnly: { + type: Boolean, + default: false + }, + closeVisible: { + type: String, + default: '0' + }, + params: { + type: Object + } + }, + data () { + return { + isLoading: true, + formData: {}, + rules: {}, + formConfig: { + formType: undefined, + formKind: undefined, + gutter: 20, + labelPosition: 'right', + labelWidth: 120, + width: undefined, + height: undefined, + formWidgetList: [], + formQueryTable: undefined + }, + masterTable: undefined, + errorMessage: [], + tableWidgetList: [], + dropdownWidgetList: [], + richEditWidgetList: [], + datasourceMap: new Map(), + relationMap: new Map(), + tableMap: new Map(), + columnMap: new Map(), + dictMap: new Map(), + linkageMap: new Map() + } + }, + methods: { + getFormData () { + return this.formData; + }, + getPermCode (widget, operation) { + return getOperationPermCode(widget, operation); + }, + loadOnlineFormData () { + return new Promise((resolve, reject) => { + OnlineFormController.render(this, { + formId: this.formId + }).then(res => { + let onlineForm = res.data.onlineForm; + let formConfigData = JSON.parse(onlineForm.widgetJson); + let formConfig = { + formName: onlineForm.formName, + formType: onlineForm.formType, + formKind: onlineForm.formKind, + masterTableId: onlineForm.masterTableId, + labelWidth: formConfigData.formConfig.labelWidth, + labelPosition: formConfigData.formConfig.labelPosition, + gutter: formConfigData.formConfig.gutter, + height: formConfigData.formConfig.height, + width: formConfigData.formConfig.width, + formWidgetList: formConfigData.widgetList, + formQueryTable: formConfigData.formConfig.tableWidget + } + onlineForm = null; + res.data.onlineForm = null; + // 字典 + if (Array.isArray(res.data.onlineDictList)) { + res.data.onlineDictList.forEach(dict => { + this.dictMap.set(dict.dictId, dict); + }); + } + res.data.onlineDictList = null; + // 数据表 + if (Array.isArray(res.data.onlineTableList)) { + res.data.onlineTableList.forEach(table => { + this.tableMap.set(table.tableId, table); + }); + } + res.data.onlineTableList = null; + // 字段 + if (Array.isArray(res.data.onlineColumnList)) { + res.data.onlineColumnList.forEach(column => { + if (column.dictId != null) { + column.dictInfo = this.dictMap.get(column.dictId); + } + let table = this.tableMap.get(column.tableId); + if (table) { + if (!Array.isArray(table.columnList)) table.columnList = []; + table.columnList.push(column); + } + this.columnMap.set(column.columnId, column); + }); + } + res.data.onlineColumnList = null; + // 虚拟字段 + if (Array.isArray(res.data.onlineVirtualColumnList)) { + res.data.onlineVirtualColumnList.forEach(column => { + column.columnId = column.virtualColumnId; + column.columnComment = column.columnPrompt; + column.columnName = column.objectFieldName; + column.primaryKey = false; + column.isVirtualColumn = true; + this.columnMap.set(column.columnId, column); + }); + } + res.data.onlineVirtualColumnList = null; + // 数据源 + if (Array.isArray(res.data.onlineDatasourceList)) { + res.data.onlineDatasourceList.forEach(datasource => { + datasource.masterTable = this.tableMap.get(datasource.masterTableId); + if (datasource.masterTable) datasource.masterTable.datasource = datasource; + this.datasourceMap.set(datasource.datasourceId, datasource); + }); + } + res.data.onlineDatasourceList = null; + // 关联 + if (Array.isArray(res.data.onlineDatasourceRelationList)) { + res.data.onlineDatasourceRelationList.forEach(relation => { + let datasource = this.datasourceMap.get(relation.datasourceId); + if (datasource) { + if (!Array.isArray(datasource.relationList)) datasource.relationList = []; + datasource.relationList.push(relation); + } + relation.masterColumn = this.columnMap.get(relation.masterColumnId); + relation.slaveTable = this.tableMap.get(relation.slaveTableId); + if (relation.slaveTable) { + relation.slaveTable.relation = relation; + relation.slaveTable.datasource = datasource; + } + relation.slaveColumn = this.columnMap.get(relation.slaveColumnId); + this.relationMap.set(relation.relationId, relation); + }); + } + res.data.onlineDatasourceRelationList = null; + // 校验规则 + if (Array.isArray(res.data.onlineColumnRuleList)) { + res.data.onlineColumnRuleList.forEach(rule => { + let column = this.columnMap.get(rule.columnId); + if (column) { + if (!Array.isArray(column.ruleList)) column.ruleList = []; + column.ruleList.push(rule); + } + }); + } + res.data.onlineColumnRuleList = null; + this.initFormData(formConfig); + this.formConfig = formConfig; + resolve(); + }).catch(e => { + reject(e); + }); + }); + }, + initWidget (widget, formConfig) { + if (widget != null) { + if (widget.datasourceId) widget.datasource = this.datasourceMap.get(widget.datasourceId); + if (widget.relationId) { + widget.relation = this.relationMap.get(widget.relationId); + if (widget.datasource == null && widget.relation != null) { + widget.datasource = this.datasourceMap.get(widget.relation.datasourceId); + } + } + if (widget.datasource == null) { + widget.datasource = { + masterTable: {} + } + widget.column = {} + } + if (widget.tableId) widget.table = this.tableMap.get(widget.tableId); + if (widget.columnId) widget.column = this.columnMap.get(widget.columnId); + if (widget.widgetType === this.SysCustomWidgetType.RichEditor) { + this.richEditWidgetList.push(widget); + } + + // 初始化组件下拉字典参数 + if (Array.isArray(widget.dictParamList)) { + widget.dictParamList.forEach(param => { + if (param.dictValueType === this.SysOnlineParamValueType.STATIC_DICT) { + let errorItem = null; + if (Array.isArray(param.dictValue) && param.dictValue.length === 2) { + let staticDict = StaticDict[param.dictValue[0]]; + if (staticDict == null) { + errorItem = { + widget: widget, + message: '组件字典参数' + param.dictParamName + '绑定的静态字典 [' + param.dictValue[0] + '] 并不存在!' + } + } else { + if (staticDict.getValue(param.dictValue[1]) == null) { + errorItem = { + widget: widget, + message: '组件字典参数' + param.dictParamName + '绑定的静态字典值并不属于静态字段 [' + param.dictValue[0] + '] !' + } + } + } + } else { + errorItem = { + widget: widget, + message: '组件字典参数' + param.dictParamName + '绑定的静态字典错误!' + } + } + if (errorItem != null) this.errorMessage.push(errorItem); + } + }); + } + if (widget.column && widget.column.dictInfo != null) { + this.dropdownWidgetList.push(widget); + } + // 初始化表格列 + if (widget.widgetType === this.SysCustomWidgetType.Table) { + // 寻找表格主键 + widget.primaryColumnName = undefined; + if (widget.table && Array.isArray(widget.table.columnList)) { + for (let i = 0; i < widget.table.columnList.length; i++) { + if (widget.table.columnList[i].primaryKey) { + widget.primaryColumnName = widget.table.columnList[i].columnName; + break; + } + } + } + if (Array.isArray(widget.tableColumnList)) { + widget.tableColumnList.forEach(tableColumn => { + tableColumn.table = this.tableMap.get(tableColumn.tableId); + tableColumn.column = this.columnMap.get(tableColumn.columnId); + tableColumn.relation = this.relationMap.get(tableColumn.relationId); + if (tableColumn.table == null || tableColumn.column == null) { + this.errorMessage.push({ + widget: widget, + message: '表格列 [' + tableColumn.showName + '] 绑定的字段不存在!' + }); + } + }); + } + if (Array.isArray(widget.queryParamList)) { + widget.queryParamList.forEach(param => { + param.table = this.tableMap.get(param.tableId); + param.column = this.columnMap.get(param.columnId); + param.relation = this.relationMap.get(param.relationId); + + if (param.table == null || param.column == null) { + this.errorMessage.push({ + widget: widget, + message: '表格查询参数不存在!' + }); + } + }); + } + + this.tableWidgetList.push(widget); + } + + while (widget.datasourceId != null || widget.relationId != null) { + if (widget.datasourceId == null && widget.relation == null) { + let errorItem = { + widget: widget, + message: '组件绑定字段所属' + (widget.datasourceId ? '数据源' : '关联') + '不存在!' + } + this.errorMessage.push(errorItem); + break; + } + if (widget.table == null) { + let errorItem = { + widget: widget, + messagre: '组件绑定字段所属数据表不存在!' + } + this.errorMessage.push(errorItem); + break; + } + if (widget.column == null && widget.columnId != null) { + let errorItem = { + widget: widget, + messagre: '组件绑定字段不存在!' + } + this.errorMessage.push(errorItem); + break; + } + if (widget.column) { + let table = this.tableMap.get(widget.tableId); + if (table.tableId !== widget.table.tableId) { + let errorItem = { + widget: widget, + messagre: '组件绑定字段不属于选张的数据表!' + } + this.errorMessage.push(errorItem); + break; + } + } + break; + } + + if (Array.isArray(widget.childWidgetList)) { + widget.childWidgetList.forEach(subWidget => { + if (formConfig.formType === this.SysOnlineFormType.FLOW && this.formReadOnly) { + subWidget.readOnly = true; + } + this.initWidget(subWidget, formConfig); + }) + } + + if (widget.column && widget.column.dictInfo) { + if (Array.isArray(widget.dictParamList)) { + widget.dictParamList.forEach(dictParam => { + if (dictParam.dictValueType === this.SysOnlineParamValueType.TABLE_COLUMN) { + let linkageItem = this.linkageMap.get(dictParam.dictValue); + if (linkageItem == null) { + linkageItem = []; + this.linkageMap.set(dictParam.dictValue, linkageItem); + } + linkageItem.push(widget); + } + }); + } + } + } + }, + initFormWidgetList (formConfig) { + this.errorMessage = []; + if (Array.isArray(formConfig.formWidgetList)) { + formConfig.formWidgetList.forEach(widget => { + if (formConfig.formType === this.SysOnlineFormType.FLOW && this.formReadOnly) { + widget.readOnly = true; + } + this.initWidget(widget, formConfig); + }); + } + if (this.errorMessage.length > 0) { + console.error(this.errorMessage); + } + }, + buildRuleItem (widget, rule) { + if (rule.propDataJson) rule.data = JSON.parse(rule.propDataJson); + if (widget != null && rule != null) { + switch (rule.onlineRule.ruleType) { + case this.SysOnlineRuleType.INTEGER_ONLY: + return { type: 'integer', message: rule.data.message, trigger: 'blur', transform: (value) => Number(value) }; + case this.SysOnlineRuleType.DIGITAL_ONLY: + return { type: 'number', message: rule.data.message, trigger: 'blur', transform: (value) => Number(value) }; + case this.SysOnlineRuleType.LETTER_ONLY: + return { type: 'string', pattern: rules.pattern.english, message: rule.data.message, trigger: 'blur' }; + case this.SysOnlineRuleType.EMAIL: + return { type: 'email', message: rule.data.message, trigger: 'blur' }; + case this.SysOnlineRuleType.MOBILE: + return { type: 'string', pattern: rules.pattern.mobie, message: rule.data.message, trigger: 'blur' }; + case this.SysOnlineRuleType.RANGE: + if (widget.column) { + let isNumber = ['Boolean', 'Date', 'String'].indexOf(widget.column.objectFieldType) === -1; + return { type: isNumber ? 'number' : 'string', min: rule.data.min, max: rule.data.max, message: rule.data.message, trigger: 'blur' }; + } + break; + case this.SysOnlineRuleType.CUSTOM: + return { type: 'string', pattern: new RegExp(rule.data.pattern), message: rule.data.message, trigger: 'blur' }; + } + } + }, + buildWidgetRule (widget, rules) { + if (widget != null && widget.column != null) { + let widgetRuleKey = (widget.relation ? widget.relation.variableName + '__' : '') + widget.column.columnName; + // 必填字段以及设置了验证规则的字段 + if (!widget.column.nullable || Array.isArray(widget.column.ruleList)) { + rules[widgetRuleKey] = []; + // 必填验证 + if (!widget.column.nullable) { + rules[widgetRuleKey].push( + { required: true, message: widget.showName + '不能为空!', trigger: 'true' } + ) + } + // 其他验证 + if (Array.isArray(widget.column.ruleList)) { + widget.column.ruleList.forEach(rule => { + let ruleItem = this.buildRuleItem(widget, rule); + if (ruleItem) rules[widgetRuleKey].push(ruleItem); + }); + } + } + } + }, + initWidgetRule (formConfig) { + if (Array.isArray(formConfig.formWidgetList)) { + let rules = {}; + formConfig.formWidgetList.forEach(widget => { + this.buildWidgetRule(widget, rules); + }); + this.$set(this, 'rules', rules); + this.$nextTick(() => { + if (this.$refs.form) this.$refs.form.clearValidate(); + }); + } + }, + initFormDatasourceData (formConfig) { + let that = this; + function addFormDataByColumn (retObj, column, relation) { + let fieldName = (relation ? relation.variableName + '__' : '') + column.columnName; + if (retObj == null) retObj = {}; + if (formConfig.formType === that.SysOnlineFormType.QUERY) { + if (retObj.formFilter == null) retObj.formFilter = {}; + if (retObj.formFilterCopy == null) retObj.formFilterCopy = {}; + retObj.formFilter[fieldName] = column.objectFieldType === 'Boolean' ? false : undefined; + retObj.formFilterCopy[fieldName] = column.objectFieldType === 'Boolean' ? false : undefined; + } else { + retObj[fieldName] = column.objectFieldType === 'Boolean' ? false : undefined; + } + + return retObj; + } + // 设置数据源数据 + let datasourceFormData = {}; + if (this.masterTable) { + // 添加表单主表的数据 + this.masterTable.columnList.forEach(column => { + datasourceFormData = addFormDataByColumn(datasourceFormData, column, this.masterTable.relation); + }); + // 如果表单主表是数据源主表,添加关联数据 + if (this.masterTable.relation == null) { + let datasource = this.masterTable.datasource; + if (datasource != null && Array.isArray(datasource.relationList)) { + datasource.relationList.forEach(relation => { + // 一对一关联从表数据 + if (relation.relationType === this.SysOnlineRelationType.ONE_TO_ONE) { + let slaveTable = this.tableMap.get(relation.slaveTableId); + if (slaveTable && Array.isArray(slaveTable.columnList)) { + slaveTable.columnList.forEach(column => { + datasourceFormData = addFormDataByColumn(datasourceFormData, column, relation); + }); + } + } + }); + } + } + } + this.$set(this, 'formData', datasourceFormData); + }, + initWidgetLinkage (formConfig) { + this.linkageMap.forEach((widgetList, key) => { + let column = this.columnMap.get(key); + let watchKey = null; + if (formConfig.formType === this.SysOnlineFormType.QUERY) { + watchKey = 'formData.formFilter.' + column.columnName; + } else { + watchKey = 'formData.' + column.columnName; + } + this.$watch(watchKey, (newValue) => { + if (Array.isArray(widgetList)) { + widgetList.forEach(widget => { + if (Array.isArray(this.$refs[widget.variableName])) { + this.$refs[widget.variableName].forEach(ref => { + ref.reset(); + }); + } else { + this.$refs[widget.variableName].reset(); + } + }); + } + }); + }); + }, + initFormData (formConfig) { + this.masterTable = this.tableMap.get(formConfig.masterTableId); + // 初始化表单数据 + this.initFormDatasourceData(formConfig); + // 初始化表单组件 + this.initWidget(formConfig.formQueryTable, formConfig); + this.initFormWidgetList(formConfig); + // 初始化校验信息 + this.initWidgetRule(formConfig); + }, + getParamValue (valueType, valueData) { + switch (valueType) { + case this.SysOnlineParamValueType.FORM_PARAM: + return this.params ? this.params[valueData] : undefined; + case this.SysOnlineParamValueType.TABLE_COLUMN: + { + let column = this.columnMap.get(valueData); + let columnValue = null; + if (this.formConfig.formType === this.SysOnlineFormType.QUERY) { + columnValue = this.formData.formFilterCopy[column.columnName]; + } else { + columnValue = this.formData[column.columnName]; + } + if (column == null || columnValue == null || columnValue === '') { + return null; + } else { + return columnValue; + } + } + case this.SysOnlineParamValueType.STATIC_DICT: + return Array.isArray(valueData) ? valueData[1] : undefined; + case this.SysOnlineParamValueType.INPUT_VALUE: + return valueData; + } + }, + getParamValueObj (paramName, valueType, valueData, retObj) { + try { + if (retObj == null) retObj = {}; + retObj[paramName] = this.getParamValue(valueType, valueData); + if (retObj[paramName] == null) return null; + return retObj; + } catch (e) { + console.log(e); + } + }, + clean () { + this.datasourceMap = null; + this.relationMap = null; + this.tableMap = null; + this.columnMap = null; + this.dictMap = null; + }, + loadAllDropdownData () { + if (Array.isArray(this.dropdownWidgetList)) { + this.dropdownWidgetList.forEach(dropdownWidget => { + let dropdownWidgetImpl = this.$refs[dropdownWidget.variableName][0]; + if (dropdownWidgetImpl) { + dropdownWidgetImpl.onVisibleChange(); + } + }); + } + }, + reload () { + this.loadOnlineFormData().then(res => { + this.isLoading = false; + if (this.formConfig.formType === this.SysOnlineFormType.FORM) { + if (Number.parseInt(this.operationType) === this.SysCustomWidgetOperationType.EDIT && this.saveOnClose === '1') { + // 编辑操作页面,初始化页面数据 + let httpCall = null; + if (this.saveOnClose === '0') { + httpCall = Promise.resolve({ + data: this.params + }); + } else { + let params = { + datasourceId: (this.masterTable.datasource || {}).datasourceId, + relationId: (this.masterTable.relation || {}).relationId + } + + for (let i = 0; i < this.masterTable.columnList.length; i++) { + let column = this.masterTable.columnList[i]; + if (column.primaryKey) { + params.dataId = this.params[column.columnName]; + break; + } + } + if (params.relationId) { + httpCall = this.doUrl('/admin/online/onlineOperation/viewByOneToManyRelationId/' + (this.masterTable.datasource || {}).variableName, 'get', params); + } else { + httpCall = this.doUrl('/admin/online/onlineOperation/viewByDatasourceId/' + (this.masterTable.datasource || {}).variableName, 'get', params); + } + } + + httpCall.then(res => { + this.formData = { + ...this.formData, + ...res.data + } + this.loadAllDropdownData(); + // 初始化组件联动 + this.initWidgetLinkage(this.formConfig); + }).catch(e => {}); + return; + } else { + if (this.rowData != null) { + this.formData = { + ...this.rowData + } + } + } + this.loadAllDropdownData(); + } + setTimeout(() => { + if (this.formConfig.formType === this.SysOnlineFormType.FLOW) { + this.loadAllDropdownData(); + } + // 初始化组件联动 + this.initWidgetLinkage(this.formConfig); + this.onResume(); + this.$emit('ready'); + }, 30); + }).catch(e => { + console.log(e); + }); + }, + onResume () {}, + getPrimaryKeyColumnParam (table, row) { + if (table && Array.isArray(table.columnList)) { + return table.columnList.reduce((retObj, column) => { + let fieldName = (table.relation ? table.relation.variableName + '__' : '') + column.columnName; + if (column.primaryKey) { + retObj[column.columnName] = row ? row[fieldName] : undefined; + } + return retObj; + }, {}); + } + + return null; + }, + buildSubFormParams (operation, subFormInfo, row) { + let subFormMasterTable = this.tableMap.get(subFormInfo.masterTableId); + if (subFormMasterTable == null) return null; + if (subFormMasterTable.relation == null) { + // 下级表单操作的是主表数据的编辑 + if (operation.type === this.SysCustomWidgetOperationType.EDIT) { + return this.getPrimaryKeyColumnParam(this.masterTable, row); + } else { + return null; + } + } else { + // 下级表单操作的是从表 + if (subFormInfo.formType === this.SysOnlineFormType.QUERY) { + // 从表的查询页面,参数为主表主键 + return this.getPrimaryKeyColumnParam(this.masterTable, row); + } else { + if (operation.type === this.SysCustomWidgetOperationType.EDIT) { + // 从表的编辑页面 + if (this.formConfig.formType === this.SysOnlineFormType.FORM && + Number.parseInt(this.operationType) === this.SysCustomWidgetOperationType.ADD) { + return { + ...row + } + } else { + return this.getPrimaryKeyColumnParam(subFormMasterTable, row); + } + } else { + // 从表的添加页面 + return { + ...this.params + } + } + } + } + }, + handlerOperation (operation, row, widget) { + if (this.preview()) return; + if (operation.formId != null) { + OnlineFormController.view(this, { + formId: operation.formId + }).then(res => { + let formInfo = res.data; + if (formInfo != null) { + let params = this.buildSubFormParams(operation, formInfo, row); + if (formInfo.formKind === this.SysOnlineFormKind.DIALOG) { + let formJsonData = JSON.parse(formInfo.widgetJson); + let area = (formInfo.height != null) ? [(formJsonData.formConfig.width || 800) + 'px', formJsonData.formConfig.height + 'px'] : (formJsonData.formConfig.width || 800) + 'px'; + this.$dialog.show(operation.name, OnlineForm, { + area: area, + offset: '100px' + }, { + flowData: this.flowData, + formId: formInfo.formId, + formType: formInfo.formType, + operationType: operation.type, + params, + saveOnClose: ( + formInfo.formType === this.SysOnlineFormType.FLOW || this.formConfig.formType === this.SysOnlineFormType.FLOW || + ( + formInfo.formType === this.SysOnlineFormType.FORM && + Number.parseInt(this.operationType) === this.SysCustomWidgetOperationType.ADD + ) + ) ? '0' : '1', + rowData: row + }).then(res => { + let widgetObj = this.$refs[widget.variableName]; + if (Array.isArray(widgetObj)) { + widgetObj.forEach(item => { + item.refresh(res, operation.type); + }); + } else { + widgetObj.refresh(res, operation.type); + } + }).catch(e => { + }); + } else { + if (this.formConfig.formType === this.SysOnlineFormType.QUERY) { + let tableWidget = this.$refs[this.formConfig.formQueryTable.variableName].getTableWidget(); + this.addOnlineFormCache({ + key: this.$route.fullPath, + value: { + formFilter: { ...this.formData.formFilter }, + formFilterCopy: { ...this.formData.formFilterCopy }, + tableImpl: { + totalCount: tableWidget.totalCount, + currentPage: tableWidget.currentPage, + pageSize: tableWidget.pageSize + } + } + }); + } + this.$router.push({ + name: 'onlineForm', + query: { + flowData: this.flowData, + formId: formInfo.formId, + formType: formInfo.formType, + closeVisible: '1', + operationType: operation.type, + params, + saveOnClose: ( + formInfo.formType === this.SysOnlineFormType.FLOW || this.formConfig.formType === this.SysOnlineFormType.FLOW || + ( + formInfo.formType === this.SysOnlineFormType.FORM && + Number.parseInt(this.operationType) === this.SysCustomWidgetOperationType.ADD + ) + ) ? '0' : '1', + rowData: row + } + }) + } + } + }).catch(e => {}); + } else { + if (operation.type === this.SysCustomWidgetOperationType.DELETE) { + this.$confirm('是否删除当前数据?').then(res => { + if (this.formConfig.formType !== this.SysOnlineFormType.FLOW && + (this.formConfig.formType !== this.SysOnlineFormType.FORM || Number.parseInt(this.operationType) !== this.SysCustomWidgetOperationType.ADD)) { + let params = { + datasourceId: (widget.table.datasource || {}).datasourceId, + relationId: (widget.table.relation || {}).relationId + } + for (let i = 0; i < widget.table.columnList.length; i++) { + let column = widget.table.columnList[i]; + if (column.primaryKey) { + let fieldName = (widget.table.relation ? widget.table.relation.variableName + '__' : '') + column.columnName; + params.dataId = row[fieldName]; + break; + } + } + let httpCall = null; + if (params.relationId) { + httpCall = this.doUrl('/admin/online/onlineOperation/deleteOneToManyRelation/' + widget.datasource.variableName, 'post', params); + } else { + httpCall = this.doUrl('/admin/online/onlineOperation/deleteDatasource/' + widget.datasource.variableName, 'post', params); + } + + httpCall.then(res => { + this.$message.success('删除成功!'); + let widgetObj = this.$refs[widget.variableName]; + if (Array.isArray(widgetObj)) { + widgetObj.forEach(item => { + item.refresh(res, operation.type); + }); + } else { + widgetObj.refresh(res, operation.type); + } + }).catch(e => { + }); + } else { + let widgetObj = this.$refs[widget.variableName]; + if (Array.isArray(widgetObj)) { + widgetObj.forEach(item => { + item.refresh(row, operation.type); + }); + } else { + widgetObj.refresh(row, operation.type); + } + } + }).catch(e => {}); + } else if (operation.type === this.SysCustomWidgetOperationType.EXPORT) { + this.$message.warning('导出操作尚未支持!'); + } + } + }, + getRelationTableData (tableWidget) { + if (tableWidget.widgetType === this.SysCustomWidgetType.Table) { + let table = tableWidget.table; + let temp = this.$refs[tableWidget.variableName]; + if (table != null && table.relation != null && Array.isArray(table.columnList) && temp != null) { + let tableWidgetImpl = temp[0] || temp; + return tableWidgetImpl.getTableWidget().dataList.map(data => { + return table.columnList.reduce((retObj, column) => { + let fieldName = (table.relation ? table.relation.variableName + '__' : '') + column.columnName; + retObj[column.columnName] = data[fieldName]; + return retObj + }, {}); + }); + } + } + return null; + }, + getWidgetPrimaryColumnId (widget) { + console.log(widget); + let columnList = null; + if (widget.relationId == null) { + columnList = widget.datasource.masterTable.columnList; + } else { + columnList = widget.relation.slaveTable.columnList; + } + + if (Array.isArray(columnList)) { + for (let i = 0; i < columnList.length; i++) { + let column = columnList[i]; + if (column.primaryKey) { + let columnName = column.columnName; + if (widget.relation != null) columnName = widget.relation.variableName + '__' + columnName; + console.log(this.formData, columnName); + return this.formData[columnName]; + } + } + } + }, + ...mapMutations(['addOnlineFormCache']) + }, + created () { + this.reload(); + }, + destoryed () { + this.clean(); + }, + watch: { + formId: { + handler (newValue) { + this.reload(); + } + } + } +} + +export { + OnlineFormMixins +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineQueryForm.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineQueryForm.vue new file mode 100644 index 00000000..bd89eab1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineQueryForm.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineWorkOrder.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineWorkOrder.vue new file mode 100644 index 00000000..05dc579d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/onlineWorkOrder.vue @@ -0,0 +1,293 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/workflowForm.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/workflowForm.vue new file mode 100644 index 00000000..6625f586 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/formRender/workflowForm.vue @@ -0,0 +1,250 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/index.vue new file mode 100644 index 00000000..a4e35c41 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/index.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/utils/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/utils/index.js new file mode 100644 index 00000000..58a197cb --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/utils/index.js @@ -0,0 +1,105 @@ +import * as StaticDict from '@/staticDict'; +import { SysOnlineDictType, SysCustomWidgetOperationType } from '@/staticDict/onlineStaticDict.js'; +import { OnlineOperation } from '@/api/onlineController.js'; +import ajax from '@/core/http/index.js'; + +function getTableDictData (sender, dictId, dictParams) { + return new Promise((resolve, reject) => { + let filterDtoList = Object.keys(dictParams).map(key => { + return { + columnName: key, + columnValue: dictParams[key] + } + }); + let params = { + dictId: dictId, + filterDtoList: filterDtoList + } + OnlineOperation.listDict(sender, params).then(res => { + resolve(res.data); + }).catch(e => { + reject(e); + }); + }); +} + +function getDictDataByUrl (url, params, dictInfo, methods = 'get') { + return new Promise((resolve, reject) => { + ajax.doUrl(url, methods, params).then(res => { + if (Array.isArray(res.data)) { + resolve(res.data.map(item => { + return { + id: item[dictInfo.keyColumnName], + name: item[dictInfo.valueColumnName], + parentId: item[dictInfo.parentKeyColumnName] + } + })); + } else { + reject(); + } + }).catch(e => { + reject(e); + }); + }); +} + +function getUrlDictData (dictInfo, dictParams) { + let url = dictInfo.dictListUrl; + if (url != null && url !== '') { + return getDictDataByUrl(url, dictParams, dictInfo, 'get'); + } else { + console.error('字典 [' + dictInfo.dictName + '] url为空'); + return Promise.reject(); + } +} + +/** + * 获取字典数据 + * @param {*} dictInfo 字典配置对象 + * @param {*} params 获取字典时传入的参数,仅对于数据表字典和URL字典有效 + * @returns 字典数据 + */ +function getDictDataList (sender, dictInfo, dictParams) { + let dictData = JSON.parse(dictInfo.dictDataJson); + switch (dictInfo.dictType) { + case SysOnlineDictType.TABLE: + return getTableDictData(sender, dictInfo.dictId, dictParams); + case SysOnlineDictType.URL: + return getUrlDictData(dictInfo, dictParams); + case SysOnlineDictType.CUSTOM: + if (dictData != null && Array.isArray(dictData.dictData)) { + return Promise.resolve(dictData.dictData); + } else { + return Promise.reject(new Error('获取自定义字典数据错误!')); + } + case SysOnlineDictType.STATIC: + if (dictData != null && dictData.staticDictName != null && StaticDict[dictData.staticDictName] != null) { + return Promise.resolve(StaticDict[dictData.staticDictName].getList()); + } else { + return Promise.reject(new Error('未知的静态字典!')); + } + default: + return Promise.reject(new Error('未知的字典类型!')); + } +} + +function getOperationPermCode (widget, operation) { + let datasourceVariableName = (widget.datasource || {}).variableName; + let temp = 'view'; + switch (operation.type) { + case SysCustomWidgetOperationType.ADD: + case SysCustomWidgetOperationType.EDIT: + case SysCustomWidgetOperationType.DELETE: + temp = 'edit'; + break; + default: + temp = 'view'; + } + return 'online:' + datasourceVariableName + ':' + temp; +} + +export { + getDictDataList, + getDictDataByUrl, + getOperationPermCode +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formDictManagement/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formDictManagement/index.vue new file mode 100644 index 00000000..3d0c41f0 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formDictManagement/index.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditDict/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditDict/index.vue new file mode 100644 index 00000000..c290cdd2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditDict/index.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysDataPerm/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysDataPerm/index.vue new file mode 100644 index 00000000..9bfc6079 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysDataPerm/index.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysDept/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysDept/index.vue new file mode 100644 index 00000000..7cc506f5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysDept/index.vue @@ -0,0 +1,201 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysMenu/editColumn.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysMenu/editColumn.vue new file mode 100644 index 00000000..9cccb196 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysMenu/editColumn.vue @@ -0,0 +1,108 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysMenu/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysMenu/index.vue new file mode 100644 index 00000000..c1b7897d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysMenu/index.vue @@ -0,0 +1,400 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPerm/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPerm/index.vue new file mode 100644 index 00000000..85774d38 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPerm/index.vue @@ -0,0 +1,168 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPermCode/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPermCode/index.vue new file mode 100644 index 00000000..863ea1a7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPermCode/index.vue @@ -0,0 +1,221 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPermModule/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPermModule/index.vue new file mode 100644 index 00000000..e7f03829 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPermModule/index.vue @@ -0,0 +1,184 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPost/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPost/index.vue new file mode 100644 index 00000000..e9b24f75 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysPost/index.vue @@ -0,0 +1,198 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysRole/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysRole/index.vue new file mode 100644 index 00000000..9b63ec2c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysRole/index.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysUser/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysUser/index.vue new file mode 100644 index 00000000..226349e3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formEditSysUser/index.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formMenuPerm/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formMenuPerm/index.vue new file mode 100644 index 00000000..cb9bf241 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formMenuPerm/index.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSetRoleUsers/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSetRoleUsers/index.vue new file mode 100644 index 00000000..055f2e02 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSetRoleUsers/index.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSetSysDataPermUser/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSetSysDataPermUser/index.vue new file mode 100644 index 00000000..04b5712a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSetSysDataPermUser/index.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDataPerm/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDataPerm/index.vue new file mode 100644 index 00000000..2bc0a993 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDataPerm/index.vue @@ -0,0 +1,479 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDept/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDept/index.vue new file mode 100644 index 00000000..f9b208ce --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDept/index.vue @@ -0,0 +1,193 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDeptPost/formSetDeptPost.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDeptPost/formSetDeptPost.vue new file mode 100644 index 00000000..f57989e6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDeptPost/formSetDeptPost.vue @@ -0,0 +1,185 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDeptPost/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDeptPost/index.vue new file mode 100644 index 00000000..2321ccf6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysDeptPost/index.vue @@ -0,0 +1,255 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysLoginUser/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysLoginUser/index.vue new file mode 100644 index 00000000..61d66509 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysLoginUser/index.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysMenu/formSysColumnMenu.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysMenu/formSysColumnMenu.vue new file mode 100644 index 00000000..00387f41 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysMenu/formSysColumnMenu.vue @@ -0,0 +1,307 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysMenu/formSysMenuPerm.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysMenu/formSysMenuPerm.vue new file mode 100644 index 00000000..837ba31c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysMenu/formSysMenuPerm.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysMenu/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysMenu/index.vue new file mode 100644 index 00000000..bdd408fa --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysMenu/index.vue @@ -0,0 +1,241 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPerm/formSysPermDetail.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPerm/formSysPermDetail.vue new file mode 100644 index 00000000..32559c93 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPerm/formSysPermDetail.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPerm/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPerm/index.vue new file mode 100644 index 00000000..ff8503eb --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPerm/index.vue @@ -0,0 +1,407 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPermCode/formSysPermCodeDetail.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPermCode/formSysPermCodeDetail.vue new file mode 100644 index 00000000..a2ab35c5 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPermCode/formSysPermCodeDetail.vue @@ -0,0 +1,253 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPermCode/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPermCode/index.vue new file mode 100644 index 00000000..bf516bc3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPermCode/index.vue @@ -0,0 +1,270 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPost/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPost/index.vue new file mode 100644 index 00000000..65f40e34 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysPost/index.vue @@ -0,0 +1,200 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysRole/formSysRolePerm.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysRole/formSysRolePerm.vue new file mode 100644 index 00000000..4ed4a721 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysRole/formSysRolePerm.vue @@ -0,0 +1,254 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysRole/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysRole/index.vue new file mode 100644 index 00000000..cd92fb54 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysRole/index.vue @@ -0,0 +1,473 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysUser/formSysUserPerm.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysUser/formSysUserPerm.vue new file mode 100644 index 00000000..6dc458ba --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysUser/formSysUserPerm.vue @@ -0,0 +1,335 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysUser/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysUser/index.vue new file mode 100644 index 00000000..1da71e6a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/upms/formSysUser/index.vue @@ -0,0 +1,282 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/welcome/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/welcome/index.vue new file mode 100644 index 00000000..f3b36326 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/welcome/index.vue @@ -0,0 +1,156 @@ + + + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/HandlerFlowTask.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/HandlerFlowTask.vue new file mode 100644 index 00000000..c1fe7b32 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/HandlerFlowTask.vue @@ -0,0 +1,244 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/ProcessDesigner.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/ProcessDesigner.vue new file mode 100644 index 00000000..ac0ea0f7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/ProcessDesigner.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/ProcessViewer.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/ProcessViewer.vue new file mode 100644 index 00000000..9e6e1550 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/ProcessViewer.vue @@ -0,0 +1,232 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TagSelect.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TagSelect.vue new file mode 100644 index 00000000..611297b7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TagSelect.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskCommit.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskCommit.vue new file mode 100644 index 00000000..7c4d473c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskCommit.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskGroupSelect.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskGroupSelect.vue new file mode 100644 index 00000000..091f0666 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskGroupSelect.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskPostSelect.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskPostSelect.vue new file mode 100644 index 00000000..4a187a73 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskPostSelect.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskUserSelect.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskUserSelect.vue new file mode 100644 index 00000000..6415f2de --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/components/TaskUserSelect.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowCategory/formEditFlowCategory.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowCategory/formEditFlowCategory.vue new file mode 100644 index 00000000..b83a0190 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowCategory/formEditFlowCategory.vue @@ -0,0 +1,207 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowCategory/formFlowCategory.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowCategory/formFlowCategory.vue new file mode 100644 index 00000000..9cd9c291 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowCategory/formFlowCategory.vue @@ -0,0 +1,206 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formEditFlowEntry.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formEditFlowEntry.vue new file mode 100644 index 00000000..c554b8a2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formEditFlowEntry.vue @@ -0,0 +1,574 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formEditFlowEntryVariable.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formEditFlowEntryVariable.vue new file mode 100644 index 00000000..ecf555bf --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formEditFlowEntryVariable.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formFlowEntry.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formFlowEntry.vue new file mode 100644 index 00000000..98294e04 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formFlowEntry.vue @@ -0,0 +1,341 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formPublishedFlowEntry.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formPublishedFlowEntry.vue new file mode 100644 index 00000000..3460b0c6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/flowEntry/formPublishedFlowEntry.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/handlerFlowTask/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/handlerFlowTask/index.vue new file mode 100644 index 00000000..4b3b6733 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/handlerFlowTask/index.vue @@ -0,0 +1,316 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/mixins/flowMixins.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/mixins/flowMixins.js new file mode 100644 index 00000000..3a15ebaa --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/mixins/flowMixins.js @@ -0,0 +1,79 @@ +import { cachedPageChildMixin } from '@/core/mixins'; +import TaskCommit from '@/views/workflow/components/TaskCommit.vue'; +import { FlowOperationController } from '@/api/flowController.js'; + +export default { + mixins: [cachedPageChildMixin], + methods: { + // 加签 + submitConsign (assignee) { + return new Promise((resolve, reject) => { + let params = { + taskId: this.taskId, + processInstanceId: this.processInstanceId, + newAssignees: assignee.split(',') + } + + FlowOperationController.submitConsign(this, params).then(res => { + this.$message.success('加签成功!'); + resolve(); + }).catch(e => { + reject(); + }); + }); + }, + // 关闭流程处理 + handlerClose (isDialog = false) { + if (isDialog) { + if (this.observer != null) { + this.observer.cancel(true); + } + } else { + this.refreshParentCachedPage = true; + this.$router.go(-1); + } + }, + // 获取表单数据 + async getMasterData () { + return Promise.resolve(); + }, + // 初始化表单数据 + initFormData () { + return new Promise((resolve, reject) => { + this.$message.error('初始化流程表单数据接口并未实现,请联系管理员!'); + }); + }, + // 预处理工作流操作 + preHandlerOperation (operation, isStart) { + return new Promise((resolve, reject) => { + if (operation == null) { + isStart ? resolve() : reject(); + return; + } + // 会签或者审批操作 + if (!isStart || operation.type === this.SysFlowTaskOperationType.MULTI_SIGN) { + let title = isStart ? '提交' : (operation.type === this.SysFlowTaskOperationType.CO_SIGN ? '加签' : '审批'); + this.$dialog.show(title, TaskCommit, { + area: '500px' + }, { + operation + }).then(res => { + resolve(res); + }).catch(e => { + reject(e); + }); + } else { + resolve(); + } + }); + }, + // 启动流程 + handlerStart (operation) { + this.$message.error('当前流程并未实现启动功能,请联系管理员!'); + }, + // 流程处理操作 + handlerOperation (operation) { + this.$message.error('当前流程并未实现处理功能,请联系管理员!'); + } + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/highlight/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/highlight/index.js new file mode 100644 index 00000000..bff9211b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/highlight/index.js @@ -0,0 +1,5 @@ +const hljs = require("highlight.js/lib/core"); +hljs.registerLanguage("xml", require("highlight.js/lib/languages/xml")); +hljs.registerLanguage("json", require("highlight.js/lib/languages/json")); + +module.exports = hljs; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/index.js new file mode 100644 index 00000000..0399b3be --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/index.js @@ -0,0 +1,7 @@ +import MyProcessDesigner from "./process-designer"; +import MyProcessPenal from "./refactor"; + +export { + MyProcessDesigner, + MyProcessPenal +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/ProcessDesigner.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/ProcessDesigner.vue new file mode 100644 index 00000000..26a3bec7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/ProcessDesigner.vue @@ -0,0 +1,460 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/index.js new file mode 100644 index 00000000..028fe054 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/index.js @@ -0,0 +1,7 @@ +import MyProcessDesigner from "./ProcessDesigner.vue"; + +MyProcessDesigner.install = function(Vue) { + Vue.component(MyProcessDesigner.name, MyProcessDesigner); +}; + +export default MyProcessDesigner; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/content-pad/contentPadProvider.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/content-pad/contentPadProvider.js new file mode 100644 index 00000000..447a99b3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/content-pad/contentPadProvider.js @@ -0,0 +1,390 @@ +import { assign, forEach, isArray } from "min-dash"; + +import { is } from "bpmn-js/lib/util/ModelUtil"; + +import { isExpanded, isEventSubProcess } from "bpmn-js/lib/util/DiUtil"; + +import { isAny } from "bpmn-js/lib/features/modeling/util/ModelingUtil"; + +import { getChildLanes } from "bpmn-js/lib/features/modeling/util/LaneUtil"; + +import { hasPrimaryModifier } from "diagram-js/lib/util/Mouse"; + +/** + * A provider for BPMN 2.0 elements context pad + */ +export default function ContextPadProvider( + config, + injector, + eventBus, + contextPad, + modeling, + elementFactory, + connect, + create, + popupMenu, + canvas, + rules, + translate, + elementRegistry +) { + config = config || {}; + + contextPad.registerProvider(this); + + this._contextPad = contextPad; + + this._modeling = modeling; + + this._elementFactory = elementFactory; + this._connect = connect; + this._create = create; + this._popupMenu = popupMenu; + this._canvas = canvas; + this._rules = rules; + this._translate = translate; + + if (config.autoPlace !== false) { + this._autoPlace = injector.get("autoPlace", false); + } + + eventBus.on("create.end", 250, function(event) { + var context = event.context, + shape = context.shape; + + if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) { + return; + } + + var entries = contextPad.getEntries(shape); + + if (entries.replace) { + entries.replace.action.click(event, shape); + } + }); +} + +ContextPadProvider.$inject = [ + "config.contextPad", + "injector", + "eventBus", + "contextPad", + "modeling", + "elementFactory", + "connect", + "create", + "popupMenu", + "canvas", + "rules", + "translate", + "elementRegistry" +]; + +ContextPadProvider.prototype.getContextPadEntries = function(element) { + var contextPad = this._contextPad, + modeling = this._modeling, + elementFactory = this._elementFactory, + connect = this._connect, + create = this._create, + popupMenu = this._popupMenu, + canvas = this._canvas, + rules = this._rules, + autoPlace = this._autoPlace, + translate = this._translate; + + var actions = {}; + + if (element.type === "label") { + return actions; + } + + var businessObject = element.businessObject; + + function startConnect(event, element) { + connect.start(event, element); + } + + function removeElement() { + modeling.removeElements([element]); + } + + function getReplaceMenuPosition(element) { + var Y_OFFSET = 5; + + var diagramContainer = canvas.getContainer(), + pad = contextPad.getPad(element).html; + + var diagramRect = diagramContainer.getBoundingClientRect(), + padRect = pad.getBoundingClientRect(); + + var top = padRect.top - diagramRect.top; + var left = padRect.left - diagramRect.left; + + var pos = { + x: left, + y: top + padRect.height + Y_OFFSET + }; + + return pos; + } + + /** + * Create an append action + * + * @param {string} type + * @param {string} className + * @param {string} [title] + * @param {Object} [options] + * + * @return {Object} descriptor + */ + function appendAction(type, className, title, options) { + if (typeof title !== "string") { + options = title; + title = translate("Append {type}", { type: type.replace(/^bpmn:/, "") }); + } + + function appendStart(event, element) { + var shape = elementFactory.createShape(assign({ type: type }, options)); + create.start(event, shape, { + source: element + }); + } + + var append = autoPlace + ? function(event, element) { + var shape = elementFactory.createShape(assign({ type: type }, options)); + + autoPlace.append(element, shape); + } + : appendStart; + + return { + group: "model", + className: className, + title: title, + action: { + dragstart: appendStart, + click: append + } + }; + } + + function splitLaneHandler(count) { + return function(event, element) { + // actual split + modeling.splitLane(element, count); + + // refresh context pad after split to + // get rid of split icons + contextPad.open(element, true); + }; + } + + if (isAny(businessObject, ["bpmn:Lane", "bpmn:Participant"]) && isExpanded(businessObject)) { + var childLanes = getChildLanes(element); + + assign(actions, { + "lane-insert-above": { + group: "lane-insert-above", + className: "bpmn-icon-lane-insert-above", + title: translate("Add Lane above"), + action: { + click: function(event, element) { + modeling.addLane(element, "top"); + } + } + } + }); + + if (childLanes.length < 2) { + if (element.height >= 120) { + assign(actions, { + "lane-divide-two": { + group: "lane-divide", + className: "bpmn-icon-lane-divide-two", + title: translate("Divide into two Lanes"), + action: { + click: splitLaneHandler(2) + } + } + }); + } + + if (element.height >= 180) { + assign(actions, { + "lane-divide-three": { + group: "lane-divide", + className: "bpmn-icon-lane-divide-three", + title: translate("Divide into three Lanes"), + action: { + click: splitLaneHandler(3) + } + } + }); + } + } + + assign(actions, { + "lane-insert-below": { + group: "lane-insert-below", + className: "bpmn-icon-lane-insert-below", + title: translate("Add Lane below"), + action: { + click: function(event, element) { + modeling.addLane(element, "bottom"); + } + } + } + }); + } + + if (is(businessObject, "bpmn:FlowNode")) { + if (is(businessObject, "bpmn:EventBasedGateway")) { + assign(actions, { + "append.receive-task": appendAction("bpmn:ReceiveTask", "bpmn-icon-receive-task", translate("Append ReceiveTask")), + "append.message-intermediate-event": appendAction( + "bpmn:IntermediateCatchEvent", + "bpmn-icon-intermediate-event-catch-message", + translate("Append MessageIntermediateCatchEvent"), + { eventDefinitionType: "bpmn:MessageEventDefinition" } + ), + "append.timer-intermediate-event": appendAction( + "bpmn:IntermediateCatchEvent", + "bpmn-icon-intermediate-event-catch-timer", + translate("Append TimerIntermediateCatchEvent"), + { eventDefinitionType: "bpmn:TimerEventDefinition" } + ), + "append.condition-intermediate-event": appendAction( + "bpmn:IntermediateCatchEvent", + "bpmn-icon-intermediate-event-catch-condition", + translate("Append ConditionIntermediateCatchEvent"), + { eventDefinitionType: "bpmn:ConditionalEventDefinition" } + ), + "append.signal-intermediate-event": appendAction( + "bpmn:IntermediateCatchEvent", + "bpmn-icon-intermediate-event-catch-signal", + translate("Append SignalIntermediateCatchEvent"), + { eventDefinitionType: "bpmn:SignalEventDefinition" } + ) + }); + } else if (isEventType(businessObject, "bpmn:BoundaryEvent", "bpmn:CompensateEventDefinition")) { + assign(actions, { + "append.compensation-activity": appendAction("bpmn:Task", "bpmn-icon-task", translate("Append compensation activity"), { + isForCompensation: true + }) + }); + } else if ( + !is(businessObject, "bpmn:EndEvent") && + !businessObject.isForCompensation && + !isEventType(businessObject, "bpmn:IntermediateThrowEvent", "bpmn:LinkEventDefinition") && + !isEventSubProcess(businessObject) + ) { + assign(actions, { + "append.end-event": appendAction("bpmn:EndEvent", "bpmn-icon-end-event-none", translate("Append EndEvent")), + "append.gateway": appendAction("bpmn:ExclusiveGateway", "bpmn-icon-gateway-none", translate("Append Gateway")), + "append.append-task": appendAction("bpmn:UserTask", "bpmn-icon-user-task", translate("Append Task")), + "append.intermediate-event": appendAction( + "bpmn:IntermediateThrowEvent", + "bpmn-icon-intermediate-event-none", + translate("Append Intermediate/Boundary Event") + ) + }); + } + } + + if (!popupMenu.isEmpty(element, "bpmn-replace")) { + // Replace menu entry + assign(actions, { + replace: { + group: "edit", + className: "bpmn-icon-screw-wrench", + title: translate("Change type"), + action: { + click: function(event, element) { + var position = assign(getReplaceMenuPosition(element), { + cursor: { x: event.x, y: event.y } + }); + + popupMenu.open(element, "bpmn-replace", position); + } + } + } + }); + } + + if (isAny(businessObject, ["bpmn:FlowNode", "bpmn:InteractionNode", "bpmn:DataObjectReference", "bpmn:DataStoreReference"])) { + assign(actions, { + "append.text-annotation": appendAction("bpmn:TextAnnotation", "bpmn-icon-text-annotation"), + + connect: { + group: "connect", + className: "bpmn-icon-connection-multi", + title: translate("Connect using " + (businessObject.isForCompensation ? "" : "Sequence/MessageFlow or ") + "Association"), + action: { + click: startConnect, + dragstart: startConnect + } + } + }); + } + + if (isAny(businessObject, ["bpmn:DataObjectReference", "bpmn:DataStoreReference"])) { + assign(actions, { + connect: { + group: "connect", + className: "bpmn-icon-connection-multi", + title: translate("Connect using DataInputAssociation"), + action: { + click: startConnect, + dragstart: startConnect + } + } + }); + } + + if (is(businessObject, "bpmn:Group")) { + assign(actions, { + "append.text-annotation": appendAction("bpmn:TextAnnotation", "bpmn-icon-text-annotation") + }); + } + + // delete element entry, only show if allowed by rules + var deleteAllowed = rules.allowed("elements.delete", { elements: [element] }); + + if (isArray(deleteAllowed)) { + // was the element returned as a deletion candidate? + deleteAllowed = deleteAllowed[0] === element; + } + + if (deleteAllowed) { + assign(actions, { + delete: { + group: "edit", + className: "bpmn-icon-trash", + title: translate("Remove"), + action: { + click: removeElement + } + } + }); + } + + return actions; +}; + +// helpers ///////// + +function isEventType(eventBo, type, definition) { + var isType = eventBo.$instanceOf(type); + var isDefinition = false; + + var definitions = eventBo.eventDefinitions || []; + forEach(definitions, function(def) { + if (def.$type === definition) { + isDefinition = true; + } + }); + + return isType && isDefinition; +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/content-pad/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/content-pad/index.js new file mode 100644 index 00000000..a9cf887c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/content-pad/index.js @@ -0,0 +1,6 @@ +import CustomContextPadProvider from "./contentPadProvider"; + +export default { + __init__: ["contextPadProvider"], + contextPadProvider: ["type", CustomContextPadProvider] +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/defaultEmpty.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/defaultEmpty.js new file mode 100644 index 00000000..9ec1df12 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/defaultEmpty.js @@ -0,0 +1,27 @@ +export default (key, name, type) => { + if (!type) type = "camunda"; + const TYPE_TARGET = { + activiti: "http://activiti.org/bpmn", + camunda: "http://bpmn.io/schema/bpmn", + flowable: "http://flowable.org/bpmn" + }; + return ` + + + + + + + + + + `; +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/descriptor/activitiDescriptor.json b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/descriptor/activitiDescriptor.json new file mode 100644 index 00000000..dfdef85d --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/descriptor/activitiDescriptor.json @@ -0,0 +1,1210 @@ +{ + "name": "Activiti", + "uri": "http://activiti.org/bpmn", + "prefix": "activiti", + "xml": { + "tagAlias": "lowerCase" + }, + "associations": [], + "types": [ + { + "name": "Definitions", + "isAbstract": true, + "extends": [ + "bpmn:Definitions" + ], + "properties": [ + { + "name": "diagramRelationId", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "InOutBinding", + "superClass": [ + "Element" + ], + "isAbstract": true, + "properties": [ + { + "name": "source", + "isAttr": true, + "type": "String" + }, + { + "name": "sourceExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "target", + "isAttr": true, + "type": "String" + }, + { + "name": "businessKey", + "isAttr": true, + "type": "String" + }, + { + "name": "local", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "variables", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "In", + "superClass": [ + "InOutBinding" + ], + "meta": { + "allowedIn": [ + "bpmn:CallActivity" + ] + } + }, + { + "name": "Out", + "superClass": [ + "InOutBinding" + ], + "meta": { + "allowedIn": [ + "bpmn:CallActivity" + ] + } + }, + { + "name": "AsyncCapable", + "isAbstract": true, + "extends": [ + "bpmn:Activity", + "bpmn:Gateway", + "bpmn:Event" + ], + "properties": [ + { + "name": "async", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "asyncBefore", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "asyncAfter", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "exclusive", + "isAttr": true, + "type": "Boolean", + "default": true + } + ] + }, + { + "name": "JobPriorized", + "isAbstract": true, + "extends": [ + "bpmn:Process", + "activiti:AsyncCapable" + ], + "properties": [ + { + "name": "jobPriority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "SignalEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:SignalEventDefinition" + ], + "properties": [ + { + "name": "async", + "isAttr": true, + "type": "Boolean", + "default": false + } + ] + }, + { + "name": "ErrorEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:ErrorEventDefinition" + ], + "properties": [ + { + "name": "errorCodeVariable", + "isAttr": true, + "type": "String" + }, + { + "name": "errorMessageVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Error", + "isAbstract": true, + "extends": [ + "bpmn:Error" + ], + "properties": [ + { + "name": "activiti:errorMessage", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "PotentialStarter", + "superClass": [ + "Element" + ], + "properties": [ + { + "name": "resourceAssignmentExpression", + "type": "bpmn:ResourceAssignmentExpression" + } + ] + }, + { + "name": "FormSupported", + "isAbstract": true, + "extends": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ], + "properties": [ + { + "name": "formHandlerClass", + "isAttr": true, + "type": "String" + }, + { + "name": "formKey", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "TemplateSupported", + "isAbstract": true, + "extends": [ + "bpmn:Process", + "bpmn:FlowElement" + ], + "properties": [ + { + "name": "modelerTemplate", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Initiator", + "isAbstract": true, + "extends": [ "bpmn:StartEvent" ], + "properties": [ + { + "name": "initiator", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ScriptTask", + "isAbstract": true, + "extends": [ + "bpmn:ScriptTask" + ], + "properties": [ + { + "name": "resultVariable", + "isAttr": true, + "type": "String" + }, + { + "name": "resource", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Process", + "isAbstract": true, + "extends": [ + "bpmn:Process" + ], + "properties": [ + { + "name": "candidateStarterGroups", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateStarterUsers", + "isAttr": true, + "type": "String" + }, + { + "name": "versionTag", + "isAttr": true, + "type": "String" + }, + { + "name": "historyTimeToLive", + "isAttr": true, + "type": "String" + }, + { + "name": "isStartableInTasklist", + "isAttr": true, + "type": "Boolean", + "default": true + }, + { + "name":"executionListener", + "isAbstract": true, + "type":"Expression" + } + ] + }, + { + "name": "EscalationEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:EscalationEventDefinition" + ], + "properties": [ + { + "name": "escalationCodeVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "FormalExpression", + "isAbstract": true, + "extends": [ + "bpmn:FormalExpression" + ], + "properties": [ + { + "name": "resource", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "multiinstance_type", + "superClass":[ + "Element" + ] + }, + { + "name": "multiinstance_condition", + "superClass":[ + "Element" + ] + }, + { + "name": "Assignable", + "extends": [ "bpmn:UserTask" ], + "properties": [ + { + "name": "assignee", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateUsers", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateGroups", + "isAttr": true, + "type": "String" + }, + { + "name": "dueDate", + "isAttr": true, + "type": "String" + }, + { + "name": "followUpDate", + "isAttr": true, + "type": "String" + }, + { + "name": "priority", + "isAttr": true, + "type": "String" + }, + { + "name": "multiinstance_condition", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "CallActivity", + "extends": [ "bpmn:CallActivity" ], + "properties": [ + { + "name": "calledElementBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "calledElementVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "calledElementVersionTag", + "isAttr": true, + "type": "String" + }, + { + "name": "calledElementTenantId", + "isAttr": true, + "type": "String" + }, + { + "name": "caseRef", + "isAttr": true, + "type": "String" + }, + { + "name": "caseBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "caseVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "caseTenantId", + "isAttr": true, + "type": "String" + }, + { + "name": "variableMappingClass", + "isAttr": true, + "type": "String" + }, + { + "name": "variableMappingDelegateExpression", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ServiceTaskLike", + "extends": [ + "bpmn:ServiceTask", + "bpmn:BusinessRuleTask", + "bpmn:SendTask", + "bpmn:MessageEventDefinition" + ], + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "resultVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "DmnCapable", + "extends": [ + "bpmn:BusinessRuleTask" + ], + "properties": [ + { + "name": "decisionRef", + "isAttr": true, + "type": "String" + }, + { + "name": "decisionRefBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "decisionRefVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "mapDecisionResult", + "isAttr": true, + "type": "String", + "default": "resultList" + }, + { + "name": "decisionRefTenantId", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ExternalCapable", + "extends": [ + "activiti:ServiceTaskLike" + ], + "properties": [ + { + "name": "type", + "isAttr": true, + "type": "String" + }, + { + "name": "topic", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "TaskPriorized", + "extends": [ + "bpmn:Process", + "activiti:ExternalCapable" + ], + "properties": [ + { + "name": "taskPriority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Properties", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ "*" ] + }, + "properties": [ + { + "name": "values", + "type": "Property", + "isMany": true + } + ] + }, + { + "name": "Property", + "superClass": [ + "Element" + ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "value", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "Connector", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ + "activiti:ServiceTaskLike" + ] + }, + "properties": [ + { + "name": "inputOutput", + "type": "InputOutput" + }, + { + "name": "connectorId", + "type": "String" + } + ] + }, + { + "name": "InputOutput", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ + "bpmn:FlowNode", + "activiti:Connector" + ] + }, + "properties": [ + { + "name": "inputOutput", + "type": "InputOutput" + }, + { + "name": "connectorId", + "type": "String" + }, + { + "name": "inputParameters", + "isMany": true, + "type": "InputParameter" + }, + { + "name": "outputParameters", + "isMany": true, + "type": "OutputParameter" + } + ] + }, + { + "name": "InputOutputParameter", + "properties": [ + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + }, + { + "name": "definition", + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "InputOutputParameterDefinition", + "isAbstract": true + }, + { + "name": "List", + "superClass": [ "InputOutputParameterDefinition" ], + "properties": [ + { + "name": "items", + "isMany": true, + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "Map", + "superClass": [ "InputOutputParameterDefinition" ], + "properties": [ + { + "name": "entries", + "isMany": true, + "type": "Entry" + } + ] + }, + { + "name": "Entry", + "properties": [ + { + "name": "key", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + }, + { + "name": "definition", + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "Value", + "superClass": [ + "InputOutputParameterDefinition" + ], + "properties": [ + { + "name": "id", + "isAttr": true, + "type": "String" + }, + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "Script", + "superClass": [ "InputOutputParameterDefinition" ], + "properties": [ + { + "name": "scriptFormat", + "isAttr": true, + "type": "String" + }, + { + "name": "resource", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "Field", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "activiti:ServiceTaskLike", + "activiti:ExecutionListener", + "activiti:TaskListener" + ] + }, + "properties": [ + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "expression", + "type": "String" + }, + { + "name": "stringValue", + "isAttr": true, + "type": "String" + }, + { + "name": "string", + "type": "String" + } + ] + }, + { + "name": "InputParameter", + "superClass": [ "InputOutputParameter" ] + }, + { + "name": "OutputParameter", + "superClass": [ "InputOutputParameter" ] + }, + { + "name": "Collectable", + "isAbstract": true, + "extends": [ "bpmn:MultiInstanceLoopCharacteristics" ], + "superClass": [ "activiti:AsyncCapable" ], + "properties": [ + { + "name": "collection", + "isAttr": true, + "type": "String" + }, + { + "name": "elementVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "FailedJobRetryTimeCycle", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "activiti:AsyncCapable", + "bpmn:MultiInstanceLoopCharacteristics" + ] + }, + "properties": [ + { + "name": "body", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "ExecutionListener", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:Task", + "bpmn:ServiceTask", + "bpmn:UserTask", + "bpmn:BusinessRuleTask", + "bpmn:ScriptTask", + "bpmn:ReceiveTask", + "bpmn:ManualTask", + "bpmn:ExclusiveGateway", + "bpmn:SequenceFlow", + "bpmn:ParallelGateway", + "bpmn:InclusiveGateway", + "bpmn:EventBasedGateway", + "bpmn:StartEvent", + "bpmn:IntermediateCatchEvent", + "bpmn:IntermediateThrowEvent", + "bpmn:EndEvent", + "bpmn:BoundaryEvent", + "bpmn:CallActivity", + "bpmn:SubProcess", + "bpmn:Process" + ] + }, + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "event", + "isAttr": true, + "type": "String" + }, + { + "name": "script", + "type": "Script" + }, + { + "name": "fields", + "type": "Field", + "isMany": true + } + ] + }, + { + "name": "TaskListener", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "event", + "isAttr": true, + "type": "String" + }, + { + "name": "script", + "type": "Script" + }, + { + "name": "fields", + "type": "Field", + "isMany": true + } + ] + }, + { + "name": "FormProperty", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "required", + "type": "String", + "isAttr": true + }, + { + "name": "readable", + "type": "String", + "isAttr": true + }, + { + "name": "writable", + "type": "String", + "isAttr": true + }, + { + "name": "variable", + "type": "String", + "isAttr": true + }, + { + "name": "expression", + "type": "String", + "isAttr": true + }, + { + "name": "datePattern", + "type": "String", + "isAttr": true + }, + { + "name": "default", + "type": "String", + "isAttr": true + }, + { + "name": "values", + "type": "Value", + "isMany": true + } + ] + }, + { + "name": "FormProperty", + "superClass": [ "Element" ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "label", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "datePattern", + "type": "String", + "isAttr": true + }, + { + "name": "defaultValue", + "type": "String", + "isAttr": true + }, + { + "name": "properties", + "type": "Properties" + }, + { + "name": "validation", + "type": "Validation" + }, + { + "name": "values", + "type": "Value", + "isMany": true + } + ] + }, + { + "name": "Validation", + "superClass": [ "Element" ], + "properties": [ + { + "name": "constraints", + "type": "Constraint", + "isMany": true + } + ] + }, + { + "name": "Constraint", + "superClass": [ "Element" ], + "properties": [ + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "config", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "ExtensionElements", + "properties": [ + { + "name": "operationList", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "OperationList", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "operationList", + "type": "FormOperation", + "isMany": true + } + ] + }, + { + "name": "FormOperation", + "superClass": [ "Element" ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "label", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "showOrder", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "VariableList", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "variableList", + "type": "FormVariable", + "isMany": true + } + ] + }, + { + "name": "FormVariable", + "superClass": [ "Element" ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "CustomCondition", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:SequenceFlow" + ] + }, + "properties": [ + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "operationType", + "type": "String", + "isAttr": true + }, + { + "name": "parallelRefuse", + "type": "Boolean", + "isAttr": true, + "default": false + } + ] + }, + { + "name": "AssigneeList", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "assigneeList", + "type": "Assignee", + "isMany": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "Assignee", + "superClass": [ "Element" ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "ConditionalEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:ConditionalEventDefinition" + ], + "properties": [ + { + "name": "variableName", + "isAttr": true, + "type": "String" + }, + { + "name": "variableEvent", + "isAttr": true, + "type": "String" + } + ] + } + ], + "emumerations": [ ] +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/descriptor/camundaDescriptor.json b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/descriptor/camundaDescriptor.json new file mode 100644 index 00000000..a57dbe63 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/descriptor/camundaDescriptor.json @@ -0,0 +1,1087 @@ +{ + "name": "Camunda", + "uri": "http://camunda.org/schema/1.0/bpmn", + "prefix": "camunda", + "xml": { + "tagAlias": "lowerCase" + }, + "associations": [], + "types": [ + { + "name": "Definitions", + "isAbstract": true, + "extends": [ + "bpmn:Definitions" + ], + "properties": [ + { + "name": "diagramRelationId", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "InOutBinding", + "superClass": [ + "Element" + ], + "isAbstract": true, + "properties": [ + { + "name": "source", + "isAttr": true, + "type": "String" + }, + { + "name": "sourceExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "target", + "isAttr": true, + "type": "String" + }, + { + "name": "businessKey", + "isAttr": true, + "type": "String" + }, + { + "name": "local", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "variables", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "In", + "superClass": [ + "InOutBinding" + ], + "meta": { + "allowedIn": [ + "bpmn:CallActivity", + "bpmn:SignalEventDefinition" + ] + } + }, + { + "name": "Out", + "superClass": [ + "InOutBinding" + ], + "meta": { + "allowedIn": [ + "bpmn:CallActivity" + ] + } + }, + { + "name": "AsyncCapable", + "isAbstract": true, + "extends": [ + "bpmn:Activity", + "bpmn:Gateway", + "bpmn:Event" + ], + "properties": [ + { + "name": "async", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "asyncBefore", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "asyncAfter", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "exclusive", + "isAttr": true, + "type": "Boolean", + "default": true + } + ] + }, + { + "name": "JobPriorized", + "isAbstract": true, + "extends": [ + "bpmn:Process", + "camunda:AsyncCapable" + ], + "properties": [ + { + "name": "jobPriority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "SignalEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:SignalEventDefinition" + ], + "properties": [ + { + "name": "async", + "isAttr": true, + "type": "Boolean", + "default": false + } + ] + }, + { + "name": "ErrorEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:ErrorEventDefinition" + ], + "properties": [ + { + "name": "errorCodeVariable", + "isAttr": true, + "type": "String" + }, + { + "name": "errorMessageVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Error", + "isAbstract": true, + "extends": [ + "bpmn:Error" + ], + "properties": [ + { + "name": "camunda:errorMessage", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "PotentialStarter", + "superClass": [ + "Element" + ], + "properties": [ + { + "name": "resourceAssignmentExpression", + "type": "bpmn:ResourceAssignmentExpression" + } + ] + }, + { + "name": "FormSupported", + "isAbstract": true, + "extends": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ], + "properties": [ + { + "name": "formHandlerClass", + "isAttr": true, + "type": "String" + }, + { + "name": "formKey", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "TemplateSupported", + "isAbstract": true, + "extends": [ + "bpmn:Process", + "bpmn:FlowElement" + ], + "properties": [ + { + "name": "modelerTemplate", + "isAttr": true, + "type": "String" + }, + { + "name": "modelerTemplateVersion", + "isAttr": true, + "type": "Integer" + } + ] + }, + { + "name": "Initiator", + "isAbstract": true, + "extends": [ "bpmn:StartEvent" ], + "properties": [ + { + "name": "initiator", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ScriptTask", + "isAbstract": true, + "extends": [ + "bpmn:ScriptTask" + ], + "properties": [ + { + "name": "resultVariable", + "isAttr": true, + "type": "String" + }, + { + "name": "resource", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Process", + "isAbstract": true, + "extends": [ + "bpmn:Process" + ], + "properties": [ + { + "name": "candidateStarterGroups", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateStarterUsers", + "isAttr": true, + "type": "String" + }, + { + "name": "versionTag", + "isAttr": true, + "type": "String" + }, + { + "name": "historyTimeToLive", + "isAttr": true, + "type": "String" + }, + { + "name": "isStartableInTasklist", + "isAttr": true, + "type": "Boolean", + "default": true + } + ] + }, + { + "name": "EscalationEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:EscalationEventDefinition" + ], + "properties": [ + { + "name": "escalationCodeVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "FormalExpression", + "isAbstract": true, + "extends": [ + "bpmn:FormalExpression" + ], + "properties": [ + { + "name": "resource", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Assignable", + "extends": [ "bpmn:UserTask" ], + "properties": [ + { + "name": "assignee", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateUsers", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateGroups", + "isAttr": true, + "type": "String" + }, + { + "name": "dueDate", + "isAttr": true, + "type": "String" + }, + { + "name": "followUpDate", + "isAttr": true, + "type": "String" + }, + { + "name": "priority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "CallActivity", + "extends": [ "bpmn:CallActivity" ], + "properties": [ + { + "name": "calledElementBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "calledElementVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "calledElementVersionTag", + "isAttr": true, + "type": "String" + }, + { + "name": "calledElementTenantId", + "isAttr": true, + "type": "String" + }, + { + "name": "caseRef", + "isAttr": true, + "type": "String" + }, + { + "name": "caseBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "caseVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "caseTenantId", + "isAttr": true, + "type": "String" + }, + { + "name": "variableMappingClass", + "isAttr": true, + "type": "String" + }, + { + "name": "variableMappingDelegateExpression", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ServiceTaskLike", + "extends": [ + "bpmn:ServiceTask", + "bpmn:BusinessRuleTask", + "bpmn:SendTask", + "bpmn:MessageEventDefinition" + ], + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "resultVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "DmnCapable", + "extends": [ + "bpmn:BusinessRuleTask" + ], + "properties": [ + { + "name": "decisionRef", + "isAttr": true, + "type": "String" + }, + { + "name": "decisionRefBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "decisionRefVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "mapDecisionResult", + "isAttr": true, + "type": "String", + "default": "resultList" + }, + { + "name": "decisionRefTenantId", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ExternalCapable", + "extends": [ + "camunda:ServiceTaskLike" + ], + "properties": [ + { + "name": "type", + "isAttr": true, + "type": "String" + }, + { + "name": "topic", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "TaskPriorized", + "extends": [ + "bpmn:Process", + "camunda:ExternalCapable" + ], + "properties": [ + { + "name": "taskPriority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Properties", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ "*" ] + }, + "properties": [ + { + "name": "values", + "type": "Property", + "isMany": true + } + ] + }, + { + "name": "Property", + "superClass": [ + "Element" + ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "value", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "Connector", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ + "camunda:ServiceTaskLike" + ] + }, + "properties": [ + { + "name": "inputOutput", + "type": "InputOutput" + }, + { + "name": "connectorId", + "type": "String" + } + ] + }, + { + "name": "InputOutput", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ + "bpmn:FlowNode", + "camunda:Connector" + ] + }, + "properties": [ + { + "name": "inputOutput", + "type": "InputOutput" + }, + { + "name": "connectorId", + "type": "String" + }, + { + "name": "inputParameters", + "isMany": true, + "type": "InputParameter" + }, + { + "name": "outputParameters", + "isMany": true, + "type": "OutputParameter" + } + ] + }, + { + "name": "InputOutputParameter", + "properties": [ + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + }, + { + "name": "definition", + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "InputOutputParameterDefinition", + "isAbstract": true + }, + { + "name": "List", + "superClass": [ "InputOutputParameterDefinition" ], + "properties": [ + { + "name": "items", + "isMany": true, + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "Map", + "superClass": [ "InputOutputParameterDefinition" ], + "properties": [ + { + "name": "entries", + "isMany": true, + "type": "Entry" + } + ] + }, + { + "name": "Entry", + "properties": [ + { + "name": "key", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + }, + { + "name": "definition", + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "Value", + "superClass": [ + "InputOutputParameterDefinition" + ], + "properties": [ + { + "name": "id", + "isAttr": true, + "type": "String" + }, + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "Script", + "superClass": [ "InputOutputParameterDefinition" ], + "properties": [ + { + "name": "scriptFormat", + "isAttr": true, + "type": "String" + }, + { + "name": "resource", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "Field", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "camunda:ServiceTaskLike", + "camunda:ExecutionListener", + "camunda:TaskListener" + ] + }, + "properties": [ + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "expression", + "type": "String" + }, + { + "name": "stringValue", + "isAttr": true, + "type": "String" + }, + { + "name": "string", + "type": "String" + } + ] + }, + { + "name": "InputParameter", + "superClass": [ "InputOutputParameter" ] + }, + { + "name": "OutputParameter", + "superClass": [ "InputOutputParameter" ] + }, + { + "name": "Collectable", + "isAbstract": true, + "extends": [ "bpmn:MultiInstanceLoopCharacteristics" ], + "superClass": [ "camunda:AsyncCapable" ], + "properties": [ + { + "name": "collection", + "isAttr": true, + "type": "String" + }, + { + "name": "elementVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "FailedJobRetryTimeCycle", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "camunda:AsyncCapable", + "bpmn:MultiInstanceLoopCharacteristics" + ] + }, + "properties": [ + { + "name": "body", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "ExecutionListener", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:Task", + "bpmn:ServiceTask", + "bpmn:UserTask", + "bpmn:BusinessRuleTask", + "bpmn:ScriptTask", + "bpmn:ReceiveTask", + "bpmn:ManualTask", + "bpmn:ExclusiveGateway", + "bpmn:SequenceFlow", + "bpmn:ParallelGateway", + "bpmn:InclusiveGateway", + "bpmn:EventBasedGateway", + "bpmn:StartEvent", + "bpmn:IntermediateCatchEvent", + "bpmn:IntermediateThrowEvent", + "bpmn:EndEvent", + "bpmn:BoundaryEvent", + "bpmn:CallActivity", + "bpmn:SubProcess", + "bpmn:Process" + ] + }, + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "event", + "isAttr": true, + "type": "String" + }, + { + "name": "script", + "type": "Script" + }, + { + "name": "fields", + "type": "Field", + "isMany": true + } + ] + }, + { + "name": "TaskListener", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "event", + "isAttr": true, + "type": "String" + }, + { + "name": "script", + "type": "Script" + }, + { + "name": "fields", + "type": "Field", + "isMany": true + }, + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "eventDefinitions", + "type": "bpmn:TimerEventDefinition", + "isMany": true + } + ] + }, + { + "name": "FormProperty", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "required", + "type": "String", + "isAttr": true + }, + { + "name": "readable", + "type": "String", + "isAttr": true + }, + { + "name": "writable", + "type": "String", + "isAttr": true + }, + { + "name": "variable", + "type": "String", + "isAttr": true + }, + { + "name": "expression", + "type": "String", + "isAttr": true + }, + { + "name": "datePattern", + "type": "String", + "isAttr": true + }, + { + "name": "default", + "type": "String", + "isAttr": true + }, + { + "name": "values", + "type": "Value", + "isMany": true + } + ] + }, + { + "name": "FormData", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "fields", + "type": "FormField", + "isMany": true + }, + { + "name": "businessKey", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "FormField", + "superClass": [ "Element" ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "label", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "datePattern", + "type": "String", + "isAttr": true + }, + { + "name": "defaultValue", + "type": "String", + "isAttr": true + }, + { + "name": "properties", + "type": "Properties" + }, + { + "name": "validation", + "type": "Validation" + }, + { + "name": "values", + "type": "Value", + "isMany": true + } + ] + }, + { + "name": "Validation", + "superClass": [ "Element" ], + "properties": [ + { + "name": "constraints", + "type": "Constraint", + "isMany": true + } + ] + }, + { + "name": "Constraint", + "superClass": [ "Element" ], + "properties": [ + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "config", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "ConditionalEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:ConditionalEventDefinition" + ], + "properties": [ + { + "name": "variableName", + "isAttr": true, + "type": "String" + }, + { + "name": "variableEvents", + "isAttr": true, + "type": "String" + } + ] + } + ], + "emumerations": [ ] +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/descriptor/flowableDescriptor.json b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/descriptor/flowableDescriptor.json new file mode 100644 index 00000000..5bacc78c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/descriptor/flowableDescriptor.json @@ -0,0 +1,1206 @@ +{ + "name": "Flowable", + "uri": "http://flowable.org/bpmn", + "prefix": "flowable", + "xml": { + "tagAlias": "lowerCase" + }, + "associations": [], + "types": [ + { + "name": "InOutBinding", + "superClass": [ + "Element" + ], + "isAbstract": true, + "properties": [ + { + "name": "source", + "isAttr": true, + "type": "String" + }, + { + "name": "sourceExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "target", + "isAttr": true, + "type": "String" + }, + { + "name": "businessKey", + "isAttr": true, + "type": "String" + }, + { + "name": "local", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "variables", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "In", + "superClass": [ + "InOutBinding" + ], + "meta": { + "allowedIn": [ + "bpmn:CallActivity" + ] + } + }, + { + "name": "Out", + "superClass": [ + "InOutBinding" + ], + "meta": { + "allowedIn": [ + "bpmn:CallActivity" + ] + } + }, + { + "name": "AsyncCapable", + "isAbstract": true, + "extends": [ + "bpmn:Activity", + "bpmn:Gateway", + "bpmn:Event" + ], + "properties": [ + { + "name": "async", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "asyncBefore", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "asyncAfter", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "exclusive", + "isAttr": true, + "type": "Boolean", + "default": true + } + ] + }, + { + "name": "JobPriorized", + "isAbstract": true, + "extends": [ + "bpmn:Process", + "flowable:AsyncCapable" + ], + "properties": [ + { + "name": "jobPriority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "SignalEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:SignalEventDefinition" + ], + "properties": [ + { + "name": "async", + "isAttr": true, + "type": "Boolean", + "default": false + } + ] + }, + { + "name": "ErrorEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:ErrorEventDefinition" + ], + "properties": [ + { + "name": "errorCodeVariable", + "isAttr": true, + "type": "String" + }, + { + "name": "errorMessageVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Error", + "isAbstract": true, + "extends": [ + "bpmn:Error" + ], + "properties": [ + { + "name": "flowable:errorMessage", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "PotentialStarter", + "superClass": [ + "Element" + ], + "properties": [ + { + "name": "resourceAssignmentExpression", + "type": "bpmn:ResourceAssignmentExpression" + } + ] + }, + { + "name": "FormSupported", + "isAbstract": true, + "extends": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ], + "properties": [ + { + "name": "formHandlerClass", + "isAttr": true, + "type": "String" + }, + { + "name": "formKey", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "TemplateSupported", + "isAbstract": true, + "extends": [ + "bpmn:Process", + "bpmn:FlowElement" + ], + "properties": [ + { + "name": "modelerTemplate", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Initiator", + "isAbstract": true, + "extends": [ "bpmn:StartEvent" ], + "properties": [ + { + "name": "initiator", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ScriptTask", + "isAbstract": true, + "extends": [ + "bpmn:ScriptTask" + ], + "properties": [ + { + "name": "resultVariable", + "isAttr": true, + "type": "String" + }, + { + "name": "resource", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Process", + "isAbstract": true, + "extends": [ + "bpmn:Process" + ], + "properties": [ + { + "name": "candidateStarterGroups", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateStarterUsers", + "isAttr": true, + "type": "String" + }, + { + "name": "versionTag", + "isAttr": true, + "type": "String" + }, + { + "name": "historyTimeToLive", + "isAttr": true, + "type": "String" + }, + { + "name": "isStartableInTasklist", + "isAttr": true, + "type": "Boolean", + "default": true + } + ] + }, + { + "name": "EscalationEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:EscalationEventDefinition" + ], + "properties": [ + { + "name": "escalationCodeVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "xcField", + "isAbstract": true, + "properties": [ + { + "name": "xcString", + "isMany": true, + "type": "Element" + } , + { + "name": "name", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "xcString", + "isAbstract": true, + "properties": [ + { + "name": "body", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "FormalExpression", + "isAbstract": true, + "extends": [ + "bpmn:FormalExpression" + ], + "properties": [ + { + "name": "resource", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Assignable", + "extends": [ "bpmn:UserTask" ], + "properties": [ + { + "name": "assignee", + "isAttr": true, + "type": "String" + }, + { + "name": "xcformKey", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateUsers", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateGroups", + "isAttr": true, + "type": "String" + }, + { + "name": "dueDate", + "isAttr": true, + "type": "String" + }, + { + "name": "followUpDate", + "isAttr": true, + "type": "String" + }, + { + "name": "priority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "CallActivity", + "extends": [ "bpmn:CallActivity" ], + "properties": [ + { + "name": "calledElementBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "calledElementVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "calledElementVersionTag", + "isAttr": true, + "type": "String" + }, + { + "name": "calledElementTenantId", + "isAttr": true, + "type": "String" + }, + { + "name": "caseRef", + "isAttr": true, + "type": "String" + }, + { + "name": "caseBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "caseVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "caseTenantId", + "isAttr": true, + "type": "String" + }, + { + "name": "variableMappingClass", + "isAttr": true, + "type": "String" + }, + { + "name": "variableMappingDelegateExpression", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ServiceTaskLike", + "extends": [ + "bpmn:ServiceTask", + "bpmn:BusinessRuleTask", + "bpmn:SendTask", + "bpmn:MessageEventDefinition" + ], + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "resultVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "DmnCapable", + "extends": [ + "bpmn:BusinessRuleTask" + ], + "properties": [ + { + "name": "decisionRef", + "isAttr": true, + "type": "String" + }, + { + "name": "decisionRefBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "decisionRefVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "mapDecisionResult", + "isAttr": true, + "type": "String", + "default": "resultList" + }, + { + "name": "decisionRefTenantId", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ExternalCapable", + "extends": [ + "flowable:ServiceTaskLike" + ], + "properties": [ + { + "name": "type", + "isAttr": true, + "type": "String" + }, + { + "name": "topic", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "TaskPriorized", + "extends": [ + "bpmn:Process", + "flowable:ExternalCapable" + ], + "properties": [ + { + "name": "taskPriority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Properties", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ "*" ] + }, + "properties": [ + { + "name": "values", + "type": "Property", + "isMany": true + } + ] + }, + { + "name": "Property", + "superClass": [ + "Element" + ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "value", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "Connector", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ + "flowable:ServiceTaskLike" + ] + }, + "properties": [ + { + "name": "inputOutput", + "type": "InputOutput" + }, + { + "name": "connectorId", + "type": "String" + } + ] + }, + { + "name": "InputOutput", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ + "bpmn:FlowNode", + "flowable:Connector" + ] + }, + "properties": [ + { + "name": "inputOutput", + "type": "InputOutput" + }, + { + "name": "connectorId", + "type": "String" + }, + { + "name": "inputParameters", + "isMany": true, + "type": "InputParameter" + }, + { + "name": "outputParameters", + "isMany": true, + "type": "OutputParameter" + } + ] + }, + { + "name": "InputOutputParameter", + "properties": [ + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + }, + { + "name": "definition", + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "InputOutputParameterDefinition", + "isAbstract": true + }, + { + "name": "List", + "superClass": [ "InputOutputParameterDefinition" ], + "properties": [ + { + "name": "items", + "isMany": true, + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "Map", + "superClass": [ "InputOutputParameterDefinition" ], + "properties": [ + { + "name": "entries", + "isMany": true, + "type": "Entry" + } + ] + }, + { + "name": "Entry", + "properties": [ + { + "name": "key", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + }, + { + "name": "definition", + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "Value", + "superClass": [ + "InputOutputParameterDefinition" + ], + "properties": [ + { + "name": "id", + "isAttr": true, + "type": "String" + }, + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "Script", + "superClass": [ "InputOutputParameterDefinition" ], + "properties": [ + { + "name": "scriptFormat", + "isAttr": true, + "type": "String" + }, + { + "name": "resource", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "Field", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "flowable:ServiceTaskLike", + "flowable:ExecutionListener", + "flowable:TaskListener" + ] + }, + "properties": [ + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "expression", + "type": "String" + }, + { + "name": "stringValue", + "isAttr": true, + "type": "String" + }, + { + "name": "string", + "type": "String" + } + ] + }, + { + "name": "InputParameter", + "superClass": [ "InputOutputParameter" ] + }, + { + "name": "OutputParameter", + "superClass": [ "InputOutputParameter" ] + }, + { + "name": "Collectable", + "isAbstract": true, + "extends": [ "bpmn:MultiInstanceLoopCharacteristics" ], + "superClass": [ "flowable:AsyncCapable" ], + "properties": [ + { + "name": "collection", + "isAttr": true, + "type": "String" + }, + { + "name": "elementVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "FailedJobRetryTimeCycle", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "flowable:AsyncCapable", + "bpmn:MultiInstanceLoopCharacteristics" + ] + }, + "properties": [ + { + "name": "body", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "ExecutionListener", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:Task", + "bpmn:ServiceTask", + "bpmn:UserTask", + "bpmn:BusinessRuleTask", + "bpmn:ScriptTask", + "bpmn:ReceiveTask", + "bpmn:ManualTask", + "bpmn:ExclusiveGateway", + "bpmn:SequenceFlow", + "bpmn:ParallelGateway", + "bpmn:InclusiveGateway", + "bpmn:EventBasedGateway", + "bpmn:StartEvent", + "bpmn:IntermediateCatchEvent", + "bpmn:IntermediateThrowEvent", + "bpmn:EndEvent", + "bpmn:BoundaryEvent", + "bpmn:CallActivity", + "bpmn:SubProcess", + "bpmn:Process" + ] + }, + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "event", + "isAttr": true, + "type": "String" + }, + { + "name": "script", + "type": "Script" + }, + { + "name": "fields", + "type": "Field", + "isMany": true + } + ] + }, + { + "name": "TaskListener", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "event", + "isAttr": true, + "type": "String" + }, + { + "name": "script", + "type": "Script" + }, + { + "name": "fields", + "type": "Field", + "isMany": true + } + ] + }, + { + "name": "FormProperty", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "required", + "type": "String", + "isAttr": true + }, + { + "name": "readable", + "type": "String", + "isAttr": true + }, + { + "name": "writable", + "type": "String", + "isAttr": true + }, + { + "name": "variable", + "type": "String", + "isAttr": true + }, + { + "name": "expression", + "type": "String", + "isAttr": true + }, + { + "name": "datePattern", + "type": "String", + "isAttr": true + }, + { + "name": "default", + "type": "String", + "isAttr": true + }, + { + "name": "values", + "type": "Value", + "isMany": true + } + ] + }, + { + "name": "FormProperty", + "superClass": [ "Element" ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "label", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "datePattern", + "type": "String", + "isAttr": true + }, + { + "name": "defaultValue", + "type": "String", + "isAttr": true + }, + { + "name": "properties", + "type": "Properties" + }, + { + "name": "validation", + "type": "Validation" + }, + { + "name": "values", + "type": "Value", + "isMany": true + } + ] + }, + { + "name": "Validation", + "superClass": [ "Element" ], + "properties": [ + { + "name": "constraints", + "type": "Constraint", + "isMany": true + } + ] + }, + { + "name": "Constraint", + "superClass": [ "Element" ], + "properties": [ + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "config", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "ExtensionElements", + "properties": [ + { + "name": "operationList", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "OperationList", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "operationList", + "type": "FormOperation", + "isMany": true + } + ] + }, + { + "name": "FormOperation", + "superClass": [ "Element" ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "label", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "showOrder", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "VariableList", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "variableList", + "type": "FormVariable", + "isMany": true + } + ] + }, + { + "name": "FormVariable", + "superClass": [ "Element" ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "CustomCondition", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:SequenceFlow" + ] + }, + "properties": [ + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "operationType", + "type": "String", + "isAttr": true + }, + { + "name": "parallelRefuse", + "type": "Boolean", + "isAttr": true, + "default": false + } + ] + }, + { + "name": "AssigneeList", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "assigneeList", + "type": "Assignee", + "isMany": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "Assignee", + "superClass": [ "Element" ], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "ConditionalEventDefinition", + "isAbstract": true, + "extends": [ + "bpmn:ConditionalEventDefinition" + ], + "properties": [ + { + "name": "variableName", + "isAttr": true, + "type": "String" + }, + { + "name": "variableEvent", + "isAttr": true, + "type": "String" + } + ] + } + ], + "emumerations": [ ] +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/activiti/activitiExtension.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/activiti/activitiExtension.js new file mode 100644 index 00000000..1287e041 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/activiti/activitiExtension.js @@ -0,0 +1,74 @@ +"use strict"; + +var some = require("min-dash").some; + +var ALLOWED_TYPES = { + FailedJobRetryTimeCycle: ["bpmn:StartEvent", "bpmn:BoundaryEvent", "bpmn:IntermediateCatchEvent", "bpmn:Activity"], + Connector: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"], + Field: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"] +}; + +function is(element, type) { + return element && typeof element.$instanceOf === "function" && element.$instanceOf(type); +} + +function exists(element) { + return element && element.length; +} + +function includesType(collection, type) { + return ( + exists(collection) && + some(collection, function(element) { + return is(element, type); + }) + ); +} + +function anyType(element, types) { + return some(types, function(type) { + return is(element, type); + }); +} + +function isAllowed(propName, propDescriptor, newElement) { + var name = propDescriptor.name, + types = ALLOWED_TYPES[name.replace(/activiti:/, "")]; + + return name === propName && anyType(newElement, types); +} + +function ActivitiModdleExtension(eventBus) { + eventBus.on( + "property.clone", + function(context) { + var newElement = context.newElement, + propDescriptor = context.propertyDescriptor; + + this.canCloneProperty(newElement, propDescriptor); + }, + this + ); +} + +ActivitiModdleExtension.$inject = ["eventBus"]; + +ActivitiModdleExtension.prototype.canCloneProperty = function(newElement, propDescriptor) { + if (isAllowed("activiti:FailedJobRetryTimeCycle", propDescriptor, newElement)) { + return ( + includesType(newElement.eventDefinitions, "bpmn:TimerEventDefinition") || + includesType(newElement.eventDefinitions, "bpmn:SignalEventDefinition") || + is(newElement.loopCharacteristics, "bpmn:MultiInstanceLoopCharacteristics") + ); + } + + if (isAllowed("activiti:Connector", propDescriptor, newElement)) { + return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition"); + } + + if (isAllowed("activiti:Field", propDescriptor, newElement)) { + return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition"); + } +}; + +module.exports = ActivitiModdleExtension; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/activiti/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/activiti/index.js new file mode 100644 index 00000000..6ce014af --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/activiti/index.js @@ -0,0 +1,9 @@ +/* + * @author igdianov + * address https://github.com/igdianov/activiti-bpmn-moddle + * */ + +module.exports = { + __init__: ["ActivitiModdleExtension"], + ActivitiModdleExtension: ["type", require("./activitiExtension")] +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/camunda/extension.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/camunda/extension.js new file mode 100644 index 00000000..a55236a3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/camunda/extension.js @@ -0,0 +1,148 @@ +"use strict"; + +var isFunction = require("min-dash").isFunction, + isObject = require("min-dash").isObject, + some = require("min-dash").some; + +var WILDCARD = "*"; + +function CamundaModdleExtension(eventBus) { + var self = this; + + eventBus.on("moddleCopy.canCopyProperty", function(context) { + var property = context.property, + parent = context.parent; + + return self.canCopyProperty(property, parent); + }); +} + +CamundaModdleExtension.$inject = ["eventBus"]; + +/** + * Check wether to disallow copying property. + */ +CamundaModdleExtension.prototype.canCopyProperty = function(property, parent) { + // (1) check wether property is allowed in parent + if (isObject(property) && !isAllowedInParent(property, parent)) { + return false; + } + + // (2) check more complex scenarios + + if (is(property, "camunda:InputOutput") && !this.canHostInputOutput(parent)) { + return false; + } + + if (isAny(property, ["camunda:Connector", "camunda:Field"]) && !this.canHostConnector(parent)) { + return false; + } + + if (is(property, "camunda:In") && !this.canHostIn(parent)) { + return false; + } +}; + +CamundaModdleExtension.prototype.canHostInputOutput = function(parent) { + // allowed in camunda:Connector + var connector = getParent(parent, "camunda:Connector"); + + if (connector) { + return true; + } + + // special rules inside bpmn:FlowNode + var flowNode = getParent(parent, "bpmn:FlowNode"); + + if (!flowNode) { + return false; + } + + if (isAny(flowNode, ["bpmn:StartEvent", "bpmn:Gateway", "bpmn:BoundaryEvent"])) { + return false; + } + + if (is(flowNode, "bpmn:SubProcess") && flowNode.get("triggeredByEvent")) { + return false; + } + + return true; +}; + +CamundaModdleExtension.prototype.canHostConnector = function(parent) { + var serviceTaskLike = getParent(parent, "camunda:ServiceTaskLike"); + + if (is(serviceTaskLike, "bpmn:MessageEventDefinition")) { + // only allow on throw and end events + return getParent(parent, "bpmn:IntermediateThrowEvent") || getParent(parent, "bpmn:EndEvent"); + } + + return true; +}; + +CamundaModdleExtension.prototype.canHostIn = function(parent) { + var callActivity = getParent(parent, "bpmn:CallActivity"); + + if (callActivity) { + return true; + } + + var signalEventDefinition = getParent(parent, "bpmn:SignalEventDefinition"); + + if (signalEventDefinition) { + // only allow on throw and end events + return getParent(parent, "bpmn:IntermediateThrowEvent") || getParent(parent, "bpmn:EndEvent"); + } + + return true; +}; + +module.exports = CamundaModdleExtension; + +// helpers ////////// + +function is(element, type) { + return element && isFunction(element.$instanceOf) && element.$instanceOf(type); +} + +function isAny(element, types) { + return some(types, function(t) { + return is(element, t); + }); +} + +function getParent(element, type) { + if (!type) { + return element.$parent; + } + + if (is(element, type)) { + return element; + } + + if (!element.$parent) { + return; + } + + return getParent(element.$parent, type); +} + +function isAllowedInParent(property, parent) { + // (1) find property descriptor + var descriptor = property.$type && property.$model.getTypeDescriptor(property.$type); + + var allowedIn = descriptor && descriptor.meta && descriptor.meta.allowedIn; + + if (!allowedIn || isWildcard(allowedIn)) { + return true; + } + + // (2) check wether property has parent of allowed type + return some(allowedIn, function(type) { + return getParent(parent, type); + }); +} + +function isWildcard(allowedIn) { + return allowedIn.indexOf(WILDCARD) !== -1; +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/camunda/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/camunda/index.js new file mode 100644 index 00000000..0a9e41cf --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/camunda/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = { + __init__: ["camundaModdleExtension"], + camundaModdleExtension: ["type", require("./extension")] +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/flowable/flowableExtension.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/flowable/flowableExtension.js new file mode 100644 index 00000000..4689024b --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/flowable/flowableExtension.js @@ -0,0 +1,74 @@ +"use strict"; + +var some = require("min-dash").some; + +var ALLOWED_TYPES = { + FailedJobRetryTimeCycle: ["bpmn:StartEvent", "bpmn:BoundaryEvent", "bpmn:IntermediateCatchEvent", "bpmn:Activity"], + Connector: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"], + Field: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"] +}; + +function is(element, type) { + return element && typeof element.$instanceOf === "function" && element.$instanceOf(type); +} + +function exists(element) { + return element && element.length; +} + +function includesType(collection, type) { + return ( + exists(collection) && + some(collection, function(element) { + return is(element, type); + }) + ); +} + +function anyType(element, types) { + return some(types, function(type) { + return is(element, type); + }); +} + +function isAllowed(propName, propDescriptor, newElement) { + var name = propDescriptor.name, + types = ALLOWED_TYPES[name.replace(/flowable:/, "")]; + + return name === propName && anyType(newElement, types); +} + +function FlowableModdleExtension(eventBus) { + eventBus.on( + "property.clone", + function(context) { + var newElement = context.newElement, + propDescriptor = context.propertyDescriptor; + + this.canCloneProperty(newElement, propDescriptor); + }, + this + ); +} + +FlowableModdleExtension.$inject = ["eventBus"]; + +FlowableModdleExtension.prototype.canCloneProperty = function(newElement, propDescriptor) { + if (isAllowed("flowable:FailedJobRetryTimeCycle", propDescriptor, newElement)) { + return ( + includesType(newElement.eventDefinitions, "bpmn:TimerEventDefinition") || + includesType(newElement.eventDefinitions, "bpmn:SignalEventDefinition") || + is(newElement.loopCharacteristics, "bpmn:MultiInstanceLoopCharacteristics") + ); + } + + if (isAllowed("flowable:Connector", propDescriptor, newElement)) { + return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition"); + } + + if (isAllowed("flowable:Field", propDescriptor, newElement)) { + return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition"); + } +}; + +module.exports = FlowableModdleExtension; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/flowable/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/flowable/index.js new file mode 100644 index 00000000..59837cca --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/extension-moddle/flowable/index.js @@ -0,0 +1,9 @@ +/* + * @author igdianov + * address https://github.com/igdianov/activiti-bpmn-moddle + * */ + +module.exports = { + __init__: ["FlowableModdleExtension"], + FlowableModdleExtension: ["type", require("./flowableExtension")] +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/palette/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/palette/index.js new file mode 100644 index 00000000..c44874f1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/palette/index.js @@ -0,0 +1,15 @@ +import PaletteModule from "diagram-js/lib/features/palette"; +import CreateModule from "diagram-js/lib/features/create"; +import SpaceToolModule from "diagram-js/lib/features/space-tool"; +import LassoToolModule from "diagram-js/lib/features/lasso-tool"; +import HandToolModule from "diagram-js/lib/features/hand-tool"; +import GlobalConnectModule from "diagram-js/lib/features/global-connect"; +import translate from "diagram-js/lib/i18n/translate"; + +import PaletteProvider from "./paletteProvider"; + +export default { + __depends__: [PaletteModule, CreateModule, SpaceToolModule, LassoToolModule, HandToolModule, GlobalConnectModule, translate], + __init__: ["paletteProvider"], + paletteProvider: ["type", PaletteProvider] +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/palette/paletteProvider.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/palette/paletteProvider.js new file mode 100644 index 00000000..e0c32380 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/palette/paletteProvider.js @@ -0,0 +1,160 @@ +import { assign } from "min-dash"; + +/** + * A palette provider for BPMN 2.0 elements. + */ +export default function PaletteProvider(palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate) { + this._palette = palette; + this._create = create; + this._elementFactory = elementFactory; + this._spaceTool = spaceTool; + this._lassoTool = lassoTool; + this._handTool = handTool; + this._globalConnect = globalConnect; + this._translate = translate; + + palette.registerProvider(this); +} + +PaletteProvider.$inject = ["palette", "create", "elementFactory", "spaceTool", "lassoTool", "handTool", "globalConnect", "translate"]; + +PaletteProvider.prototype.getPaletteEntries = function() { + var actions = {}, + create = this._create, + elementFactory = this._elementFactory, + spaceTool = this._spaceTool, + lassoTool = this._lassoTool, + handTool = this._handTool, + globalConnect = this._globalConnect, + translate = this._translate; + + function createAction(type, group, className, title, options) { + function createListener(event) { + var shape = elementFactory.createShape(assign({ type: type }, options)); + + if (options) { + shape.businessObject.di.isExpanded = options.isExpanded; + } + + create.start(event, shape); + } + + var shortType = type.replace(/^bpmn:/, ""); + + return { + group: group, + className: className, + title: title || translate("Create {type}", { type: shortType }), + action: { + dragstart: createListener, + click: createListener + } + }; + } + + function createSubprocess(event) { + var subProcess = elementFactory.createShape({ + type: "bpmn:SubProcess", + x: 0, + y: 0, + isExpanded: true + }); + + var startEvent = elementFactory.createShape({ + type: "bpmn:StartEvent", + x: 40, + y: 82, + parent: subProcess + }); + + create.start(event, [subProcess, startEvent], { + hints: { + autoSelect: [startEvent] + } + }); + } + + function createParticipant(event) { + create.start(event, elementFactory.createParticipantShape()); + } + + assign(actions, { + "hand-tool": { + group: "tools", + className: "bpmn-icon-hand-tool", + title: translate("Activate the hand tool"), + action: { + click: function(event) { + handTool.activateHand(event); + } + } + }, + "lasso-tool": { + group: "tools", + className: "bpmn-icon-lasso-tool", + title: translate("Activate the lasso tool"), + action: { + click: function(event) { + lassoTool.activateSelection(event); + } + } + }, + "space-tool": { + group: "tools", + className: "bpmn-icon-space-tool", + title: translate("Activate the create/remove space tool"), + action: { + click: function(event) { + spaceTool.activateSelection(event); + } + } + }, + "global-connect-tool": { + group: "tools", + className: "bpmn-icon-connection-multi", + title: translate("Activate the global connect tool"), + action: { + click: function(event) { + globalConnect.toggle(event); + } + } + }, + "tool-separator": { + group: "tools", + separator: true + }, + "create.start-event": createAction("bpmn:StartEvent", "event", "bpmn-icon-start-event-none", translate("Create StartEvent")), + "create.intermediate-event": createAction( + "bpmn:IntermediateThrowEvent", + "event", + "bpmn-icon-intermediate-event-none", + translate("Create Intermediate/Boundary Event") + ), + "create.end-event": createAction("bpmn:EndEvent", "event", "bpmn-icon-end-event-none", translate("Create EndEvent")), + "create.exclusive-gateway": createAction("bpmn:ExclusiveGateway", "gateway", "bpmn-icon-gateway-none", translate("Create Gateway")), + "create.user-task": createAction("bpmn:UserTask", "activity", "bpmn-icon-user-task", translate("Create User Task")), + "create.data-object": createAction("bpmn:DataObjectReference", "data-object", "bpmn-icon-data-object", translate("Create DataObjectReference")), + "create.data-store": createAction("bpmn:DataStoreReference", "data-store", "bpmn-icon-data-store", translate("Create DataStoreReference")), + "create.subprocess-expanded": { + group: "activity", + className: "bpmn-icon-subprocess-expanded", + title: translate("Create expanded SubProcess"), + action: { + dragstart: createSubprocess, + click: createSubprocess + } + }, + "create.participant-expanded": { + group: "collaboration", + className: "bpmn-icon-participant", + title: translate("Create Pool/Participant"), + action: { + dragstart: createParticipant, + click: createParticipant + } + }, + "create.group": createAction("bpmn:Group", "artifact", "bpmn-icon-group", translate("Create Group")) + }); + + return actions; +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/translate/customTranslate.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/translate/customTranslate.js new file mode 100644 index 00000000..508040d6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/translate/customTranslate.js @@ -0,0 +1,41 @@ +// import translations from "./zh"; +// +// export default function customTranslate(template, replacements) { +// replacements = replacements || {}; +// +// // Translate +// template = translations[template] || template; +// +// // Replace +// return template.replace(/{([^}]+)}/g, function(_, key) { +// let str = replacements[key]; +// if ( +// translations[replacements[key]] !== null && +// translations[replacements[key]] !== "undefined" +// ) { +// // eslint-disable-next-line no-mixed-spaces-and-tabs +// str = translations[replacements[key]]; +// // eslint-disable-next-line no-mixed-spaces-and-tabs +// } +// return str || "{" + key + "}"; +// }); +// } + +export default function customTranslate(translations) { + return function(template, replacements) { + replacements = replacements || {}; + // Translate + template = translations[template] || template; + + // Replace + return template.replace(/{([^}]+)}/g, function(_, key) { + let str = replacements[key]; + if (translations[replacements[key]] !== null && translations[replacements[key]] !== undefined) { + // eslint-disable-next-line no-mixed-spaces-and-tabs + str = translations[replacements[key]]; + // eslint-disable-next-line no-mixed-spaces-and-tabs + } + return str || "{" + key + "}"; + }); + }; +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/translate/zh.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/translate/zh.js new file mode 100644 index 00000000..855b561e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/process-designer/plugins/translate/zh.js @@ -0,0 +1,238 @@ +/** + * This is a sample file that should be replaced with the actual translation. + * + * Checkout https://github.com/bpmn-io/bpmn-js-i18n for a list of available + * translations and labels to translate. + */ +export default { + // 添加部分 + "Append EndEvent": "追加结束事件", + "Append Gateway": "追加网关", + "Append Task": "追加任务", + "Append Intermediate/Boundary Event": "追加中间抛出事件/边界事件", + + "Activate the global connect tool": "激活全局连接工具", + "Append {type}": "添加 {type}", + "Add Lane above": "在上面添加道", + "Divide into two Lanes": "分割成两个道", + "Divide into three Lanes": "分割成三个道", + "Add Lane below": "在下面添加道", + "Append compensation activity": "追加补偿活动", + "Change type": "修改类型", + "Connect using Association": "使用关联连接", + "Connect using Sequence/MessageFlow or Association": "使用顺序/消息流或者关联连接", + "Connect using DataInputAssociation": "使用数据输入关联连接", + Remove: "移除", + "Activate the hand tool": "激活抓手工具", + "Activate the lasso tool": "激活套索工具", + "Activate the create/remove space tool": "激活创建/删除空间工具", + "Create expanded SubProcess": "创建扩展子过程", + "Create IntermediateThrowEvent/BoundaryEvent": "创建中间抛出事件/边界事件", + "Create Pool/Participant": "创建池/参与者", + "Parallel Multi Instance": "并行多重事件", + "Sequential Multi Instance": "时序多重事件", + DataObjectReference: "数据对象参考", + DataStoreReference: "数据存储参考", + Loop: "循环", + "Ad-hoc": "即席", + "Create {type}": "创建 {type}", + Task: "任务", + "Send Task": "发送任务", + "Receive Task": "接收任务", + "User Task": "用户任务", + "Manual Task": "手工任务", + "Business Rule Task": "业务规则任务", + "Service Task": "服务任务", + "Script Task": "脚本任务", + "Call Activity": "调用活动", + "Sub Process (collapsed)": "子流程(折叠的)", + "Sub Process (expanded)": "子流程(展开的)", + "Start Event": "开始事件", + StartEvent: "开始事件", + "Intermediate Throw Event": "中间事件", + "End Event": "结束事件", + EndEvent: "结束事件", + "Create StartEvent": "创建开始事件", + "Create EndEvent": "创建结束事件", + "Create Task": "创建任务", + "Create User Task": "创建用户任务", + "Create Gateway": "创建网关", + "Create DataObjectReference": "创建数据对象", + "Create DataStoreReference": "创建数据存储", + "Create Group": "创建分组", + "Create Intermediate/Boundary Event": "创建中间/边界事件", + "Message Start Event": "消息开始事件", + "Timer Start Event": "定时开始事件", + "Conditional Start Event": "条件开始事件", + "Signal Start Event": "信号开始事件", + "Error Start Event": "错误开始事件", + "Escalation Start Event": "升级开始事件", + "Compensation Start Event": "补偿开始事件", + "Message Start Event (non-interrupting)": "消息开始事件(非中断)", + "Timer Start Event (non-interrupting)": "定时开始事件(非中断)", + "Conditional Start Event (non-interrupting)": "条件开始事件(非中断)", + "Signal Start Event (non-interrupting)": "信号开始事件(非中断)", + "Escalation Start Event (non-interrupting)": "升级开始事件(非中断)", + "Message Intermediate Catch Event": "消息中间捕获事件", + "Message Intermediate Throw Event": "消息中间抛出事件", + "Timer Intermediate Catch Event": "定时中间捕获事件", + "Escalation Intermediate Throw Event": "升级中间抛出事件", + "Conditional Intermediate Catch Event": "条件中间捕获事件", + "Link Intermediate Catch Event": "链接中间捕获事件", + "Link Intermediate Throw Event": "链接中间抛出事件", + "Compensation Intermediate Throw Event": "补偿中间抛出事件", + "Signal Intermediate Catch Event": "信号中间捕获事件", + "Signal Intermediate Throw Event": "信号中间抛出事件", + "Message End Event": "消息结束事件", + "Escalation End Event": "定时结束事件", + "Error End Event": "错误结束事件", + "Cancel End Event": "取消结束事件", + "Compensation End Event": "补偿结束事件", + "Signal End Event": "信号结束事件", + "Terminate End Event": "终止结束事件", + "Message Boundary Event": "消息边界事件", + "Message Boundary Event (non-interrupting)": "消息边界事件(非中断)", + "Timer Boundary Event": "定时边界事件", + "Timer Boundary Event (non-interrupting)": "定时边界事件(非中断)", + "Escalation Boundary Event": "升级边界事件", + "Escalation Boundary Event (non-interrupting)": "升级边界事件(非中断)", + "Conditional Boundary Event": "条件边界事件", + "Conditional Boundary Event (non-interrupting)": "条件边界事件(非中断)", + "Error Boundary Event": "错误边界事件", + "Cancel Boundary Event": "取消边界事件", + "Signal Boundary Event": "信号边界事件", + "Signal Boundary Event (non-interrupting)": "信号边界事件(非中断)", + "Compensation Boundary Event": "补偿边界事件", + "Exclusive Gateway": "互斥网关", + "Parallel Gateway": "并行网关", + "Inclusive Gateway": "相容网关", + "Complex Gateway": "复杂网关", + "Event based Gateway": "事件网关", + Transaction: "转运", + "Sub Process": "子流程", + "Event Sub Process": "事件子流程", + "Collapsed Pool": "折叠池", + "Expanded Pool": "展开池", + + // Errors + "no parent for {element} in {parent}": "在{parent}里,{element}没有父类", + "no shape type specified": "没有指定的形状类型", + "flow elements must be children of pools/participants": "流元素必须是池/参与者的子类", + "out of bounds release": "out of bounds release", + "more than {count} child lanes": "子道大于{count} ", + "element required": "元素不能为空", + "diagram not part of bpmn:Definitions": "流程图不符合bpmn规范", + "no diagram to display": "没有可展示的流程图", + "no process or collaboration to display": "没有可展示的流程/协作", + "element {element} referenced by {referenced}#{property} not yet drawn": "由{referenced}#{property}引用的{element}元素仍未绘制", + "already rendered {element}": "{element} 已被渲染", + "failed to import {element}": "导入{element}失败", + //属性面板的参数 + Id: "编号", + Name: "名称", + General: "常规", + Details: "详情", + "Message Name": "消息名称", + Message: "消息", + Initiator: "创建者", + "Asynchronous Continuations": "持续异步", + "Asynchronous Before": "异步前", + "Asynchronous After": "异步后", + "Job Configuration": "工作配置", + Exclusive: "排除", + "Job Priority": "工作优先级", + "Retry Time Cycle": "重试时间周期", + Documentation: "文档", + "Element Documentation": "元素文档", + "History Configuration": "历史配置", + "History Time To Live": "历史的生存时间", + Forms: "表单", + "Form Key": "表单key", + "Form Fields": "表单字段", + "Business Key": "业务key", + "Form Field": "表单字段", + ID: "编号", + Type: "类型", + Label: "名称", + "Default Value": "默认值", + "Default Flow": "默认流转路径", + "Conditional Flow": "条件流转路径", + "Sequence Flow": "普通流转路径", + Validation: "校验", + "Add Constraint": "添加约束", + Config: "配置", + Properties: "属性", + "Add Property": "添加属性", + Value: "值", + Listeners: "监听器", + "Execution Listener": "执行监听", + "Event Type": "事件类型", + "Listener Type": "监听器类型", + "Java Class": "Java类", + Expression: "表达式", + "Must provide a value": "必须提供一个值", + "Delegate Expression": "代理表达式", + Script: "脚本", + "Script Format": "脚本格式", + "Script Type": "脚本类型", + "Inline Script": "内联脚本", + "External Script": "外部脚本", + Resource: "资源", + "Field Injection": "字段注入", + Extensions: "扩展", + "Input/Output": "输入/输出", + "Input Parameters": "输入参数", + "Output Parameters": "输出参数", + Parameters: "参数", + "Output Parameter": "输出参数", + "Timer Definition Type": "定时器定义类型", + "Timer Definition": "定时器定义", + Date: "日期", + Duration: "持续", + Cycle: "循环", + Signal: "信号", + "Signal Name": "信号名称", + Escalation: "升级", + Error: "错误", + "Link Name": "链接名称", + Condition: "条件名称", + "Variable Name": "变量名称", + "Variable Event": "变量事件", + "Specify more than one variable change event as a comma separated list.": "多个变量事件以逗号隔开", + "Wait for Completion": "等待完成", + "Activity Ref": "活动参考", + "Version Tag": "版本标签", + Executable: "可执行文件", + "External Task Configuration": "扩展任务配置", + "Task Priority": "任务优先级", + External: "外部", + Connector: "连接器", + "Must configure Connector": "必须配置连接器", + "Connector Id": "连接器编号", + Implementation: "实现方式", + "Field Injections": "字段注入", + Fields: "字段", + "Result Variable": "结果变量", + Topic: "主题", + "Configure Connector": "配置连接器", + "Input Parameter": "输入参数", + Assignee: "代理人", + "Candidate Users": "候选用户", + "Candidate Groups": "候选组", + "Due Date": "到期时间", + "Follow Up Date": "跟踪日期", + Priority: "优先级", + "The follow up date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)": + "跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00", + "The due date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)": + "跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00", + Variables: "变量", + "Candidate Starter Configuration": "候选人起动器配置", + "Candidate Starter Groups": "候选人起动器组", + "This maps to the process definition key.": "这映射到流程定义键。", + "Candidate Starter Users": "候选人起动器的用户", + "Specify more than one user as a comma separated list.": "指定多个用户作为逗号分隔的列表。", + "Tasklist Configuration": "Tasklist配置", + Startable: "启动", + "Specify more than one group as a comma separated list.": "指定多个组作为逗号分隔的列表。" +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/PropertiesPanel.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/PropertiesPanel.vue new file mode 100644 index 00000000..9eb4b45f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/PropertiesPanel.vue @@ -0,0 +1,201 @@ + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/base/ElementBaseInfo.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/base/ElementBaseInfo.vue new file mode 100644 index 00000000..e1dee0c3 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/base/ElementBaseInfo.vue @@ -0,0 +1,72 @@ + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/flow-condition/FlowCondition.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/flow-condition/FlowCondition.vue new file mode 100644 index 00000000..50fe3d0c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/flow-condition/FlowCondition.vue @@ -0,0 +1,200 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form-variable/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form-variable/index.vue new file mode 100644 index 00000000..631c30f2 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form-variable/index.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form/ElementForm.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form/ElementForm.vue new file mode 100644 index 00000000..1ed44e79 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form/ElementForm.vue @@ -0,0 +1,360 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form/flowFormConfig.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form/flowFormConfig.vue new file mode 100644 index 00000000..9fe1ac48 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form/flowFormConfig.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form/formEditOperation.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form/formEditOperation.vue new file mode 100644 index 00000000..de28d7d1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/form/formEditOperation.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/index.js new file mode 100644 index 00000000..6cb0c77c --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/index.js @@ -0,0 +1,7 @@ +import MyPropertiesPanel from "./PropertiesPanel.vue"; + +MyPropertiesPanel.install = function(Vue) { + Vue.component(MyPropertiesPanel.name, MyPropertiesPanel); +}; + +export default MyPropertiesPanel; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/ElementListeners.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/ElementListeners.vue new file mode 100644 index 00000000..e023a6f6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/ElementListeners.vue @@ -0,0 +1,299 @@ + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/UserTaskListeners.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/UserTaskListeners.vue new file mode 100644 index 00000000..e6b588b6 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/UserTaskListeners.vue @@ -0,0 +1,323 @@ + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/template.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/template.js new file mode 100644 index 00000000..ddeefcb7 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/template.js @@ -0,0 +1,178 @@ +export const template = isTaskListener => { + return ` +
+ + + + + + + + +
+ 添加监听器 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + ${ + isTaskListener + ? "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + : "" + } + + +

+ 注入字段: + 添加字段 +

+ + + + + + + + + + +
+ 取 消 + 保 存 +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ `; +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/utilSelf.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/utilSelf.js new file mode 100644 index 00000000..0c0a2da9 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/listeners/utilSelf.js @@ -0,0 +1,60 @@ +// 初始化表单数据 +export function initListenerForm(listener) { + let self = { + ...listener + }; + if (listener.script) { + self = { + ...listener, + ...listener.script, + scriptType: listener.script.resource ? "externalScript" : "inlineScript" + }; + } + if (listener.event === "timeout" && listener.eventDefinitions) { + if (listener.eventDefinitions.length) { + let k = ""; + for (let key in listener.eventDefinitions[0]) { + if (key.indexOf("time") !== -1) { + k = key; + self.eventDefinitionType = key.replace("time", "").toLowerCase(); + } + } + self.eventTimeDefinitions = listener.eventDefinitions[0][k].body; + } + } + return self; +} + +export function initListenerType(listener) { + let listenerType; + if (listener.class) listenerType = "classListener"; + if (listener.expression) listenerType = "expressionListener"; + if (listener.delegateExpression) listenerType = "delegateExpressionListener"; + if (listener.script) listenerType = "scriptListener"; + return { + ...JSON.parse(JSON.stringify(listener)), + ...(listener.script ?? {}), + listenerType: listenerType + }; +} + +export const listenerType = { + classListener: "Java 类", + expressionListener: "表达式", + delegateExpressionListener: "代理表达式", + scriptListener: "脚本" +}; + +export const eventType = { + create: "创建", + assignment: "指派", + complete: "完成", + delete: "删除", + update: "更新", + timeout: "超时" +}; + +export const fieldType = { + string: "字符串", + expression: "表达式" +}; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/multi-instance/ElementMultiInstance.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/multi-instance/ElementMultiInstance.vue new file mode 100644 index 00000000..bfdf7607 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/multi-instance/ElementMultiInstance.vue @@ -0,0 +1,258 @@ + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/multi-instance/ElementMultiInstanceAssignee.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/multi-instance/ElementMultiInstanceAssignee.vue new file mode 100644 index 00000000..44f66a10 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/multi-instance/ElementMultiInstanceAssignee.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/other/ElementOtherConfig.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/other/ElementOtherConfig.vue new file mode 100644 index 00000000..a4427b22 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/other/ElementOtherConfig.vue @@ -0,0 +1,59 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/properties/ElementProperties.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/properties/ElementProperties.vue new file mode 100644 index 00000000..f108fe69 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/properties/ElementProperties.vue @@ -0,0 +1,127 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/signal-message/SignalAndMessage.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/signal-message/SignalAndMessage.vue new file mode 100644 index 00000000..7ea59f61 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/signal-message/SignalAndMessage.vue @@ -0,0 +1,104 @@ + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/ElementTask.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/ElementTask.vue new file mode 100644 index 00000000..fd454ecc --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/ElementTask.vue @@ -0,0 +1,72 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/task-components/ReceiveTask.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/task-components/ReceiveTask.vue new file mode 100644 index 00000000..282f2382 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/task-components/ReceiveTask.vue @@ -0,0 +1,97 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/task-components/ScriptTask.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/task-components/ScriptTask.vue new file mode 100644 index 00000000..34ed9fdf --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/task-components/ScriptTask.vue @@ -0,0 +1,85 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/task-components/UserTask.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/task-components/UserTask.vue new file mode 100644 index 00000000..f9aa3364 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/refactor/task/task-components/UserTask.vue @@ -0,0 +1,343 @@ + + + + + \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/flow-element-variables.scss b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/flow-element-variables.scss new file mode 100644 index 00000000..a54b6e05 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/flow-element-variables.scss @@ -0,0 +1,63 @@ +/* 改变主题色变量 */ +// $--color-primary: #1890ff; +// $--color-danger: #ff4d4f; + +/* 改变 icon 字体路径变量,必需 */ + +.process-drawer .el-drawer__header { + padding: 16px 16px 8px 16px; + margin: 0; + line-height: 24px; + font-size: 18px; + color: #303133; + box-sizing: border-box; + border-bottom: 1px solid #e8e8e8; +} + +div[class^="el-drawer"]:focus, +span:focus { + outline: none; +} + +.process-drawer .el-drawer__body { + box-sizing: border-box; + padding: 16px; + width: 100%; + overflow-y: auto; +} + +.process-design { + .el-table td, + .el-table th { + color: #333; + } + + .el-dialog__header { + padding: 16px 16px 8px 16px; + box-sizing: border-box; + border-bottom: 1px solid #e8e8e8; + } + .el-dialog__body { + padding: 16px; + max-height: 80vh; + box-sizing: border-box; + overflow-y: auto; + } + .el-dialog__footer { + padding: 16px; + box-sizing: border-box; + border-top: 1px solid #e8e8e8; + } + .el-dialog__close { + font-weight: 600; + } + .el-select { + width: 100%; + } + .el-divider:not(.el-divider--horizontal) { + margin: 0 8px ; + } + .el-divider.el-divider--horizontal { + margin: 16px 0; + } +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/index.scss b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/index.scss new file mode 100644 index 00000000..437680c1 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/index.scss @@ -0,0 +1,86 @@ +@import "./flow-element-variables.scss"; +@import "~bpmn-js-token-simulation/assets/css/bpmn-js-token-simulation.css"; +@import "~bpmn-js-token-simulation/assets/css/font-awesome.min.css"; +@import "~bpmn-js-token-simulation/assets/css/normalize.css"; +@import "~bpmn-js/dist/assets/diagram-js.css"; +@import "~bpmn-js/dist/assets/bpmn-font/css/bpmn.css"; +@import "~bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css"; +@import "./process-designer.scss"; +@import "./process-panel.scss"; + +$success-color: #4eb819; +$current-color: #409EFF; + +.process-viewer { + position: relative; + border: 1px solid #EFEFEF; + background: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+') repeat!important; + + .success-arrow { + fill: $success-color; + stroke: $success-color; + } + + .success-conditional { + fill: white; + stroke: $success-color; + } + + .success.djs-connection { + .djs-visual path { + stroke: $success-color!important; + marker-end: url(#sequenceflow-end-white-success)!important; + } + } + + .success.djs-connection.condition-expression { + .djs-visual path { + marker-start: url(#conditional-flow-marker-white-success)!important; + } + } + + .success.djs-shape { + .djs-visual rect { + stroke: $success-color!important; + fill: $success-color!important; + fill-opacity: 0.15!important; + } + + .djs-visual polygon { + stroke: $success-color!important; + } + + .djs-visual path:nth-child(2) { + stroke: $success-color!important; + fill: $success-color!important; + } + + .djs-visual circle { + stroke: $success-color!important; + fill: $success-color!important; + fill-opacity: 0.15!important; + } + } + + .current.djs-shape { + .djs-visual rect { + stroke: $current-color!important; + fill: $current-color!important; + fill-opacity: 0.15!important; + } + + .djs-visual polygon { + stroke: $current-color!important; + } + + .djs-visual circle { + stroke: $current-color!important; + fill: $current-color!important; + fill-opacity: 0.15!important; + } + } +} + +.process-viewer .djs-tooltip-container, .process-viewer .djs-overlay-container, .process-viewer .djs-palette { + display: none; +} \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/process-designer.scss b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/process-designer.scss new file mode 100644 index 00000000..a3b3d098 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/process-designer.scss @@ -0,0 +1,152 @@ +// 边框被 token-simulation 样式覆盖了 +.djs-palette { + background: var(--palette-background-color); + border: solid 1px var(--palette-border-color) !important; + border-radius: 2px; +} + +.my-process-designer { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + box-sizing: border-box; + .my-process-designer__header { + width: 100%; + min-height: 36px; + .el-button { + text-align: center; + } + .el-button-group { + margin: 4px; + } + .el-tooltip__popper { + .el-button { + width: 100%; + text-align: left; + padding-left: 8px; + padding-right: 8px; + } + .el-button:hover { + background: rgba(64, 158, 255, 0.8); + color: #ffffff; + } + } + .align { + position: relative; + i { + &:after { + content: "|"; + position: absolute; + transform: rotate(90deg) translate(200%, 60%); + } + } + } + .align.align-left i { + transform: rotate(90deg); + } + .align.align-right i { + transform: rotate(-90deg); + } + .align.align-top i { + transform: rotate(180deg); + } + .align.align-bottom i { + transform: rotate(0deg); + } + .align.align-center i { + transform: rotate(90deg); + &:after { + transform: rotate(90deg) translate(0, 60%); + } + } + .align.align-middle i { + transform: rotate(0deg); + &:after { + transform: rotate(90deg) translate(0, 60%); + } + } + } + .my-process-designer__container { + display: inline-flex; + width: 100%; + flex: 1; + .my-process-designer__canvas { + flex: 1; + height: 100%; + position: relative; + background: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+") + repeat !important; + div.toggle-mode { + display: none; + } + } + .my-process-designer__property-panel { + height: 100%; + overflow: scroll; + overflow-y: auto; + z-index: 10; + * { + box-sizing: border-box; + } + } + svg { + width: 100%; + height: 100%; + min-height: 100%; + overflow: hidden; + } + } +} + +//侧边栏配置 +.djs-palette.open { + .djs-palette-entries { + div[class^="bpmn-icon-"]:before, + div[class*="bpmn-icon-"]:before { + line-height: unset; + } + div.entry { + position: relative; + } + div.entry:hover { + &::after { + width: max-content; + content: attr(title); + vertical-align: text-bottom; + position: absolute; + right: -10px; + top: 0; + bottom: 0; + overflow: hidden; + transform: translateX(100%); + font-size: 0.5em; + display: inline-block; + text-decoration: inherit; + font-variant: normal; + text-transform: none; + background: #fafafa; + box-shadow: 0 0 6px #eeeeee; + border: 1px solid #cccccc; + box-sizing: border-box; + padding: 0 16px; + border-radius: 4px; + z-index: 100; + } + } + } +} +pre { + margin: 0; + height: 100%; + overflow: hidden; + max-height: calc(80vh - 32px); + overflow-y: auto; +} +.hljs { + word-break: break-word; + white-space: pre-wrap; +} +.hljs * { + font-family: Consolas, Monaco, monospace; +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/process-panel.scss b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/process-panel.scss new file mode 100644 index 00000000..5c7c3dfe --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/theme/process-panel.scss @@ -0,0 +1,110 @@ +.process-design { + .process-panel__container { + box-sizing: border-box; + padding: 0 8px; + border-left: 1px solid #eeeeee; + box-shadow: 0 0 8px #cccccc; + max-height: 100%; + overflow-y: scroll; + } + .panel-tab__title { + font-weight: 600; + padding: 0 8px; + font-size: 1.1em; + line-height: 1.2em; + i { + margin-right: 8px; + font-size: 1.2em; + } + } + .panel-tab__content { + width: 100%; + box-sizing: border-box; + border-top: 1px solid #eeeeee; + padding: 8px 16px; + .panel-tab__content--title { + display: flex; + justify-content: space-between; + padding-bottom: 8px; + span { + flex: 1; + text-align: left; + } + } + } + .element-property { + width: 100%; + display: flex; + align-items: flex-start; + margin: 8px 0; + .element-property__label { + display: block; + width: 90px; + text-align: right; + overflow: hidden; + padding-right: 12px; + line-height: 32px; + font-size: 14px; + box-sizing: border-box; + } + .element-property__value { + flex: 1; + line-height: 32px; + } + .el-form-item { + width: 100%; + margin-bottom: 0; + padding-bottom: 18px; + } + } + .list-property { + flex-direction: column; + .element-listener-item { + width: 100%; + display: inline-grid; + grid-template-columns: 16px auto 32px 32px; + grid-column-gap: 8px; + } + .element-listener-item + .element-listener-item { + margin-top: 8px; + } + } + .listener-filed__title { + display: inline-flex; + width: 100%; + justify-content: space-between; + align-items: center; + margin-top: 0; + span { + width: 200px; + text-align: left; + font-size: 14px; + } + i { + margin-right: 8px; + } + } + .element-drawer__button { + margin-top: 8px; + width: 100%; + display: inline-flex; + justify-content: space-around; + } + .element-drawer__button > .el-button { + width: 100%; + } + + .el-collapse-item__content { + padding-bottom: 0; + } + .el-input.is-disabled .el-input__inner { + color: #999999; + } + .el-form-item.el-form-item--mini { + margin-bottom: 0; + & + .el-form-item { + margin-top: 16px; + } + } +} + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/utils.js b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/utils.js new file mode 100644 index 00000000..d1a92a08 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/package/utils.js @@ -0,0 +1,69 @@ +// 创建监听器实例 +export function createListenerObject(options, isTask, prefix) { + const listenerObj = Object.create(null); + listenerObj.event = options.event; + isTask && (listenerObj.id = options.id); // 任务监听器特有的 id 字段 + switch (options.listenerType) { + case "scriptListener": + listenerObj.script = createScriptObject(options, prefix); + break; + case "expressionListener": + listenerObj.expression = options.expression; + break; + case "delegateExpressionListener": + listenerObj.delegateExpression = options.delegateExpression; + break; + default: + listenerObj.class = options.class; + } + // 注入字段 + if (options.fields) { + listenerObj.fields = options.fields.map(field => { + return createFieldObject(field, prefix); + }); + } + // 任务监听器的 定时器 设置 + if (isTask && options.event === "timeout" && !!options.eventDefinitionType) { + const timeDefinition = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body: options.eventTimeDefinitions }); + const TimerEventDefinition = window.bpmnInstances.moddle.create("bpmn:TimerEventDefinition", { + id: `TimerEventDefinition_${uuid(8)}`, + [`time${options.eventDefinitionType.replace(/^\S/, s => s.toUpperCase())}`]: timeDefinition + }); + listenerObj.eventDefinitions = [TimerEventDefinition]; + } + return window.bpmnInstances.moddle.create(`${prefix}:${isTask ? "TaskListener" : "ExecutionListener"}`, listenerObj); +} + +// 创建 监听器的注入字段 实例 +export function createFieldObject(option, prefix) { + const { name, fieldType, string, expression } = option; + const fieldConfig = fieldType === "string" ? { name, string } : { name, expression }; + return window.bpmnInstances.moddle.create(`${prefix}:Field`, fieldConfig); +} + +// 创建脚本实例 +export function createScriptObject(options, prefix) { + const { scriptType, scriptFormat, value, resource } = options; + const scriptConfig = scriptType === "inlineScript" ? { scriptFormat, value } : { scriptFormat, resource }; + return window.bpmnInstances.moddle.create(`${prefix}:Script`, scriptConfig); +} + +// 更新元素扩展属性 +export function updateElementExtensions(element, extensionList) { + const extensions = window.bpmnInstances.moddle.create("bpmn:ExtensionElements", { + values: extensionList + }); + window.bpmnInstances.modeling.updateProperties(element, { + extensionElements: extensions + }); +} + +// 创建一个id +export function uuid(length = 8, chars) { + let result = ""; + let charsString = chars || "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + for (let i = length; i > 0; --i) { + result += charsString[Math.floor(Math.random() * charsString.length)]; + } + return result; +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formAllInstance.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formAllInstance.vue new file mode 100644 index 00000000..1716975a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formAllInstance.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formMyApprovedTask.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formMyApprovedTask.vue new file mode 100644 index 00000000..c8fd203e --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formMyApprovedTask.vue @@ -0,0 +1,174 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formMyHistoryTask.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formMyHistoryTask.vue new file mode 100644 index 00000000..45fe3e98 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formMyHistoryTask.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formMyTask.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formMyTask.vue new file mode 100644 index 00000000..3892f513 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formMyTask.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formTaskProcessViewer.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formTaskProcessViewer.vue new file mode 100644 index 00000000..00cf4a87 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/formTaskProcessViewer.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/stopTask.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/stopTask.vue new file mode 100644 index 00000000..2cffae04 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/workflow/taskManager/stopTask.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/static/.gitkeep b/orange-demo-flowable/orange-demo-flowable-web/static/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-flowable/orange-demo-flowable-web/vue.config.js b/orange-demo-flowable/orange-demo-flowable-web/vue.config.js new file mode 100644 index 00000000..41f99a21 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/vue.config.js @@ -0,0 +1,5 @@ +module.exports = { + devServer: { + port: 8085 + } +}