gitextract_s5ijlxg7/ ├── .gitignore ├── LICENSE ├── README.md ├── yshop-drink-boot3/ │ ├── .gitignore │ ├── README.md │ ├── lombok.config │ ├── pom.xml │ ├── script/ │ │ ├── docker/ │ │ │ ├── Docker-HOWTO.md │ │ │ ├── docker-compose.yml │ │ │ └── docker.env │ │ └── shell/ │ │ └── deploy.sh │ ├── sql/ │ │ └── yixiang-drink-open.sql │ ├── yshop-dependencies/ │ │ └── pom.xml │ ├── yshop-framework/ │ │ ├── pom.xml │ │ ├── yshop-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── common/ │ │ │ │ ├── constant/ │ │ │ │ │ ├── ShopConstants.java │ │ │ │ │ └── SystemConfigConstants.java │ │ │ │ ├── core/ │ │ │ │ │ ├── IntArrayValuable.java │ │ │ │ │ └── KeyValue.java │ │ │ │ ├── enums/ │ │ │ │ │ ├── CommonStatusEnum.java │ │ │ │ │ ├── DateIntervalEnum.java │ │ │ │ │ ├── DocumentEnum.java │ │ │ │ │ ├── OrderInfoEnum.java │ │ │ │ │ ├── OrderTypeEnum.java │ │ │ │ │ ├── PayIdEnum.java │ │ │ │ │ ├── ShopCommonEnum.java │ │ │ │ │ ├── TerminalEnum.java │ │ │ │ │ ├── UserTypeEnum.java │ │ │ │ │ └── WebFilterOrderEnum.java │ │ │ │ ├── exception/ │ │ │ │ │ ├── ErrorCode.java │ │ │ │ │ ├── ServerException.java │ │ │ │ │ ├── ServiceException.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ ├── GlobalErrorCodeConstants.java │ │ │ │ │ │ └── ServiceErrorCodeRange.java │ │ │ │ │ └── util/ │ │ │ │ │ └── ServiceExceptionUtil.java │ │ │ │ ├── params/ │ │ │ │ │ └── QueryParam.java │ │ │ │ ├── pojo/ │ │ │ │ │ ├── CommonResult.java │ │ │ │ │ ├── PageParam.java │ │ │ │ │ ├── PageResult.java │ │ │ │ │ ├── SortablePageParam.java │ │ │ │ │ └── SortingField.java │ │ │ │ ├── serializer/ │ │ │ │ │ ├── BigDecimalSerializer.java │ │ │ │ │ └── DoubleSerializer.java │ │ │ │ ├── util/ │ │ │ │ │ ├── cache/ │ │ │ │ │ │ └── CacheUtils.java │ │ │ │ │ ├── collection/ │ │ │ │ │ │ ├── ArrayUtils.java │ │ │ │ │ │ ├── CollectionUtils.java │ │ │ │ │ │ ├── MapUtils.java │ │ │ │ │ │ └── SetUtils.java │ │ │ │ │ ├── date/ │ │ │ │ │ │ ├── DateUtils.java │ │ │ │ │ │ └── LocalDateTimeUtils.java │ │ │ │ │ ├── http/ │ │ │ │ │ │ └── HttpUtils.java │ │ │ │ │ ├── io/ │ │ │ │ │ │ ├── FileUtils.java │ │ │ │ │ │ └── IoUtils.java │ │ │ │ │ ├── json/ │ │ │ │ │ │ └── JsonUtils.java │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ └── TracerUtils.java │ │ │ │ │ ├── number/ │ │ │ │ │ │ ├── MoneyUtils.java │ │ │ │ │ │ └── NumberUtils.java │ │ │ │ │ ├── object/ │ │ │ │ │ │ ├── BeanUtils.java │ │ │ │ │ │ ├── ObjectUtils.java │ │ │ │ │ │ └── PageUtils.java │ │ │ │ │ ├── servlet/ │ │ │ │ │ │ └── ServletUtils.java │ │ │ │ │ ├── spring/ │ │ │ │ │ │ ├── SpringExpressionUtils.java │ │ │ │ │ │ └── SpringUtils.java │ │ │ │ │ ├── string/ │ │ │ │ │ │ └── StrUtils.java │ │ │ │ │ ├── validation/ │ │ │ │ │ │ └── ValidationUtils.java │ │ │ │ │ └── yshop/ │ │ │ │ │ └── LocationUtils.java │ │ │ │ └── validation/ │ │ │ │ ├── InEnum.java │ │ │ │ ├── InEnumCollectionValidator.java │ │ │ │ ├── InEnumValidator.java │ │ │ │ ├── Mobile.java │ │ │ │ ├── MobileValidator.java │ │ │ │ ├── Telephone.java │ │ │ │ ├── TelephoneValidator.java │ │ │ │ └── package-info.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── common/ │ │ │ └── util/ │ │ │ └── collection/ │ │ │ └── CollectionUtilsTest.java │ │ ├── yshop-spring-boot-starter-biz-data-permission/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ └── datapermission/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── YshopDataPermissionAutoConfiguration.java │ │ │ │ │ │ └── YshopDeptDataPermissionAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ └── DataPermission.java │ │ │ │ │ ├── aop/ │ │ │ │ │ │ ├── DataPermissionAnnotationAdvisor.java │ │ │ │ │ │ ├── DataPermissionAnnotationInterceptor.java │ │ │ │ │ │ └── DataPermissionContextHolder.java │ │ │ │ │ ├── db/ │ │ │ │ │ │ └── DataPermissionDatabaseInterceptor.java │ │ │ │ │ ├── rule/ │ │ │ │ │ │ ├── DataPermissionRule.java │ │ │ │ │ │ ├── DataPermissionRuleFactory.java │ │ │ │ │ │ ├── DataPermissionRuleFactoryImpl.java │ │ │ │ │ │ └── dept/ │ │ │ │ │ │ ├── DeptDataPermissionRule.java │ │ │ │ │ │ ├── DeptDataPermissionRuleCustomizer.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── util/ │ │ │ │ │ └── DataPermissionUtils.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── datapermission/ │ │ │ └── core/ │ │ │ ├── aop/ │ │ │ │ ├── DataPermissionAnnotationInterceptorTest.java │ │ │ │ └── DataPermissionContextHolderTest.java │ │ │ ├── db/ │ │ │ │ ├── DataPermissionDatabaseInterceptorTest.java │ │ │ │ └── DataPermissionDatabaseInterceptorTest2.java │ │ │ ├── rule/ │ │ │ │ ├── DataPermissionRuleFactoryImplTest.java │ │ │ │ └── dept/ │ │ │ │ └── DeptDataPermissionRuleTest.java │ │ │ └── util/ │ │ │ └── DataPermissionUtilsTest.java │ │ ├── yshop-spring-boot-starter-biz-ip/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ └── ip/ │ │ │ │ │ └── core/ │ │ │ │ │ ├── Area.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── AreaTypeEnum.java │ │ │ │ │ └── utils/ │ │ │ │ │ ├── AreaUtils.java │ │ │ │ │ └── IPUtils.java │ │ │ │ └── resources/ │ │ │ │ ├── area.csv │ │ │ │ └── ip2region.xdb │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── ip/ │ │ │ └── core/ │ │ │ └── utils/ │ │ │ ├── AreaUtilsTest.java │ │ │ └── IPUtilsTest.java │ │ ├── yshop-spring-boot-starter-biz-tenant/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ ├── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ └── tenant/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── TenantProperties.java │ │ │ │ │ │ └── YshopTenantAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── aop/ │ │ │ │ │ │ ├── TenantIgnore.java │ │ │ │ │ │ └── TenantIgnoreAspect.java │ │ │ │ │ ├── context/ │ │ │ │ │ │ └── TenantContextHolder.java │ │ │ │ │ ├── db/ │ │ │ │ │ │ ├── TenantBaseDO.java │ │ │ │ │ │ └── TenantDatabaseInterceptor.java │ │ │ │ │ ├── job/ │ │ │ │ │ │ ├── TenantJob.java │ │ │ │ │ │ └── TenantJobAspect.java │ │ │ │ │ ├── mq/ │ │ │ │ │ │ ├── kafka/ │ │ │ │ │ │ │ ├── TenantKafkaEnvironmentPostProcessor.java │ │ │ │ │ │ │ └── TenantKafkaProducerInterceptor.java │ │ │ │ │ │ ├── rabbitmq/ │ │ │ │ │ │ │ ├── TenantRabbitMQInitializer.java │ │ │ │ │ │ │ └── TenantRabbitMQMessagePostProcessor.java │ │ │ │ │ │ ├── redis/ │ │ │ │ │ │ │ └── TenantRedisMessageInterceptor.java │ │ │ │ │ │ └── rocketmq/ │ │ │ │ │ │ ├── TenantRocketMQConsumeMessageHook.java │ │ │ │ │ │ ├── TenantRocketMQInitializer.java │ │ │ │ │ │ └── TenantRocketMQSendMessageHook.java │ │ │ │ │ ├── redis/ │ │ │ │ │ │ └── TenantRedisCacheManager.java │ │ │ │ │ ├── security/ │ │ │ │ │ │ └── TenantSecurityWebFilter.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── TenantFrameworkService.java │ │ │ │ │ │ └── TenantFrameworkServiceImpl.java │ │ │ │ │ ├── util/ │ │ │ │ │ │ └── TenantUtils.java │ │ │ │ │ └── web/ │ │ │ │ │ └── TenantContextWebFilter.java │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── messaging/ │ │ │ │ └── handler/ │ │ │ │ └── invocation/ │ │ │ │ └── InvocableHandlerMethod.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── spring.factories │ │ ├── yshop-spring-boot-starter-excel/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopDictAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── DictFrameworkUtils.java │ │ │ │ │ └── excel/ │ │ │ │ │ └── core/ │ │ │ │ │ ├── annotations/ │ │ │ │ │ │ ├── DictFormat.java │ │ │ │ │ │ └── ExcelColumnSelect.java │ │ │ │ │ ├── convert/ │ │ │ │ │ │ ├── AreaConvert.java │ │ │ │ │ │ ├── DictConvert.java │ │ │ │ │ │ ├── JsonConvert.java │ │ │ │ │ │ └── MoneyConvert.java │ │ │ │ │ ├── function/ │ │ │ │ │ │ └── ExcelColumnSelectFunction.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ └── SelectSheetWriteHandler.java │ │ │ │ │ └── util/ │ │ │ │ │ └── ExcelUtils.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── dict/ │ │ │ └── core/ │ │ │ └── util/ │ │ │ └── DictFrameworkUtilsTest.java │ │ ├── yshop-spring-boot-starter-job/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── quartz/ │ │ │ │ ├── config/ │ │ │ │ │ ├── YshopAsyncAutoConfiguration.java │ │ │ │ │ └── YshopQuartzAutoConfiguration.java │ │ │ │ └── core/ │ │ │ │ ├── enums/ │ │ │ │ │ └── JobDataKeyEnum.java │ │ │ │ ├── handler/ │ │ │ │ │ ├── JobHandler.java │ │ │ │ │ └── JobHandlerInvoker.java │ │ │ │ ├── scheduler/ │ │ │ │ │ └── SchedulerManager.java │ │ │ │ ├── service/ │ │ │ │ │ └── JobLogFrameworkService.java │ │ │ │ └── util/ │ │ │ │ └── CronUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-monitor/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── tracer/ │ │ │ │ ├── config/ │ │ │ │ │ ├── TracerProperties.java │ │ │ │ │ ├── YshopMetricsAutoConfiguration.java │ │ │ │ │ └── YshopTracerAutoConfiguration.java │ │ │ │ └── core/ │ │ │ │ ├── annotation/ │ │ │ │ │ └── BizTrace.java │ │ │ │ ├── aop/ │ │ │ │ │ └── BizTraceAspect.java │ │ │ │ ├── filter/ │ │ │ │ │ └── TraceFilter.java │ │ │ │ └── util/ │ │ │ │ └── TracerFrameworkUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-mq/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── mq/ │ │ │ │ ├── rabbitmq/ │ │ │ │ │ └── config/ │ │ │ │ │ └── YshopRabbitMQAutoConfiguration.java │ │ │ │ └── redis/ │ │ │ │ ├── config/ │ │ │ │ │ ├── YshopRedisMQConsumerAutoConfiguration.java │ │ │ │ │ └── YshopRedisMQProducerAutoConfiguration.java │ │ │ │ └── core/ │ │ │ │ ├── RedisMQTemplate.java │ │ │ │ ├── interceptor/ │ │ │ │ │ └── RedisMessageInterceptor.java │ │ │ │ ├── job/ │ │ │ │ │ └── RedisPendingMessageResendJob.java │ │ │ │ ├── message/ │ │ │ │ │ └── AbstractRedisMessage.java │ │ │ │ ├── pubsub/ │ │ │ │ │ ├── AbstractRedisChannelMessage.java │ │ │ │ │ └── AbstractRedisChannelMessageListener.java │ │ │ │ └── stream/ │ │ │ │ ├── AbstractRedisStreamMessage.java │ │ │ │ └── AbstractRedisStreamMessageListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-mybatis/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ ├── datasource/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopDataSourceAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── DataSourceEnum.java │ │ │ │ │ └── filter/ │ │ │ │ │ └── DruidAdRemoveFilter.java │ │ │ │ ├── mybatis/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── IdTypeEnvironmentPostProcessor.java │ │ │ │ │ │ └── YshopMybatisAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ └── BaseDO.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── SqlConstants.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ └── DefaultDBFieldHandler.java │ │ │ │ │ ├── mapper/ │ │ │ │ │ │ └── BaseMapperX.java │ │ │ │ │ ├── query/ │ │ │ │ │ │ ├── LambdaQueryWrapperX.java │ │ │ │ │ │ ├── MPJLambdaWrapperX.java │ │ │ │ │ │ └── QueryWrapperX.java │ │ │ │ │ ├── type/ │ │ │ │ │ │ ├── EncryptTypeHandler.java │ │ │ │ │ │ ├── IntegerListTypeHandler.java │ │ │ │ │ │ ├── JsonLongSetTypeHandler.java │ │ │ │ │ │ ├── LongListTypeHandler.java │ │ │ │ │ │ └── StringListTypeHandler.java │ │ │ │ │ └── util/ │ │ │ │ │ ├── JdbcUtils.java │ │ │ │ │ └── MyBatisUtils.java │ │ │ │ └── translate/ │ │ │ │ ├── config/ │ │ │ │ │ └── YshopTranslateAutoConfiguration.java │ │ │ │ └── core/ │ │ │ │ └── TranslateUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── spring.factories │ │ ├── yshop-spring-boot-starter-protection/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ ├── idempotent/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopIdempotentConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ └── Idempotent.java │ │ │ │ │ ├── aop/ │ │ │ │ │ │ └── IdempotentAspect.java │ │ │ │ │ ├── keyresolver/ │ │ │ │ │ │ ├── IdempotentKeyResolver.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ ├── DefaultIdempotentKeyResolver.java │ │ │ │ │ │ ├── ExpressionIdempotentKeyResolver.java │ │ │ │ │ │ └── UserIdempotentKeyResolver.java │ │ │ │ │ └── redis/ │ │ │ │ │ └── IdempotentRedisDAO.java │ │ │ │ ├── lock4j/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopLock4jConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── DefaultLockFailureStrategy.java │ │ │ │ │ └── Lock4jRedisKeyConstants.java │ │ │ │ └── ratelimiter/ │ │ │ │ ├── config/ │ │ │ │ │ └── YshopRateLimiterConfiguration.java │ │ │ │ └── core/ │ │ │ │ ├── annotation/ │ │ │ │ │ └── RateLimiter.java │ │ │ │ ├── aop/ │ │ │ │ │ └── RateLimiterAspect.java │ │ │ │ ├── keyresolver/ │ │ │ │ │ ├── RateLimiterKeyResolver.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── ClientIpRateLimiterKeyResolver.java │ │ │ │ │ ├── DefaultRateLimiterKeyResolver.java │ │ │ │ │ ├── ExpressionRateLimiterKeyResolver.java │ │ │ │ │ ├── ServerNodeRateLimiterKeyResolver.java │ │ │ │ │ └── UserRateLimiterKeyResolver.java │ │ │ │ └── redis/ │ │ │ │ └── RateLimiterRedisDAO.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-redis/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── redis/ │ │ │ │ ├── config/ │ │ │ │ │ ├── RedissonConfig.java │ │ │ │ │ ├── YshopCacheAutoConfiguration.java │ │ │ │ │ ├── YshopCacheProperties.java │ │ │ │ │ └── YshopRedisAutoConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ ├── RedisKeyDefine.java │ │ │ │ │ ├── RedisKeyRegistry.java │ │ │ │ │ └── TimeoutRedisCacheManager.java │ │ │ │ └── util/ │ │ │ │ └── redis/ │ │ │ │ └── RedisUtil.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-security/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ ├── operatelog/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopOperateLogConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ └── service/ │ │ │ │ │ └── LogRecordServiceImpl.java │ │ │ │ └── security/ │ │ │ │ ├── config/ │ │ │ │ │ ├── AuthorizeRequestsCustomizer.java │ │ │ │ │ ├── SecurityProperties.java │ │ │ │ │ ├── YshopSecurityAutoConfiguration.java │ │ │ │ │ └── YshopWebSecurityConfigurerAdapter.java │ │ │ │ └── core/ │ │ │ │ ├── LoginUser.java │ │ │ │ ├── annotations/ │ │ │ │ │ └── PreAuthenticated.java │ │ │ │ ├── aop/ │ │ │ │ │ └── PreAuthenticatedAspect.java │ │ │ │ ├── context/ │ │ │ │ │ └── TransmittableThreadLocalSecurityContextHolderStrategy.java │ │ │ │ ├── filter/ │ │ │ │ │ └── TokenAuthenticationFilter.java │ │ │ │ ├── handler/ │ │ │ │ │ ├── AccessDeniedHandlerImpl.java │ │ │ │ │ └── AuthenticationEntryPointImpl.java │ │ │ │ ├── service/ │ │ │ │ │ ├── SecurityFrameworkService.java │ │ │ │ │ └── SecurityFrameworkServiceImpl.java │ │ │ │ └── util/ │ │ │ │ └── SecurityFrameworkUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-test/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── test/ │ │ │ ├── config/ │ │ │ │ ├── RedisTestConfiguration.java │ │ │ │ └── SqlInitializationTestConfiguration.java │ │ │ └── core/ │ │ │ ├── ut/ │ │ │ │ ├── BaseDbAndRedisUnitTest.java │ │ │ │ ├── BaseDbUnitTest.java │ │ │ │ ├── BaseMockitoUnitTest.java │ │ │ │ └── BaseRedisUnitTest.java │ │ │ └── util/ │ │ │ ├── AssertUtils.java │ │ │ └── RandomUtils.java │ │ ├── yshop-spring-boot-starter-web/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ ├── apilog/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopApiLogAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ └── ApiAccessLog.java │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ └── OperateTypeEnum.java │ │ │ │ │ │ ├── filter/ │ │ │ │ │ │ │ └── ApiAccessLogFilter.java │ │ │ │ │ │ ├── interceptor/ │ │ │ │ │ │ │ └── ApiAccessLogInterceptor.java │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── ApiAccessLogFrameworkService.java │ │ │ │ │ │ ├── ApiAccessLogFrameworkServiceImpl.java │ │ │ │ │ │ ├── ApiErrorLogFrameworkService.java │ │ │ │ │ │ └── ApiErrorLogFrameworkServiceImpl.java │ │ │ │ │ ├── banner/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopBannerAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── BannerApplicationRunner.java │ │ │ │ │ ├── desensitize/ │ │ │ │ │ │ └── core/ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ └── DesensitizeBy.java │ │ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ │ │ └── DesensitizationHandler.java │ │ │ │ │ │ │ └── serializer/ │ │ │ │ │ │ │ └── StringDesensitizeSerializer.java │ │ │ │ │ │ ├── regex/ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ ├── EmailDesensitize.java │ │ │ │ │ │ │ │ └── RegexDesensitize.java │ │ │ │ │ │ │ └── handler/ │ │ │ │ │ │ │ ├── AbstractRegexDesensitizationHandler.java │ │ │ │ │ │ │ ├── DefaultRegexDesensitizationHandler.java │ │ │ │ │ │ │ └── EmailDesensitizationHandler.java │ │ │ │ │ │ └── slider/ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ ├── BankCardDesensitize.java │ │ │ │ │ │ │ ├── CarLicenseDesensitize.java │ │ │ │ │ │ │ ├── ChineseNameDesensitize.java │ │ │ │ │ │ │ ├── FixedPhoneDesensitize.java │ │ │ │ │ │ │ ├── IdCardDesensitize.java │ │ │ │ │ │ │ ├── MobileDesensitize.java │ │ │ │ │ │ │ ├── PasswordDesensitize.java │ │ │ │ │ │ │ └── SliderDesensitize.java │ │ │ │ │ │ └── handler/ │ │ │ │ │ │ ├── AbstractSliderDesensitizationHandler.java │ │ │ │ │ │ ├── BankCardDesensitization.java │ │ │ │ │ │ ├── CarLicenseDesensitization.java │ │ │ │ │ │ ├── ChineseNameDesensitization.java │ │ │ │ │ │ ├── DefaultDesensitizationHandler.java │ │ │ │ │ │ ├── FixedPhoneDesensitization.java │ │ │ │ │ │ ├── IdCardDesensitization.java │ │ │ │ │ │ ├── MobileDesensitization.java │ │ │ │ │ │ └── PasswordDesensitization.java │ │ │ │ │ ├── jackson/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopJacksonAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── databind/ │ │ │ │ │ │ ├── NumberSerializer.java │ │ │ │ │ │ ├── TimestampLocalDateTimeDeserializer.java │ │ │ │ │ │ └── TimestampLocalDateTimeSerializer.java │ │ │ │ │ ├── swagger/ │ │ │ │ │ │ └── config/ │ │ │ │ │ │ ├── SwaggerProperties.java │ │ │ │ │ │ └── YshopSwaggerAutoConfiguration.java │ │ │ │ │ ├── web/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── WebProperties.java │ │ │ │ │ │ │ └── YshopWebAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ ├── filter/ │ │ │ │ │ │ │ ├── ApiRequestFilter.java │ │ │ │ │ │ │ ├── CacheRequestBodyFilter.java │ │ │ │ │ │ │ ├── CacheRequestBodyWrapper.java │ │ │ │ │ │ │ └── DemoFilter.java │ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ │ ├── GlobalExceptionHandler.java │ │ │ │ │ │ │ └── GlobalResponseBodyHandler.java │ │ │ │ │ │ └── util/ │ │ │ │ │ │ └── WebFrameworkUtils.java │ │ │ │ │ └── xss/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── XssProperties.java │ │ │ │ │ │ └── YshopXssAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── clean/ │ │ │ │ │ │ ├── JsoupXssCleaner.java │ │ │ │ │ │ └── XssCleaner.java │ │ │ │ │ ├── filter/ │ │ │ │ │ │ ├── XssFilter.java │ │ │ │ │ │ └── XssRequestWrapper.java │ │ │ │ │ └── json/ │ │ │ │ │ └── XssStringJsonDeserializer.java │ │ │ │ └── resources/ │ │ │ │ ├── META-INF/ │ │ │ │ │ └── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── banner.txt │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── desensitize/ │ │ │ └── core/ │ │ │ ├── DesensitizeTest.java │ │ │ ├── annotation/ │ │ │ │ └── Address.java │ │ │ └── handler/ │ │ │ └── AddressHandler.java │ │ └── yshop-spring-boot-starter-websocket/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── websocket/ │ │ │ ├── config/ │ │ │ │ ├── WebSocketProperties.java │ │ │ │ └── YshopWebSocketAutoConfiguration.java │ │ │ └── core/ │ │ │ ├── handler/ │ │ │ │ └── JsonWebSocketMessageHandler.java │ │ │ ├── listener/ │ │ │ │ └── WebSocketMessageListener.java │ │ │ ├── message/ │ │ │ │ └── JsonWebSocketMessage.java │ │ │ ├── security/ │ │ │ │ ├── LoginUserHandshakeInterceptor.java │ │ │ │ └── WebSocketAuthorizeRequestsCustomizer.java │ │ │ ├── sender/ │ │ │ │ ├── AbstractWebSocketMessageSender.java │ │ │ │ ├── WebSocketMessageSender.java │ │ │ │ ├── kafka/ │ │ │ │ │ ├── KafkaWebSocketMessage.java │ │ │ │ │ ├── KafkaWebSocketMessageConsumer.java │ │ │ │ │ └── KafkaWebSocketMessageSender.java │ │ │ │ ├── local/ │ │ │ │ │ └── LocalWebSocketMessageSender.java │ │ │ │ ├── rabbitmq/ │ │ │ │ │ ├── RabbitMQWebSocketMessage.java │ │ │ │ │ ├── RabbitMQWebSocketMessageConsumer.java │ │ │ │ │ └── RabbitMQWebSocketMessageSender.java │ │ │ │ ├── redis/ │ │ │ │ │ ├── RedisWebSocketMessage.java │ │ │ │ │ ├── RedisWebSocketMessageConsumer.java │ │ │ │ │ └── RedisWebSocketMessageSender.java │ │ │ │ └── rocketmq/ │ │ │ │ ├── RocketMQWebSocketMessage.java │ │ │ │ ├── RocketMQWebSocketMessageConsumer.java │ │ │ │ └── RocketMQWebSocketMessageSender.java │ │ │ ├── session/ │ │ │ │ ├── WebSocketSessionHandlerDecorator.java │ │ │ │ ├── WebSocketSessionManager.java │ │ │ │ └── WebSocketSessionManagerImpl.java │ │ │ └── util/ │ │ │ └── WebSocketFrameworkUtils.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring/ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ ├── yshop-module-express/ │ │ ├── pom.xml │ │ ├── yshop-module-express-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── express/ │ │ │ ├── enums/ │ │ │ │ └── ErrorCodeConstants.java │ │ │ └── kdniao/ │ │ │ ├── enums/ │ │ │ │ ├── KdniaoLogisticsCodeEnum.java │ │ │ │ └── KdniaoLogisticsStatusEnum.java │ │ │ ├── model/ │ │ │ │ ├── dto/ │ │ │ │ │ ├── KdniaoApiBaseDTO.java │ │ │ │ │ ├── KdniaoApiDTO.java │ │ │ │ │ ├── KdniaoElectronicsOrderDTO.java │ │ │ │ │ └── KdniaoElectronicsOrderGoodsDTO.java │ │ │ │ └── vo/ │ │ │ │ ├── KdniaoApiVO.java │ │ │ │ ├── KdniaoLogisticsVO.java │ │ │ │ └── KdniaoOrderVO.java │ │ │ └── util/ │ │ │ └── KdniaoUtil.java │ │ └── yshop-module-express-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── co/ │ │ └── yixiang/ │ │ └── yshop/ │ │ └── module/ │ │ └── express/ │ │ ├── controller/ │ │ │ ├── admin/ │ │ │ │ └── express/ │ │ │ │ ├── ExpressController.java │ │ │ │ └── vo/ │ │ │ │ ├── ExpressBaseVO.java │ │ │ │ ├── ExpressCreateReqVO.java │ │ │ │ ├── ExpressExcelVO.java │ │ │ │ ├── ExpressExportReqVO.java │ │ │ │ ├── ExpressPageReqVO.java │ │ │ │ ├── ExpressRespVO.java │ │ │ │ └── ExpressUpdateReqVO.java │ │ │ └── app/ │ │ │ └── express/ │ │ │ └── AppExpressController.java │ │ ├── convert/ │ │ │ └── express/ │ │ │ └── ExpressConvert.java │ │ ├── dal/ │ │ │ ├── dataobject/ │ │ │ │ └── express/ │ │ │ │ └── ExpressDO.java │ │ │ ├── mysql/ │ │ │ │ └── express/ │ │ │ │ └── ExpressMapper.java │ │ │ └── redis/ │ │ │ ├── RedisKeyConstants.java │ │ │ └── express/ │ │ │ └── ExpressRedisDAO.java │ │ └── service/ │ │ └── express/ │ │ ├── ExpressService.java │ │ └── ExpressServiceImpl.java │ ├── yshop-module-infra/ │ │ ├── pom.xml │ │ ├── yshop-module-infra-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── infra/ │ │ │ ├── api/ │ │ │ │ ├── file/ │ │ │ │ │ └── FileApi.java │ │ │ │ ├── logger/ │ │ │ │ │ ├── ApiAccessLogApi.java │ │ │ │ │ ├── ApiErrorLogApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── ApiAccessLogCreateReqDTO.java │ │ │ │ │ └── ApiErrorLogCreateReqDTO.java │ │ │ │ └── websocket/ │ │ │ │ └── WebSocketSenderApi.java │ │ │ └── enums/ │ │ │ ├── DictTypeConstants.java │ │ │ └── ErrorCodeConstants.java │ │ └── yshop-module-infra-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── infra/ │ │ │ ├── api/ │ │ │ │ ├── file/ │ │ │ │ │ └── FileApiImpl.java │ │ │ │ ├── logger/ │ │ │ │ │ ├── ApiAccessLogApiImpl.java │ │ │ │ │ └── ApiErrorLogApiImpl.java │ │ │ │ └── websocket/ │ │ │ │ └── WebSocketSenderApiImpl.java │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── codegen/ │ │ │ │ │ │ ├── CodegenController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── CodegenCreateListReqVO.java │ │ │ │ │ │ ├── CodegenDetailRespVO.java │ │ │ │ │ │ ├── CodegenPreviewRespVO.java │ │ │ │ │ │ ├── CodegenUpdateReqVO.java │ │ │ │ │ │ ├── column/ │ │ │ │ │ │ │ ├── CodegenColumnRespVO.java │ │ │ │ │ │ │ └── CodegenColumnSaveReqVO.java │ │ │ │ │ │ └── table/ │ │ │ │ │ │ ├── CodegenTablePageReqVO.java │ │ │ │ │ │ ├── CodegenTableRespVO.java │ │ │ │ │ │ ├── CodegenTableSaveReqVO.java │ │ │ │ │ │ └── DatabaseTableRespVO.java │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── ConfigController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── ConfigPageReqVO.java │ │ │ │ │ │ ├── ConfigRespVO.java │ │ │ │ │ │ └── ConfigSaveReqVO.java │ │ │ │ │ ├── db/ │ │ │ │ │ │ ├── DataSourceConfigController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── DataSourceConfigRespVO.java │ │ │ │ │ │ └── DataSourceConfigSaveReqVO.java │ │ │ │ │ ├── demo/ │ │ │ │ │ │ ├── demo01/ │ │ │ │ │ │ │ ├── Demo01ContactController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── Demo01ContactPageReqVO.java │ │ │ │ │ │ │ ├── Demo01ContactRespVO.java │ │ │ │ │ │ │ └── Demo01ContactSaveReqVO.java │ │ │ │ │ │ ├── demo02/ │ │ │ │ │ │ │ ├── Demo02CategoryController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── Demo02CategoryListReqVO.java │ │ │ │ │ │ │ ├── Demo02CategoryRespVO.java │ │ │ │ │ │ │ └── Demo02CategorySaveReqVO.java │ │ │ │ │ │ └── demo03/ │ │ │ │ │ │ ├── Demo03StudentController.java │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── Demo03StudentPageReqVO.java │ │ │ │ │ │ ├── Demo03StudentRespVO.java │ │ │ │ │ │ └── Demo03StudentSaveReqVO.java │ │ │ │ │ ├── file/ │ │ │ │ │ │ ├── FileConfigController.java │ │ │ │ │ │ ├── FileController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── FileConfigPageReqVO.java │ │ │ │ │ │ │ ├── FileConfigRespVO.java │ │ │ │ │ │ │ └── FileConfigSaveReqVO.java │ │ │ │ │ │ └── file/ │ │ │ │ │ │ ├── FileCreateReqVO.java │ │ │ │ │ │ ├── FilePageReqVO.java │ │ │ │ │ │ ├── FilePresignedUrlRespVO.java │ │ │ │ │ │ ├── FileRespVO.java │ │ │ │ │ │ └── FileUploadReqVO.java │ │ │ │ │ ├── job/ │ │ │ │ │ │ ├── JobController.http │ │ │ │ │ │ ├── JobController.java │ │ │ │ │ │ ├── JobLogController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── job/ │ │ │ │ │ │ │ ├── JobPageReqVO.java │ │ │ │ │ │ │ ├── JobRespVO.java │ │ │ │ │ │ │ └── JobSaveReqVO.java │ │ │ │ │ │ └── log/ │ │ │ │ │ │ ├── JobLogPageReqVO.java │ │ │ │ │ │ └── JobLogRespVO.java │ │ │ │ │ ├── logger/ │ │ │ │ │ │ ├── ApiAccessLogController.java │ │ │ │ │ │ ├── ApiErrorLogController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── apiaccesslog/ │ │ │ │ │ │ │ ├── ApiAccessLogPageReqVO.java │ │ │ │ │ │ │ └── ApiAccessLogRespVO.java │ │ │ │ │ │ └── apierrorlog/ │ │ │ │ │ │ ├── ApiErrorLogPageReqVO.java │ │ │ │ │ │ └── ApiErrorLogRespVO.java │ │ │ │ │ └── redis/ │ │ │ │ │ ├── RedisController.http │ │ │ │ │ ├── RedisController.java │ │ │ │ │ └── vo/ │ │ │ │ │ └── RedisMonitorRespVO.java │ │ │ │ └── app/ │ │ │ │ └── file/ │ │ │ │ ├── AppFileController.java │ │ │ │ └── vo/ │ │ │ │ └── AppFileUploadReqVO.java │ │ │ ├── convert/ │ │ │ │ ├── codegen/ │ │ │ │ │ └── CodegenConvert.java │ │ │ │ ├── config/ │ │ │ │ │ └── ConfigConvert.java │ │ │ │ ├── file/ │ │ │ │ │ └── FileConfigConvert.java │ │ │ │ └── redis/ │ │ │ │ └── RedisConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── codegen/ │ │ │ │ │ │ ├── CodegenColumnDO.java │ │ │ │ │ │ └── CodegenTableDO.java │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── ConfigDO.java │ │ │ │ │ ├── db/ │ │ │ │ │ │ └── DataSourceConfigDO.java │ │ │ │ │ ├── demo/ │ │ │ │ │ │ ├── demo01/ │ │ │ │ │ │ │ └── Demo01ContactDO.java │ │ │ │ │ │ ├── demo02/ │ │ │ │ │ │ │ └── Demo02CategoryDO.java │ │ │ │ │ │ └── demo03/ │ │ │ │ │ │ ├── Demo03CourseDO.java │ │ │ │ │ │ ├── Demo03GradeDO.java │ │ │ │ │ │ └── Demo03StudentDO.java │ │ │ │ │ ├── file/ │ │ │ │ │ │ ├── FileConfigDO.java │ │ │ │ │ │ ├── FileContentDO.java │ │ │ │ │ │ └── FileDO.java │ │ │ │ │ ├── job/ │ │ │ │ │ │ ├── JobDO.java │ │ │ │ │ │ └── JobLogDO.java │ │ │ │ │ └── logger/ │ │ │ │ │ ├── ApiAccessLogDO.java │ │ │ │ │ └── ApiErrorLogDO.java │ │ │ │ └── mysql/ │ │ │ │ ├── codegen/ │ │ │ │ │ ├── CodegenColumnMapper.java │ │ │ │ │ └── CodegenTableMapper.java │ │ │ │ ├── config/ │ │ │ │ │ └── ConfigMapper.java │ │ │ │ ├── db/ │ │ │ │ │ └── DataSourceConfigMapper.java │ │ │ │ ├── demo/ │ │ │ │ │ ├── demo01/ │ │ │ │ │ │ └── Demo01ContactMapper.java │ │ │ │ │ ├── demo02/ │ │ │ │ │ │ └── Demo02CategoryMapper.java │ │ │ │ │ └── demo03/ │ │ │ │ │ ├── Demo03CourseMapper.java │ │ │ │ │ ├── Demo03GradeMapper.java │ │ │ │ │ └── Demo03StudentMapper.java │ │ │ │ ├── file/ │ │ │ │ │ ├── FileConfigMapper.java │ │ │ │ │ ├── FileContentMapper.java │ │ │ │ │ └── FileMapper.java │ │ │ │ ├── job/ │ │ │ │ │ ├── JobLogMapper.java │ │ │ │ │ └── JobMapper.java │ │ │ │ └── logger/ │ │ │ │ ├── ApiAccessLogMapper.java │ │ │ │ └── ApiErrorLogMapper.java │ │ │ ├── enums/ │ │ │ │ ├── codegen/ │ │ │ │ │ ├── CodegenColumnHtmlTypeEnum.java │ │ │ │ │ ├── CodegenColumnListConditionEnum.java │ │ │ │ │ ├── CodegenFrontTypeEnum.java │ │ │ │ │ ├── CodegenSceneEnum.java │ │ │ │ │ └── CodegenTemplateTypeEnum.java │ │ │ │ ├── config/ │ │ │ │ │ └── ConfigTypeEnum.java │ │ │ │ ├── job/ │ │ │ │ │ ├── JobLogStatusEnum.java │ │ │ │ │ └── JobStatusEnum.java │ │ │ │ └── logger/ │ │ │ │ └── ApiErrorLogProcessStatusEnum.java │ │ │ ├── framework/ │ │ │ │ ├── codegen/ │ │ │ │ │ └── config/ │ │ │ │ │ ├── CodegenConfiguration.java │ │ │ │ │ └── CodegenProperties.java │ │ │ │ ├── file/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopFileAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ ├── AbstractFileClient.java │ │ │ │ │ │ ├── FileClient.java │ │ │ │ │ │ ├── FileClientConfig.java │ │ │ │ │ │ ├── FileClientFactory.java │ │ │ │ │ │ ├── FileClientFactoryImpl.java │ │ │ │ │ │ ├── db/ │ │ │ │ │ │ │ ├── DBFileClient.java │ │ │ │ │ │ │ └── DBFileClientConfig.java │ │ │ │ │ │ ├── ftp/ │ │ │ │ │ │ │ ├── FtpFileClient.java │ │ │ │ │ │ │ └── FtpFileClientConfig.java │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ ├── LocalFileClient.java │ │ │ │ │ │ │ └── LocalFileClientConfig.java │ │ │ │ │ │ ├── s3/ │ │ │ │ │ │ │ ├── FilePresignedUrlRespDTO.java │ │ │ │ │ │ │ ├── S3FileClient.java │ │ │ │ │ │ │ └── S3FileClientConfig.java │ │ │ │ │ │ └── sftp/ │ │ │ │ │ │ ├── SftpFileClient.java │ │ │ │ │ │ └── SftpFileClientConfig.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── FileStorageEnum.java │ │ │ │ │ └── utils/ │ │ │ │ │ └── FileTypeUtils.java │ │ │ │ ├── monitor/ │ │ │ │ │ └── config/ │ │ │ │ │ └── AdminServerConfiguration.java │ │ │ │ ├── security/ │ │ │ │ │ └── config/ │ │ │ │ │ └── SecurityConfiguration.java │ │ │ │ └── web/ │ │ │ │ └── config/ │ │ │ │ └── InfraWebConfiguration.java │ │ │ ├── job/ │ │ │ │ ├── job/ │ │ │ │ │ └── JobLogCleanJob.java │ │ │ │ └── logger/ │ │ │ │ ├── AccessLogCleanJob.java │ │ │ │ └── ErrorLogCleanJob.java │ │ │ ├── service/ │ │ │ │ ├── codegen/ │ │ │ │ │ ├── CodegenService.java │ │ │ │ │ ├── CodegenServiceImpl.java │ │ │ │ │ └── inner/ │ │ │ │ │ ├── CodegenBuilder.java │ │ │ │ │ └── CodegenEngine.java │ │ │ │ ├── config/ │ │ │ │ │ ├── ConfigService.java │ │ │ │ │ └── ConfigServiceImpl.java │ │ │ │ ├── db/ │ │ │ │ │ ├── DataSourceConfigService.java │ │ │ │ │ ├── DataSourceConfigServiceImpl.java │ │ │ │ │ ├── DatabaseTableService.java │ │ │ │ │ └── DatabaseTableServiceImpl.java │ │ │ │ ├── demo/ │ │ │ │ │ ├── demo01/ │ │ │ │ │ │ ├── Demo01ContactService.java │ │ │ │ │ │ └── Demo01ContactServiceImpl.java │ │ │ │ │ ├── demo02/ │ │ │ │ │ │ ├── Demo02CategoryService.java │ │ │ │ │ │ └── Demo02CategoryServiceImpl.java │ │ │ │ │ └── demo03/ │ │ │ │ │ ├── Demo03StudentService.java │ │ │ │ │ └── Demo03StudentServiceImpl.java │ │ │ │ ├── file/ │ │ │ │ │ ├── FileConfigService.java │ │ │ │ │ ├── FileConfigServiceImpl.java │ │ │ │ │ ├── FileService.java │ │ │ │ │ └── FileServiceImpl.java │ │ │ │ ├── job/ │ │ │ │ │ ├── JobLogService.java │ │ │ │ │ ├── JobLogServiceImpl.java │ │ │ │ │ ├── JobService.java │ │ │ │ │ └── JobServiceImpl.java │ │ │ │ └── logger/ │ │ │ │ ├── ApiAccessLogService.java │ │ │ │ ├── ApiAccessLogServiceImpl.java │ │ │ │ ├── ApiErrorLogService.java │ │ │ │ └── ApiErrorLogServiceImpl.java │ │ │ └── websocket/ │ │ │ ├── DemoWebSocketMessageListener.java │ │ │ └── message/ │ │ │ ├── DemoReceiveMessage.java │ │ │ └── DemoSendMessage.java │ │ └── resources/ │ │ └── codegen/ │ │ ├── java/ │ │ │ ├── controller/ │ │ │ │ ├── controller.vm │ │ │ │ └── vo/ │ │ │ │ ├── listReqVO.vm │ │ │ │ ├── pageReqVO.vm │ │ │ │ ├── respVO.vm │ │ │ │ └── saveReqVO.vm │ │ │ ├── dal/ │ │ │ │ ├── do.vm │ │ │ │ ├── do_sub.vm │ │ │ │ ├── mapper.vm │ │ │ │ ├── mapper.xml.vm │ │ │ │ └── mapper_sub.vm │ │ │ ├── enums/ │ │ │ │ └── errorcode.vm │ │ │ ├── service/ │ │ │ │ ├── service.vm │ │ │ │ └── serviceImpl.vm │ │ │ └── test/ │ │ │ └── serviceTest.vm │ │ ├── sql/ │ │ │ ├── h2.vm │ │ │ └── sql.vm │ │ ├── vue/ │ │ │ ├── api/ │ │ │ │ └── api.js.vm │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ ├── form_sub_erp.vue.vm │ │ │ │ ├── form_sub_inner.vue.vm │ │ │ │ ├── form_sub_normal.vue.vm │ │ │ │ ├── list_sub_erp.vue.vm │ │ │ │ └── list_sub_inner.vue.vm │ │ │ ├── form.vue.vm │ │ │ └── index.vue.vm │ │ ├── vue3/ │ │ │ ├── api/ │ │ │ │ └── api.ts.vm │ │ │ └── views/ │ │ │ ├── components/ │ │ │ │ ├── form_sub_erp.vue.vm │ │ │ │ ├── form_sub_inner.vue.vm │ │ │ │ ├── form_sub_normal.vue.vm │ │ │ │ ├── list_sub_erp.vue.vm │ │ │ │ └── list_sub_inner.vue.vm │ │ │ ├── form.vue.vm │ │ │ └── index.vue.vm │ │ ├── vue3_schema/ │ │ │ ├── api/ │ │ │ │ └── api.ts.vm │ │ │ └── views/ │ │ │ ├── data.ts.vm │ │ │ ├── form.vue.vm │ │ │ └── index.vue.vm │ │ └── vue3_vben/ │ │ ├── api/ │ │ │ └── api.ts.vm │ │ └── views/ │ │ ├── data.ts.vm │ │ ├── form.vue.vm │ │ └── index.vue.vm │ ├── yshop-module-mall/ │ │ ├── pom.xml │ │ ├── yshop-module-order-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── order/ │ │ │ └── enums/ │ │ │ ├── AdminAfterOrderStatusEnum.java │ │ │ ├── AdminOrderStatusEnum.java │ │ │ ├── AfterChangeTypeEnum.java │ │ │ ├── AfterSalesStatusEnum.java │ │ │ ├── AfterStatusEnum.java │ │ │ ├── AfterTypeEnum.java │ │ │ ├── AppFromEnum.java │ │ │ ├── ErrorCodeConstants.java │ │ │ ├── OrderLogEnum.java │ │ │ ├── OrderStatusEnum.java │ │ │ ├── PayTypeEnum.java │ │ │ ├── ShippingTempEnum.java │ │ │ └── UpdateOrderEnum.java │ │ ├── yshop-module-order-biz/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── module/ │ │ │ │ └── order/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ └── storeorder/ │ │ │ │ │ │ ├── StoreOrderController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── ShoperOrderTimeDataVo.java │ │ │ │ │ │ ├── StoreOrderBaseVO.java │ │ │ │ │ │ ├── StoreOrderCreateReqVO.java │ │ │ │ │ │ ├── StoreOrderExcelVO.java │ │ │ │ │ │ ├── StoreOrderExportReqVO.java │ │ │ │ │ │ ├── StoreOrderPageReqVO.java │ │ │ │ │ │ ├── StoreOrderRefundVO.java │ │ │ │ │ │ ├── StoreOrderRespVO.java │ │ │ │ │ │ └── StoreOrderUpdateReqVO.java │ │ │ │ │ └── app/ │ │ │ │ │ └── order/ │ │ │ │ │ ├── AppOrderController.java │ │ │ │ │ ├── param/ │ │ │ │ │ │ ├── AppComputeOrderParam.java │ │ │ │ │ │ ├── AppConfirmOrderParam.java │ │ │ │ │ │ ├── AppDoOrderParam.java │ │ │ │ │ │ ├── AppExpressParam.java │ │ │ │ │ │ ├── AppHandleOrderParam.java │ │ │ │ │ │ ├── AppOrderParam.java │ │ │ │ │ │ ├── AppPayParam.java │ │ │ │ │ │ ├── AppProductReplyParam.java │ │ │ │ │ │ └── AppRefundParam.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppComputeVo.java │ │ │ │ │ ├── AppConfirmOrderVo.java │ │ │ │ │ └── AppStoreOrderQueryVo.java │ │ │ │ ├── convert/ │ │ │ │ │ ├── storeorder/ │ │ │ │ │ │ └── StoreOrderConvert.java │ │ │ │ │ ├── storeordercartinfo/ │ │ │ │ │ │ └── StoreOrderCartInfoConvert.java │ │ │ │ │ └── storeorderstatus/ │ │ │ │ │ └── StoreOrderStatusConvert.java │ │ │ │ ├── dal/ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ ├── ordernumber/ │ │ │ │ │ │ │ └── OrderNumberDO.java │ │ │ │ │ │ ├── storeorder/ │ │ │ │ │ │ │ └── StoreOrderDO.java │ │ │ │ │ │ ├── storeordercartinfo/ │ │ │ │ │ │ │ └── StoreOrderCartInfoDO.java │ │ │ │ │ │ └── storeorderstatus/ │ │ │ │ │ │ └── StoreOrderStatusDO.java │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ ├── ordernumber/ │ │ │ │ │ │ │ └── OrderNumberMapper.java │ │ │ │ │ │ ├── storeorder/ │ │ │ │ │ │ │ └── StoreOrderMapper.java │ │ │ │ │ │ ├── storeordercartinfo/ │ │ │ │ │ │ │ └── StoreOrderCartInfoMapper.java │ │ │ │ │ │ └── storeorderstatus/ │ │ │ │ │ │ └── StoreOrderStatusMapper.java │ │ │ │ │ └── redis/ │ │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ │ ├── ofterorder/ │ │ │ │ │ │ └── AfterOrderRedisDAO.java │ │ │ │ │ └── order/ │ │ │ │ │ ├── AsyncCountRedisDAO.java │ │ │ │ │ ├── AsyncOrderRedisDAO.java │ │ │ │ │ ├── OrderRedisDAO.java │ │ │ │ │ └── PrintMechinRedisDAO.java │ │ │ │ ├── handle/ │ │ │ │ │ ├── OrderAutoConfirmListener.java │ │ │ │ │ ├── OrderUnPayListener.java │ │ │ │ │ └── RedisDelayHandle.java │ │ │ │ ├── mq/ │ │ │ │ │ └── consumer/ │ │ │ │ │ └── PayNoticeConsumer.java │ │ │ │ └── service/ │ │ │ │ ├── storeorder/ │ │ │ │ │ ├── AppStoreOrderService.java │ │ │ │ │ ├── AppStoreOrderServiceImpl.java │ │ │ │ │ ├── AsynStoreOrderServiceImpl.java │ │ │ │ │ ├── AsyncStoreOrderService.java │ │ │ │ │ ├── StoreOrderService.java │ │ │ │ │ ├── StoreOrderServiceImpl.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── CacheDto.java │ │ │ │ │ ├── ChartDataDto.java │ │ │ │ │ ├── CountDto.java │ │ │ │ │ ├── OrderCountDto.java │ │ │ │ │ ├── OrderExtendDto.java │ │ │ │ │ ├── OrderTimeDataDto.java │ │ │ │ │ ├── OtherDto.java │ │ │ │ │ ├── PriceGroupDto.java │ │ │ │ │ ├── ProductAttrDto.java │ │ │ │ │ ├── ProductDto.java │ │ │ │ │ ├── StatusDto.java │ │ │ │ │ ├── StoreOrderCartInfoDto.java │ │ │ │ │ ├── TemplateDto.java │ │ │ │ │ ├── YxExpressDto.java │ │ │ │ │ ├── YxOrderNowOrderStatusDto.java │ │ │ │ │ ├── YxStoreOrderCartInfoDto.java │ │ │ │ │ └── YxStoreOrderStatusDto.java │ │ │ │ ├── storeordercartinfo/ │ │ │ │ │ ├── StoreOrderCartInfoService.java │ │ │ │ │ └── StoreOrderCartInfoServiceImpl.java │ │ │ │ └── storeorderstatus/ │ │ │ │ ├── StoreOrderStatusService.java │ │ │ │ └── StoreOrderStatusServiceImpl.java │ │ │ └── resources/ │ │ │ └── mapper/ │ │ │ ├── express/ │ │ │ │ └── ExpressMapper.xml │ │ │ ├── storeorder/ │ │ │ │ └── StoreOrderMapper.xml │ │ │ ├── storeordercartinfo/ │ │ │ │ └── StoreOrderCartInfoMapper.xml │ │ │ └── storeorderstatus/ │ │ │ └── StoreOrderStatusMapper.xml │ │ ├── yshop-module-product-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── product/ │ │ │ ├── api/ │ │ │ │ ├── package-info.java │ │ │ │ ├── product/ │ │ │ │ │ └── ProductApi.java │ │ │ │ └── property/ │ │ │ │ ├── ProductPropertyValueApi.java │ │ │ │ └── dto/ │ │ │ │ └── ProductPropertyValueDetailRespDTO.java │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ ├── ProductConstants.java │ │ │ ├── comment/ │ │ │ │ └── ProductCommentAuditStatusEnum.java │ │ │ ├── delivery/ │ │ │ │ └── DeliveryTypeEnum.java │ │ │ ├── group/ │ │ │ │ └── ProductGroupStyleEnum.java │ │ │ ├── product/ │ │ │ │ ├── DefaultEnum.java │ │ │ │ ├── ProductEnum.java │ │ │ │ ├── ProductTypeEnum.java │ │ │ │ ├── RelationCateEnum.java │ │ │ │ ├── RelationEnum.java │ │ │ │ ├── ScoreEnum.java │ │ │ │ └── SpecTypeEnum.java │ │ │ └── spu/ │ │ │ ├── ProductSpuSpecTypeEnum.java │ │ │ └── ProductSpuStatusEnum.java │ │ ├── yshop-module-product-biz/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── module/ │ │ │ │ └── product/ │ │ │ │ ├── api/ │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── product/ │ │ │ │ │ └── ProductApiImpl.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── ProductCategoryController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── ProductCategoryBaseVO.java │ │ │ │ │ │ │ ├── ProductCategoryCreateReqVO.java │ │ │ │ │ │ │ ├── ProductCategoryListReqVO.java │ │ │ │ │ │ │ ├── ProductCategoryRespVO.java │ │ │ │ │ │ │ └── ProductCategoryUpdateReqVO.java │ │ │ │ │ │ ├── storeproduct/ │ │ │ │ │ │ │ ├── StoreProductController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── StoreProductBaseVO.java │ │ │ │ │ │ │ ├── StoreProductCreateReqVO.java │ │ │ │ │ │ │ ├── StoreProductExcelVO.java │ │ │ │ │ │ │ ├── StoreProductExportReqVO.java │ │ │ │ │ │ │ ├── StoreProductPageReqVO.java │ │ │ │ │ │ │ ├── StoreProductRespVO.java │ │ │ │ │ │ │ └── StoreProductUpdateReqVO.java │ │ │ │ │ │ ├── storeproductreply/ │ │ │ │ │ │ │ ├── StoreProductReplyController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── StoreProductReplyBaseVO.java │ │ │ │ │ │ │ ├── StoreProductReplyPageReqVO.java │ │ │ │ │ │ │ ├── StoreProductReplyRespVO.java │ │ │ │ │ │ │ └── StoreProductReplyUpdateReqVO.java │ │ │ │ │ │ └── storeproductrule/ │ │ │ │ │ │ ├── StoreProductRuleController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── StoreProductRuleBaseVO.java │ │ │ │ │ │ ├── StoreProductRuleCreateReqVO.java │ │ │ │ │ │ ├── StoreProductRuleExcelVO.java │ │ │ │ │ │ ├── StoreProductRuleExportReqVO.java │ │ │ │ │ │ ├── StoreProductRulePageReqVO.java │ │ │ │ │ │ ├── StoreProductRuleRespVO.java │ │ │ │ │ │ └── StoreProductRuleUpdateReqVO.java │ │ │ │ │ └── app/ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppStoreCartQueryVo.java │ │ │ │ │ ├── category/ │ │ │ │ │ │ ├── AppCategoryController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppCategoryRespVO.java │ │ │ │ │ └── product/ │ │ │ │ │ ├── AppStoreProductController.java │ │ │ │ │ ├── param/ │ │ │ │ │ │ └── AppStoreProductQueryParam.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppIndexVo.java │ │ │ │ │ ├── AppProductVo.java │ │ │ │ │ ├── AppReplyCountVo.java │ │ │ │ │ ├── AppStoreProductAttrQueryVo.java │ │ │ │ │ ├── AppStoreProductReplyQueryVo.java │ │ │ │ │ └── AppStoreProductRespVo.java │ │ │ │ ├── convert/ │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── ProductCategoryConvert.java │ │ │ │ │ ├── storeproduct/ │ │ │ │ │ │ └── StoreProductConvert.java │ │ │ │ │ ├── storeproductattr/ │ │ │ │ │ │ └── StoreProductAttrConvert.java │ │ │ │ │ ├── storeproductattrresult/ │ │ │ │ │ │ └── StoreProductAttrResultConvert.java │ │ │ │ │ ├── storeproductattrvalue/ │ │ │ │ │ │ └── StoreProductAttrValueConvert.java │ │ │ │ │ ├── storeproductreply/ │ │ │ │ │ │ └── StoreProductReplyConvert.java │ │ │ │ │ └── storeproductrule/ │ │ │ │ │ └── StoreProductRuleConvert.java │ │ │ │ ├── dal/ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ └── ProductCategoryDO.java │ │ │ │ │ │ ├── storeproduct/ │ │ │ │ │ │ │ └── StoreProductDO.java │ │ │ │ │ │ ├── storeproductattr/ │ │ │ │ │ │ │ └── StoreProductAttrDO.java │ │ │ │ │ │ ├── storeproductattrresult/ │ │ │ │ │ │ │ └── StoreProductAttrResultDO.java │ │ │ │ │ │ ├── storeproductattrvalue/ │ │ │ │ │ │ │ └── StoreProductAttrValueDO.java │ │ │ │ │ │ ├── storeproductreply/ │ │ │ │ │ │ │ └── StoreProductReplyDO.java │ │ │ │ │ │ └── storeproductrule/ │ │ │ │ │ │ └── StoreProductRuleDO.java │ │ │ │ │ └── mysql/ │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── ProductCategoryMapper.java │ │ │ │ │ ├── storeproduct/ │ │ │ │ │ │ └── StoreProductMapper.java │ │ │ │ │ ├── storeproductattr/ │ │ │ │ │ │ └── StoreProductAttrMapper.java │ │ │ │ │ ├── storeproductattrresult/ │ │ │ │ │ │ └── StoreProductAttrResultMapper.java │ │ │ │ │ ├── storeproductattrvalue/ │ │ │ │ │ │ └── StoreProductAttrValueMapper.java │ │ │ │ │ ├── storeproductreply/ │ │ │ │ │ │ └── StoreProductReplyMapper.java │ │ │ │ │ └── storeproductrule/ │ │ │ │ │ └── StoreProductRuleMapper.java │ │ │ │ ├── framework/ │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── web/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── ProductWebConfiguration.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ └── service/ │ │ │ │ ├── category/ │ │ │ │ │ ├── ProductCategoryService.java │ │ │ │ │ └── ProductCategoryServiceImpl.java │ │ │ │ ├── storeproduct/ │ │ │ │ │ ├── AppStoreProductService.java │ │ │ │ │ ├── AppStoreProductServiceImpl.java │ │ │ │ │ ├── StoreProductService.java │ │ │ │ │ ├── StoreProductServiceImpl.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── AttrValueDto.java │ │ │ │ │ ├── DetailDto.java │ │ │ │ │ ├── FromatDetailDto.java │ │ │ │ │ ├── ProductDto.java │ │ │ │ │ ├── ProductFormatDto.java │ │ │ │ │ ├── ProductResultDto.java │ │ │ │ │ ├── StoreProductDto.java │ │ │ │ │ ├── YxStoreProductDto.java │ │ │ │ │ ├── YxStoreProductRelationDto.java │ │ │ │ │ ├── YxStoreProductReplyDto.java │ │ │ │ │ ├── YxStoreProductRuleDto.java │ │ │ │ │ └── YxStoreProductSmallDto.java │ │ │ │ ├── storeproductattr/ │ │ │ │ │ ├── AppStoreProductAttrService.java │ │ │ │ │ ├── AppStoreProductAttrServiceImpl.java │ │ │ │ │ ├── StoreProductAttrService.java │ │ │ │ │ └── StoreProductAttrServiceImpl.java │ │ │ │ ├── storeproductattrresult/ │ │ │ │ │ ├── StoreProductAttrResultService.java │ │ │ │ │ └── StoreProductAttrResultServiceImpl.java │ │ │ │ ├── storeproductattrvalue/ │ │ │ │ │ ├── StoreProductAttrValueService.java │ │ │ │ │ └── StoreProductAttrValueServiceImpl.java │ │ │ │ ├── storeproductreply/ │ │ │ │ │ ├── AppStoreProductReplyService.java │ │ │ │ │ ├── AppStoreProductReplyServiceImpl.java │ │ │ │ │ ├── StoreProductReplyService.java │ │ │ │ │ └── StoreProductReplyServiceImpl.java │ │ │ │ └── storeproductrule/ │ │ │ │ ├── StoreProductRuleService.java │ │ │ │ └── StoreProductRuleServiceImpl.java │ │ │ └── resources/ │ │ │ └── mapper/ │ │ │ ├── shippingtemplates/ │ │ │ │ └── ShippingTemplatesMapper.xml │ │ │ ├── shippingtemplatesfree/ │ │ │ │ └── ShippingTemplatesFreeMapper.xml │ │ │ ├── shippingtemplatesregion/ │ │ │ │ └── ShippingTemplatesRegionMapper.xml │ │ │ ├── storeproduct/ │ │ │ │ └── StoreProductMapper.xml │ │ │ ├── storeproductattr/ │ │ │ │ └── StoreProductAttrMapper.xml │ │ │ ├── storeproductattrresult/ │ │ │ │ └── StoreProductAttrResultMapper.xml │ │ │ ├── storeproductattrvalue/ │ │ │ │ └── StoreProductAttrValueMapper.xml │ │ │ ├── storeproductrelation/ │ │ │ │ └── StoreProductRelationMapper.xml │ │ │ ├── storeproductreply/ │ │ │ │ └── StoreProductReplyMapper.xml │ │ │ └── storeproductrule/ │ │ │ └── StoreProductRuleMapper.xml │ │ ├── yshop-module-shop-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── shop/ │ │ │ └── enums/ │ │ │ └── ErrorCodeConstants.java │ │ ├── yshop-module-shop-biz/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── module/ │ │ │ │ │ └── shop/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ │ ├── material/ │ │ │ │ │ │ │ │ ├── MaterialController.java │ │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ │ ├── MaterialBaseVO.java │ │ │ │ │ │ │ │ ├── MaterialCreateReqVO.java │ │ │ │ │ │ │ │ ├── MaterialExcelVO.java │ │ │ │ │ │ │ │ ├── MaterialExportReqVO.java │ │ │ │ │ │ │ │ ├── MaterialPageReqVO.java │ │ │ │ │ │ │ │ ├── MaterialRespVO.java │ │ │ │ │ │ │ │ └── MaterialUpdateReqVO.java │ │ │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ │ │ ├── MaterialGroupController.java │ │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ │ ├── MaterialGroupBaseVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupCreateReqVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupExcelVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupExportReqVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupPageReqVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupRespVO.java │ │ │ │ │ │ │ │ └── MaterialGroupUpdateReqVO.java │ │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ │ ├── ServiceController.java │ │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ │ ├── ServiceBaseVO.java │ │ │ │ │ │ │ │ ├── ServiceCreateReqVO.java │ │ │ │ │ │ │ │ ├── ServiceExcelVO.java │ │ │ │ │ │ │ │ ├── ServiceExportReqVO.java │ │ │ │ │ │ │ │ ├── ServicePageReqVO.java │ │ │ │ │ │ │ │ ├── ServiceRespVO.java │ │ │ │ │ │ │ │ └── ServiceUpdateReqVO.java │ │ │ │ │ │ │ └── shopads/ │ │ │ │ │ │ │ ├── ShopAdsController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── ShopAdsBaseVO.java │ │ │ │ │ │ │ ├── ShopAdsCreateReqVO.java │ │ │ │ │ │ │ ├── ShopAdsExcelVO.java │ │ │ │ │ │ │ ├── ShopAdsExportReqVO.java │ │ │ │ │ │ │ ├── ShopAdsPageReqVO.java │ │ │ │ │ │ │ ├── ShopAdsRespVO.java │ │ │ │ │ │ │ └── ShopAdsUpdateReqVO.java │ │ │ │ │ │ └── app/ │ │ │ │ │ │ ├── ad/ │ │ │ │ │ │ │ ├── AppAdController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ └── AppShopAdsVO.java │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── AppServiceController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppServiceVO.java │ │ │ │ │ ├── convert/ │ │ │ │ │ │ ├── material/ │ │ │ │ │ │ │ └── MaterialConvert.java │ │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ │ └── MaterialGroupConvert.java │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ └── ServiceConvert.java │ │ │ │ │ │ └── shopads/ │ │ │ │ │ │ └── ShopAdsConvert.java │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ ├── material/ │ │ │ │ │ │ │ │ └── MaterialDO.java │ │ │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ │ │ └── MaterialGroupDO.java │ │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ │ └── ServiceDO.java │ │ │ │ │ │ │ └── shopads/ │ │ │ │ │ │ │ └── ShopAdsDO.java │ │ │ │ │ │ └── mysql/ │ │ │ │ │ │ ├── material/ │ │ │ │ │ │ │ └── MaterialMapper.java │ │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ │ └── MaterialGroupMapper.java │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ └── ServiceMapper.java │ │ │ │ │ │ └── shopads/ │ │ │ │ │ │ └── ShopAdsMapper.java │ │ │ │ │ ├── framework/ │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── web/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── ShopWebConfiguration.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── service/ │ │ │ │ │ ├── material/ │ │ │ │ │ │ ├── MaterialService.java │ │ │ │ │ │ └── MaterialServiceImpl.java │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ ├── MaterialGroupService.java │ │ │ │ │ │ └── MaterialGroupServiceImpl.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── AppServiceService.java │ │ │ │ │ │ ├── AppServiceServiceImpl.java │ │ │ │ │ │ ├── ServiceService.java │ │ │ │ │ │ └── ServiceServiceImpl.java │ │ │ │ │ └── shopads/ │ │ │ │ │ ├── AppShopAdsService.java │ │ │ │ │ ├── AppShopAdsServiceImpl.java │ │ │ │ │ ├── ShopAdsService.java │ │ │ │ │ └── ShopAdsServiceImpl.java │ │ │ │ └── resources/ │ │ │ │ └── mapper/ │ │ │ │ ├── material/ │ │ │ │ │ └── MaterialMapper.xml │ │ │ │ └── materialgroup/ │ │ │ │ └── MaterialGroupMapper.xml │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── shop/ │ │ │ └── service/ │ │ │ └── material/ │ │ │ └── MaterialServiceImplTest.java │ │ ├── yshop-module-store-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── store/ │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ └── WithdrawalStatusEnum.java │ │ └── yshop-module-store-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── store/ │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ └── storeshop/ │ │ │ │ │ ├── StoreShopController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── StoreShopBaseVO.java │ │ │ │ │ ├── StoreShopCreateReqVO.java │ │ │ │ │ ├── StoreShopExcelVO.java │ │ │ │ │ ├── StoreShopExportReqVO.java │ │ │ │ │ ├── StoreShopPageReqVO.java │ │ │ │ │ ├── StoreShopRespVO.java │ │ │ │ │ └── StoreShopUpdateReqVO.java │ │ │ │ └── app/ │ │ │ │ └── storeshop/ │ │ │ │ ├── AppStoreController.java │ │ │ │ └── vo/ │ │ │ │ └── AppStoreShopVO.java │ │ │ ├── convert/ │ │ │ │ └── storeshop/ │ │ │ │ └── StoreShopConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ └── storeshop/ │ │ │ │ │ └── StoreShopDO.java │ │ │ │ ├── mysql/ │ │ │ │ │ └── storeshop/ │ │ │ │ │ └── StoreShopMapper.java │ │ │ │ └── redis/ │ │ │ │ ├── PrintTokenRedisDAO.java │ │ │ │ └── RedisKeyConstants.java │ │ │ └── service/ │ │ │ └── storeshop/ │ │ │ ├── AppStoreShopService.java │ │ │ ├── AppStoreShopServiceImpl.java │ │ │ ├── StoreShopService.java │ │ │ └── StoreShopServiceImpl.java │ │ └── resources/ │ │ └── mapper/ │ │ └── storeshop/ │ │ └── StoreShopMapper.xml │ ├── yshop-module-marketing/ │ │ ├── pom.xml │ │ ├── yshop-module-coupon-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── coupon/ │ │ │ └── enums/ │ │ │ ├── CouponStatusEnum.java │ │ │ └── ErrorCodeConstants.java │ │ └── yshop-module-coupon-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── coupon/ │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── coupon/ │ │ │ │ │ │ ├── CouponController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── CouponBaseVO.java │ │ │ │ │ │ ├── CouponCreateReqVO.java │ │ │ │ │ │ ├── CouponExcelVO.java │ │ │ │ │ │ ├── CouponExportReqVO.java │ │ │ │ │ │ ├── CouponPageReqVO.java │ │ │ │ │ │ ├── CouponRespVO.java │ │ │ │ │ │ └── CouponUpdateReqVO.java │ │ │ │ │ └── couponuser/ │ │ │ │ │ ├── CouponUserController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── CouponUserBaseVO.java │ │ │ │ │ ├── CouponUserCreateReqVO.java │ │ │ │ │ ├── CouponUserExcelVO.java │ │ │ │ │ ├── CouponUserExportReqVO.java │ │ │ │ │ ├── CouponUserPageReqVO.java │ │ │ │ │ ├── CouponUserRespVO.java │ │ │ │ │ └── CouponUserUpdateReqVO.java │ │ │ │ └── app/ │ │ │ │ └── coupon/ │ │ │ │ ├── AppCouponController.java │ │ │ │ └── vo/ │ │ │ │ ├── AppCouponVO.java │ │ │ │ ├── AppMyCouponVO.java │ │ │ │ └── AppReceVO.java │ │ │ ├── convert/ │ │ │ │ ├── coupon/ │ │ │ │ │ └── CouponConvert.java │ │ │ │ └── couponuser/ │ │ │ │ └── CouponUserConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── coupon/ │ │ │ │ │ │ └── CouponDO.java │ │ │ │ │ └── couponuser/ │ │ │ │ │ └── CouponUserDO.java │ │ │ │ └── mysql/ │ │ │ │ ├── coupon/ │ │ │ │ │ └── CouponMapper.java │ │ │ │ └── couponuser/ │ │ │ │ └── CouponUserMapper.java │ │ │ └── service/ │ │ │ ├── coupon/ │ │ │ │ ├── AppCouponService.java │ │ │ │ ├── AppCouponServiceImpl.java │ │ │ │ ├── CouponService.java │ │ │ │ └── CouponServiceImpl.java │ │ │ └── couponuser/ │ │ │ ├── AppCouponUserService.java │ │ │ ├── AppCouponUserServiceImpl.java │ │ │ ├── CouponUserService.java │ │ │ └── CouponUserServiceImpl.java │ │ └── resources/ │ │ └── mapper/ │ │ └── coupon/ │ │ └── CouponMapper.xml │ ├── yshop-module-member/ │ │ ├── pom.xml │ │ ├── yshop-module-member-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── member/ │ │ │ ├── api/ │ │ │ │ ├── package-info.java │ │ │ │ └── user/ │ │ │ │ ├── MemberUserApi.java │ │ │ │ └── dto/ │ │ │ │ ├── MemberUserRespDTO.java │ │ │ │ └── WechatUserDto.java │ │ │ └── enums/ │ │ │ ├── BillDetailEnum.java │ │ │ ├── BillEnum.java │ │ │ ├── ErrorCodeConstants.java │ │ │ └── LoginTypeEnum.java │ │ └── yshop-module-member-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── member/ │ │ │ ├── api/ │ │ │ │ ├── package-info.java │ │ │ │ └── user/ │ │ │ │ └── MemberUserApiImpl.java │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── user/ │ │ │ │ │ │ ├── MemberUserController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── UserBaseVO.java │ │ │ │ │ │ ├── UserCreateReqVO.java │ │ │ │ │ │ ├── UserExportReqVO.java │ │ │ │ │ │ ├── UserPageReqVO.java │ │ │ │ │ │ ├── UserRespVO.java │ │ │ │ │ │ ├── UserUpdateMoneyReqVO.java │ │ │ │ │ │ └── UserUpdateReqVO.java │ │ │ │ │ ├── useraddress/ │ │ │ │ │ │ ├── UserAddressController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── UserAddressBaseVO.java │ │ │ │ │ │ ├── UserAddressCreateReqVO.java │ │ │ │ │ │ ├── UserAddressExportReqVO.java │ │ │ │ │ │ ├── UserAddressPageReqVO.java │ │ │ │ │ │ ├── UserAddressRespVO.java │ │ │ │ │ │ └── UserAddressUpdateReqVO.java │ │ │ │ │ └── userbill/ │ │ │ │ │ ├── UserBillController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── UserBillBaseVO.java │ │ │ │ │ ├── UserBillCreateReqVO.java │ │ │ │ │ ├── UserBillExportReqVO.java │ │ │ │ │ ├── UserBillPageReqVO.java │ │ │ │ │ ├── UserBillRespVO.java │ │ │ │ │ └── UserBillUpdateReqVO.java │ │ │ │ └── app/ │ │ │ │ ├── address/ │ │ │ │ │ ├── AppUserAddressController.java │ │ │ │ │ ├── param/ │ │ │ │ │ │ ├── AddressDetailParam.java │ │ │ │ │ │ └── AppAddressParam.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppUserAddressLocationVo.java │ │ │ │ │ ├── AppUserAddressQueryVo.java │ │ │ │ │ └── AreaNodeRespVO.java │ │ │ │ ├── auth/ │ │ │ │ │ ├── AppAuthController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppAuthCheckCodeReqVO.java │ │ │ │ │ ├── AppAuthLoginReqVO.java │ │ │ │ │ ├── AppAuthLoginRespVO.java │ │ │ │ │ ├── AppAuthResetPasswordReqVO.java │ │ │ │ │ ├── AppAuthSmsLoginReqVO.java │ │ │ │ │ ├── AppAuthSmsSendReqVO.java │ │ │ │ │ ├── AppAuthSocialLoginReqVO.java │ │ │ │ │ ├── AppAuthUpdatePasswordReqVO.java │ │ │ │ │ ├── AppAuthWeixinMiniAppLoginReqVO.java │ │ │ │ │ ├── AppWeixinMiniLoginVO.java │ │ │ │ │ └── AppWxMiniLoginVO.java │ │ │ │ ├── social/ │ │ │ │ │ ├── AppSocialUserController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppSocialUserBindReqVO.java │ │ │ │ │ └── AppSocialUserUnbindReqVO.java │ │ │ │ ├── user/ │ │ │ │ │ ├── AppUserController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppUserBillVO.java │ │ │ │ │ ├── AppUserInfoRespVO.java │ │ │ │ │ ├── AppUserNickVO.java │ │ │ │ │ ├── AppUserOrderCountVo.java │ │ │ │ │ ├── AppUserQueryVo.java │ │ │ │ │ ├── AppUserRechargeVO.java │ │ │ │ │ └── AppUserUpdateMobileReqVO.java │ │ │ │ └── weixin/ │ │ │ │ └── AppWxMpController.java │ │ │ ├── convert/ │ │ │ │ ├── auth/ │ │ │ │ │ └── AuthConvert.java │ │ │ │ ├── package-info.java │ │ │ │ ├── social/ │ │ │ │ │ └── SocialUserConvert.java │ │ │ │ ├── user/ │ │ │ │ │ └── UserConvert.java │ │ │ │ ├── useraddress/ │ │ │ │ │ ├── AreaConvert.java │ │ │ │ │ └── UserAddressConvert.java │ │ │ │ └── userbill/ │ │ │ │ └── UserBillConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── user/ │ │ │ │ │ │ └── MemberUserDO.java │ │ │ │ │ ├── useraddress/ │ │ │ │ │ │ └── UserAddressDO.java │ │ │ │ │ └── userbill/ │ │ │ │ │ └── UserBillDO.java │ │ │ │ ├── mysql/ │ │ │ │ │ ├── user/ │ │ │ │ │ │ └── MemberUserMapper.java │ │ │ │ │ ├── useraddress/ │ │ │ │ │ │ └── UserAddressMapper.java │ │ │ │ │ └── userbill/ │ │ │ │ │ └── UserBillMapper.java │ │ │ │ └── redis/ │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ └── order/ │ │ │ │ └── MiniRedisDAO.java │ │ │ ├── framework/ │ │ │ │ ├── package-info.java │ │ │ │ └── web/ │ │ │ │ ├── config/ │ │ │ │ │ └── MemberWebConfiguration.java │ │ │ │ └── package-info.java │ │ │ └── service/ │ │ │ ├── auth/ │ │ │ │ ├── MemberAuthService.java │ │ │ │ └── MemberAuthServiceImpl.java │ │ │ ├── user/ │ │ │ │ ├── MemberUserService.java │ │ │ │ ├── MemberUserServiceImpl.java │ │ │ │ ├── UserService.java │ │ │ │ ├── UserServiceImpl.java │ │ │ │ └── dto/ │ │ │ │ └── WechatUserDto.java │ │ │ ├── useraddress/ │ │ │ │ ├── AppUserAddressService.java │ │ │ │ ├── AppUserAddressServiceImpl.java │ │ │ │ ├── UserAddressService.java │ │ │ │ └── UserAddressServiceImpl.java │ │ │ └── userbill/ │ │ │ ├── UserBillService.java │ │ │ └── UserBillServiceImpl.java │ │ └── test/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── member/ │ │ │ └── service/ │ │ │ └── auth/ │ │ │ └── MemberAuthServiceTest.java │ │ └── resources/ │ │ ├── application-unit-test.yaml │ │ ├── logback.xml │ │ └── sql/ │ │ ├── clean.sql │ │ └── create_tables.sql │ ├── yshop-module-message/ │ │ ├── pom.xml │ │ ├── yshop-module-message-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── message/ │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ └── WechatTempateEnum.java │ │ └── yshop-module-message-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── message/ │ │ │ ├── controller/ │ │ │ │ └── admin/ │ │ │ │ └── wechattemplate/ │ │ │ │ ├── WechatTemplateController.java │ │ │ │ └── vo/ │ │ │ │ ├── WechatTemplateBaseVO.java │ │ │ │ ├── WechatTemplateCreateReqVO.java │ │ │ │ ├── WechatTemplateExcelVO.java │ │ │ │ ├── WechatTemplateExportReqVO.java │ │ │ │ ├── WechatTemplatePageReqVO.java │ │ │ │ ├── WechatTemplateRespVO.java │ │ │ │ └── WechatTemplateUpdateReqVO.java │ │ │ ├── convert/ │ │ │ │ └── wechattemplate/ │ │ │ │ └── WechatTemplateConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ └── wechattemplate/ │ │ │ │ │ └── WechatTemplateDO.java │ │ │ │ └── mysql/ │ │ │ │ └── wechattemplate/ │ │ │ │ └── WechatTemplateMapper.java │ │ │ ├── mq/ │ │ │ │ ├── consumer/ │ │ │ │ │ └── WeixinNoticeConsumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── WeixinNoticeMessage.java │ │ │ │ └── producer/ │ │ │ │ └── WeixinNoticeProducer.java │ │ │ ├── redismq/ │ │ │ │ ├── DelayedQueueListener.java │ │ │ │ ├── DelayedQueueListenerConfigurer.java │ │ │ │ ├── DelayedQueuePollTask.java │ │ │ │ └── msg/ │ │ │ │ └── OrderMsg.java │ │ │ ├── service/ │ │ │ │ └── wechattemplate/ │ │ │ │ ├── WechatTemplateService.java │ │ │ │ └── WechatTemplateServiceImpl.java │ │ │ └── supply/ │ │ │ ├── WeiXinSubscribeService.java │ │ │ └── WeixinTemplateService.java │ │ └── resources/ │ │ └── mapper/ │ │ └── wechattemplate/ │ │ └── WechatTemplateMapper.xml │ ├── yshop-module-mp/ │ │ ├── pom.xml │ │ ├── yshop-module-mp-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── mp/ │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ ├── MpAccountEnum.java │ │ │ └── message/ │ │ │ ├── MpAutoReplyMatchEnum.java │ │ │ ├── MpAutoReplyTypeEnum.java │ │ │ └── MpMessageSendFromEnum.java │ │ └── yshop-module-mp-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── co/ │ │ └── yixiang/ │ │ └── yshop/ │ │ └── module/ │ │ └── mp/ │ │ ├── controller/ │ │ │ └── admin/ │ │ │ ├── account/ │ │ │ │ ├── MaAccountController.java │ │ │ │ ├── MpAccountController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpAccountBaseVO.java │ │ │ │ ├── MpAccountCreateReqVO.java │ │ │ │ ├── MpAccountPageReqVO.java │ │ │ │ ├── MpAccountRespVO.java │ │ │ │ ├── MpAccountSimpleRespVO.java │ │ │ │ └── MpAccountUpdateReqVO.java │ │ │ ├── material/ │ │ │ │ ├── MpMaterialController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpMaterialPageReqVO.java │ │ │ │ ├── MpMaterialRespVO.java │ │ │ │ ├── MpMaterialUploadNewsImageReqVO.java │ │ │ │ ├── MpMaterialUploadPermanentReqVO.java │ │ │ │ ├── MpMaterialUploadRespVO.java │ │ │ │ └── MpMaterialUploadTemporaryReqVO.java │ │ │ ├── menu/ │ │ │ │ ├── MpMenuController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpMenuBaseVO.java │ │ │ │ ├── MpMenuRespVO.java │ │ │ │ └── MpMenuSaveReqVO.java │ │ │ ├── message/ │ │ │ │ ├── MpAutoReplyController.java │ │ │ │ ├── MpMessageController.java │ │ │ │ └── vo/ │ │ │ │ ├── autoreply/ │ │ │ │ │ ├── MpAutoReplyBaseVO.java │ │ │ │ │ ├── MpAutoReplyCreateReqVO.java │ │ │ │ │ ├── MpAutoReplyPageReqVO.java │ │ │ │ │ ├── MpAutoReplyRespVO.java │ │ │ │ │ └── MpAutoReplyUpdateReqVO.java │ │ │ │ └── message/ │ │ │ │ ├── MpMessagePageReqVO.java │ │ │ │ ├── MpMessageRespVO.java │ │ │ │ └── MpMessageSendReqVO.java │ │ │ ├── news/ │ │ │ │ ├── MpDraftController.java │ │ │ │ ├── MpFreePublishController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpDraftPageReqVO.java │ │ │ │ └── MpFreePublishPageReqVO.java │ │ │ ├── open/ │ │ │ │ ├── MpOpenController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpOpenCheckSignatureReqVO.java │ │ │ │ └── MpOpenHandleMessageReqVO.java │ │ │ ├── statistics/ │ │ │ │ ├── MpStatisticsController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpStatisticsGetReqVO.java │ │ │ │ ├── MpStatisticsInterfaceSummaryRespVO.java │ │ │ │ ├── MpStatisticsUpstreamMessageRespVO.java │ │ │ │ ├── MpStatisticsUserCumulateRespVO.java │ │ │ │ └── MpStatisticsUserSummaryRespVO.java │ │ │ ├── tag/ │ │ │ │ ├── MpTagController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpTagBaseVO.java │ │ │ │ ├── MpTagCreateReqVO.java │ │ │ │ ├── MpTagPageReqVO.java │ │ │ │ ├── MpTagRespVO.java │ │ │ │ ├── MpTagSimpleRespVO.java │ │ │ │ └── MpTagUpdateReqVO.java │ │ │ └── user/ │ │ │ ├── MpUserController.java │ │ │ └── vo/ │ │ │ ├── MpUserPageReqVO.java │ │ │ ├── MpUserRespVO.java │ │ │ └── MpUserUpdateReqVO.java │ │ ├── convert/ │ │ │ ├── account/ │ │ │ │ └── MpAccountConvert.java │ │ │ ├── material/ │ │ │ │ └── MpMaterialConvert.java │ │ │ ├── menu/ │ │ │ │ └── MpMenuConvert.java │ │ │ ├── message/ │ │ │ │ ├── MpAutoReplyConvert.java │ │ │ │ └── MpMessageConvert.java │ │ │ ├── statistics/ │ │ │ │ └── MpStatisticsConvert.java │ │ │ ├── tag/ │ │ │ │ └── MpTagConvert.java │ │ │ └── user/ │ │ │ └── MpUserConvert.java │ │ ├── dal/ │ │ │ ├── dataobject/ │ │ │ │ ├── account/ │ │ │ │ │ └── MpAccountDO.java │ │ │ │ ├── material/ │ │ │ │ │ └── MpMaterialDO.java │ │ │ │ ├── menu/ │ │ │ │ │ └── MpMenuDO.java │ │ │ │ ├── message/ │ │ │ │ │ ├── MpAutoReplyDO.java │ │ │ │ │ └── MpMessageDO.java │ │ │ │ ├── tag/ │ │ │ │ │ └── MpTagDO.java │ │ │ │ └── user/ │ │ │ │ └── MpUserDO.java │ │ │ └── mysql/ │ │ │ ├── account/ │ │ │ │ └── MpAccountMapper.java │ │ │ ├── material/ │ │ │ │ └── MpMaterialMapper.java │ │ │ ├── menu/ │ │ │ │ └── MpMenuMapper.java │ │ │ ├── message/ │ │ │ │ ├── MpAutoReplyMapper.java │ │ │ │ └── MpMessageMapper.java │ │ │ ├── tag/ │ │ │ │ └── MpTagMapper.java │ │ │ └── user/ │ │ │ └── MpUserMapper.java │ │ ├── framework/ │ │ │ ├── mp/ │ │ │ │ ├── config/ │ │ │ │ │ └── MpConfiguration.java │ │ │ │ └── core/ │ │ │ │ ├── DefaultMpServiceFactory.java │ │ │ │ ├── MpServiceFactory.java │ │ │ │ ├── context/ │ │ │ │ │ └── MpContextHolder.java │ │ │ │ └── util/ │ │ │ │ └── MpUtils.java │ │ │ └── web/ │ │ │ └── config/ │ │ │ └── MpWebConfiguration.java │ │ └── service/ │ │ ├── account/ │ │ │ ├── MpAccountService.java │ │ │ └── MpAccountServiceImpl.java │ │ ├── handler/ │ │ │ ├── menu/ │ │ │ │ └── MenuHandler.java │ │ │ ├── message/ │ │ │ │ ├── MessageAutoReplyHandler.java │ │ │ │ └── MessageReceiveHandler.java │ │ │ ├── other/ │ │ │ │ ├── KfSessionHandler.java │ │ │ │ ├── NullHandler.java │ │ │ │ ├── ScanHandler.java │ │ │ │ ├── StoreCheckNotifyHandler.java │ │ │ │ └── package-info.java │ │ │ └── user/ │ │ │ ├── LocationHandler.java │ │ │ ├── SubscribeHandler.java │ │ │ └── UnsubscribeHandler.java │ │ ├── material/ │ │ │ ├── MpMaterialService.java │ │ │ └── MpMaterialServiceImpl.java │ │ ├── menu/ │ │ │ ├── MpMenuService.java │ │ │ └── MpMenuServiceImpl.java │ │ ├── message/ │ │ │ ├── MpAutoReplyService.java │ │ │ ├── MpAutoReplyServiceImpl.java │ │ │ ├── MpMessageService.java │ │ │ ├── MpMessageServiceImpl.java │ │ │ └── bo/ │ │ │ └── MpMessageSendOutReqBO.java │ │ ├── statistics/ │ │ │ ├── MpStatisticsService.java │ │ │ └── MpStatisticsServiceImpl.java │ │ ├── tag/ │ │ │ ├── MpTagService.java │ │ │ └── MpTagServiceImpl.java │ │ └── user/ │ │ ├── MpUserService.java │ │ └── MpUserServiceImpl.java │ ├── yshop-module-pay/ │ │ ├── pom.xml │ │ ├── yshop-module-pay-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── pay/ │ │ │ ├── config/ │ │ │ │ ├── MerchantPayServiceConfigurer.java │ │ │ │ ├── PayAutoConfiguration.java │ │ │ │ ├── handlers/ │ │ │ │ │ ├── AliPayMessageHandler.java │ │ │ │ │ └── WxPayMessageHandler.java │ │ │ │ └── interceptor/ │ │ │ │ ├── AliPayMessageInterceptor.java │ │ │ │ └── WxPayMessageInterceptor.java │ │ │ ├── enums/ │ │ │ │ └── ErrorCodeConstants.java │ │ │ └── mq/ │ │ │ ├── message/ │ │ │ │ └── PayNoticeMessage.java │ │ │ └── producer/ │ │ │ └── PayNoticeProducer.java │ │ └── yshop-module-pay-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── pay/ │ │ │ ├── controller/ │ │ │ │ └── admin/ │ │ │ │ └── merchantdetails/ │ │ │ │ ├── MerchantDetailsController.java │ │ │ │ └── vo/ │ │ │ │ ├── MerchantDetailsBaseVO.java │ │ │ │ ├── MerchantDetailsCreateReqVO.java │ │ │ │ ├── MerchantDetailsExcelVO.java │ │ │ │ ├── MerchantDetailsExportReqVO.java │ │ │ │ ├── MerchantDetailsPageReqVO.java │ │ │ │ ├── MerchantDetailsRespVO.java │ │ │ │ └── MerchantDetailsUpdateReqVO.java │ │ │ ├── convert/ │ │ │ │ └── merchantdetails/ │ │ │ │ └── MerchantDetailsConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ └── merchantdetails/ │ │ │ │ │ └── MerchantDetailsDO.java │ │ │ │ └── mysql/ │ │ │ │ └── merchantdetails/ │ │ │ │ └── MerchantDetailsMapper.java │ │ │ ├── http/ │ │ │ │ └── HttpRequestNoticeNewParams.java │ │ │ └── service/ │ │ │ └── merchantdetails/ │ │ │ ├── MerchantDetailsService.java │ │ │ └── MerchantDetailsServiceImpl.java │ │ └── resources/ │ │ └── mapper/ │ │ └── merchantdetails/ │ │ └── MerchantDetailsMapper.xml │ ├── yshop-module-score/ │ │ ├── pom.xml │ │ ├── yshop-module-score-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── score/ │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ └── OrderStatusEnum.java │ │ └── yshop-module-score-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── score/ │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── scoreorder/ │ │ │ │ │ │ ├── ScoreOrderController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── ScoreOrderBaseVO.java │ │ │ │ │ │ ├── ScoreOrderCreateReqVO.java │ │ │ │ │ │ ├── ScoreOrderExcelVO.java │ │ │ │ │ │ ├── ScoreOrderExportReqVO.java │ │ │ │ │ │ ├── ScoreOrderPageReqVO.java │ │ │ │ │ │ ├── ScoreOrderRespVO.java │ │ │ │ │ │ └── ScoreOrderUpdateReqVO.java │ │ │ │ │ └── scoreproduct/ │ │ │ │ │ ├── ScoreProductController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── ScoreProductBaseVO.java │ │ │ │ │ ├── ScoreProductCreateReqVO.java │ │ │ │ │ ├── ScoreProductExcelVO.java │ │ │ │ │ ├── ScoreProductExportReqVO.java │ │ │ │ │ ├── ScoreProductPageReqVO.java │ │ │ │ │ ├── ScoreProductRespVO.java │ │ │ │ │ └── ScoreProductUpdateReqVO.java │ │ │ │ └── app/ │ │ │ │ ├── order/ │ │ │ │ │ ├── AppScoreOrderController.java │ │ │ │ │ ├── param/ │ │ │ │ │ │ └── AppScoreOrderParam.java │ │ │ │ │ └── vo/ │ │ │ │ │ └── AppScoreOrderVO.java │ │ │ │ └── product/ │ │ │ │ ├── AppScoreProductController.java │ │ │ │ ├── param/ │ │ │ │ │ └── AppScoreProductQueryParam.java │ │ │ │ └── vo/ │ │ │ │ └── AppScoreProductVO.java │ │ │ ├── convert/ │ │ │ │ ├── scoreorder/ │ │ │ │ │ └── ScoreOrderConvert.java │ │ │ │ └── scoreproduct/ │ │ │ │ └── ScoreProductConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── scoreorder/ │ │ │ │ │ │ └── ScoreOrderDO.java │ │ │ │ │ └── scoreproduct/ │ │ │ │ │ └── ScoreProductDO.java │ │ │ │ └── mysql/ │ │ │ │ ├── scoreorder/ │ │ │ │ │ └── ScoreOrderMapper.java │ │ │ │ └── scoreproduct/ │ │ │ │ └── ScoreProductMapper.java │ │ │ └── service/ │ │ │ ├── scoreorder/ │ │ │ │ ├── AppScoreOrderService.java │ │ │ │ ├── AppScoreOrderServiceImpl.java │ │ │ │ ├── ScoreOrderService.java │ │ │ │ └── ScoreOrderServiceImpl.java │ │ │ └── scoreproduct/ │ │ │ ├── AppScoreProductService.java │ │ │ ├── AppScoreProductServiceImpl.java │ │ │ ├── ScoreProductService.java │ │ │ └── ScoreProductServiceImpl.java │ │ └── resources/ │ │ └── mapper/ │ │ └── scoreorder/ │ │ └── ScoreOrderMapper.xml │ ├── yshop-module-system/ │ │ ├── pom.xml │ │ ├── yshop-module-system-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── system/ │ │ │ ├── api/ │ │ │ │ ├── dept/ │ │ │ │ │ ├── DeptApi.java │ │ │ │ │ ├── PostApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── DeptRespDTO.java │ │ │ │ │ └── PostRespDTO.java │ │ │ │ ├── dict/ │ │ │ │ │ ├── DictDataApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ └── DictDataRespDTO.java │ │ │ │ ├── logger/ │ │ │ │ │ ├── LoginLogApi.java │ │ │ │ │ ├── OperateLogApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── LoginLogCreateReqDTO.java │ │ │ │ │ ├── OperateLogCreateReqDTO.java │ │ │ │ │ ├── OperateLogPageReqDTO.java │ │ │ │ │ └── OperateLogRespDTO.java │ │ │ │ ├── mail/ │ │ │ │ │ ├── MailSendApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ └── MailSendSingleToUserReqDTO.java │ │ │ │ ├── notify/ │ │ │ │ │ ├── NotifyMessageSendApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── NotifySendSingleToUserReqDTO.java │ │ │ │ │ └── NotifyTemplateReqDTO.java │ │ │ │ ├── oauth2/ │ │ │ │ │ ├── OAuth2TokenApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── OAuth2AccessTokenCheckRespDTO.java │ │ │ │ │ ├── OAuth2AccessTokenCreateReqDTO.java │ │ │ │ │ └── OAuth2AccessTokenRespDTO.java │ │ │ │ ├── permission/ │ │ │ │ │ ├── PermissionApi.java │ │ │ │ │ ├── RoleApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ └── DeptDataPermissionRespDTO.java │ │ │ │ ├── sms/ │ │ │ │ │ ├── SmsCodeApi.java │ │ │ │ │ ├── SmsSendApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── code/ │ │ │ │ │ │ ├── SmsCodeSendReqDTO.java │ │ │ │ │ │ ├── SmsCodeUseReqDTO.java │ │ │ │ │ │ └── SmsCodeValidateReqDTO.java │ │ │ │ │ └── send/ │ │ │ │ │ └── SmsSendSingleToUserReqDTO.java │ │ │ │ ├── social/ │ │ │ │ │ ├── SocialClientApi.java │ │ │ │ │ ├── SocialUserApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── SocialUserBindReqDTO.java │ │ │ │ │ ├── SocialUserRespDTO.java │ │ │ │ │ ├── SocialUserUnbindReqDTO.java │ │ │ │ │ ├── SocialWxJsapiSignatureRespDTO.java │ │ │ │ │ └── SocialWxPhoneNumberInfoRespDTO.java │ │ │ │ ├── tenant/ │ │ │ │ │ └── TenantApi.java │ │ │ │ └── user/ │ │ │ │ ├── AdminUserApi.java │ │ │ │ └── dto/ │ │ │ │ └── AdminUserRespDTO.java │ │ │ └── enums/ │ │ │ ├── DictTypeConstants.java │ │ │ ├── ErrorCodeConstants.java │ │ │ ├── LogRecordConstants.java │ │ │ ├── common/ │ │ │ │ └── SexEnum.java │ │ │ ├── logger/ │ │ │ │ ├── LoginLogTypeEnum.java │ │ │ │ └── LoginResultEnum.java │ │ │ ├── mail/ │ │ │ │ └── MailSendStatusEnum.java │ │ │ ├── notice/ │ │ │ │ └── NoticeTypeEnum.java │ │ │ ├── notify/ │ │ │ │ └── NotifyTemplateTypeEnum.java │ │ │ ├── oauth2/ │ │ │ │ ├── OAuth2ClientConstants.java │ │ │ │ └── OAuth2GrantTypeEnum.java │ │ │ ├── permission/ │ │ │ │ ├── DataScopeEnum.java │ │ │ │ ├── MenuTypeEnum.java │ │ │ │ ├── RoleCodeEnum.java │ │ │ │ └── RoleTypeEnum.java │ │ │ ├── sms/ │ │ │ │ ├── SmsReceiveStatusEnum.java │ │ │ │ ├── SmsSceneEnum.java │ │ │ │ ├── SmsSendStatusEnum.java │ │ │ │ └── SmsTemplateTypeEnum.java │ │ │ └── social/ │ │ │ └── SocialTypeEnum.java │ │ └── yshop-module-system-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── module/ │ │ │ │ └── system/ │ │ │ │ ├── api/ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ ├── DeptApiImpl.java │ │ │ │ │ │ └── PostApiImpl.java │ │ │ │ │ ├── dict/ │ │ │ │ │ │ └── DictDataApiImpl.java │ │ │ │ │ ├── logger/ │ │ │ │ │ │ ├── LoginLogApiImpl.java │ │ │ │ │ │ └── OperateLogApiImpl.java │ │ │ │ │ ├── mail/ │ │ │ │ │ │ └── MailSendApiImpl.java │ │ │ │ │ ├── notify/ │ │ │ │ │ │ └── NotifyMessageSendApiImpl.java │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ └── OAuth2TokenApiImpl.java │ │ │ │ │ ├── permission/ │ │ │ │ │ │ ├── PermissionApiImpl.java │ │ │ │ │ │ └── RoleApiImpl.java │ │ │ │ │ ├── sms/ │ │ │ │ │ │ ├── SmsCodeApiImpl.java │ │ │ │ │ │ └── SmsSendApiImpl.java │ │ │ │ │ ├── social/ │ │ │ │ │ │ ├── SocialClientApiImpl.java │ │ │ │ │ │ └── SocialUserApiImpl.java │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ └── TenantApiImpl.java │ │ │ │ │ └── user/ │ │ │ │ │ └── AdminUserApiImpl.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── AuthController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── AuthLoginReqVO.java │ │ │ │ │ │ │ ├── AuthLoginRespVO.java │ │ │ │ │ │ │ ├── AuthMenuRespVO.java │ │ │ │ │ │ │ ├── AuthPermissionInfoRespVO.java │ │ │ │ │ │ │ ├── AuthSmsLoginReqVO.java │ │ │ │ │ │ │ ├── AuthSmsSendReqVO.java │ │ │ │ │ │ │ └── AuthSocialLoginReqVO.java │ │ │ │ │ │ ├── captcha/ │ │ │ │ │ │ │ └── CaptchaController.java │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ ├── DeptController.java │ │ │ │ │ │ │ ├── PostController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ │ ├── DeptListReqVO.java │ │ │ │ │ │ │ │ ├── DeptRespVO.java │ │ │ │ │ │ │ │ ├── DeptSaveReqVO.java │ │ │ │ │ │ │ │ └── DeptSimpleRespVO.java │ │ │ │ │ │ │ └── post/ │ │ │ │ │ │ │ ├── PostPageReqVO.java │ │ │ │ │ │ │ ├── PostRespVO.java │ │ │ │ │ │ │ ├── PostSaveReqVO.java │ │ │ │ │ │ │ └── PostSimpleRespVO.java │ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ │ ├── DictDataController.java │ │ │ │ │ │ │ ├── DictTypeController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── data/ │ │ │ │ │ │ │ │ ├── DictDataPageReqVO.java │ │ │ │ │ │ │ │ ├── DictDataRespVO.java │ │ │ │ │ │ │ │ ├── DictDataSaveReqVO.java │ │ │ │ │ │ │ │ └── DictDataSimpleRespVO.java │ │ │ │ │ │ │ └── type/ │ │ │ │ │ │ │ ├── DictTypePageReqVO.java │ │ │ │ │ │ │ ├── DictTypeRespVO.java │ │ │ │ │ │ │ ├── DictTypeSaveReqVO.java │ │ │ │ │ │ │ └── DictTypeSimpleRespVO.java │ │ │ │ │ │ ├── ip/ │ │ │ │ │ │ │ ├── AreaController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ └── AreaNodeRespVO.java │ │ │ │ │ │ ├── logger/ │ │ │ │ │ │ │ ├── LoginLogController.java │ │ │ │ │ │ │ ├── OperateLogController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── loginlog/ │ │ │ │ │ │ │ │ ├── LoginLogPageReqVO.java │ │ │ │ │ │ │ │ └── LoginLogRespVO.java │ │ │ │ │ │ │ └── operatelog/ │ │ │ │ │ │ │ ├── OperateLogPageReqVO.java │ │ │ │ │ │ │ └── OperateLogRespVO.java │ │ │ │ │ │ ├── mail/ │ │ │ │ │ │ │ ├── MailAccountController.java │ │ │ │ │ │ │ ├── MailLogController.java │ │ │ │ │ │ │ ├── MailTemplateController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── account/ │ │ │ │ │ │ │ │ ├── MailAccountPageReqVO.java │ │ │ │ │ │ │ │ ├── MailAccountRespVO.java │ │ │ │ │ │ │ │ ├── MailAccountSaveReqVO.java │ │ │ │ │ │ │ │ └── MailAccountSimpleRespVO.java │ │ │ │ │ │ │ ├── log/ │ │ │ │ │ │ │ │ ├── MailLogPageReqVO.java │ │ │ │ │ │ │ │ └── MailLogRespVO.java │ │ │ │ │ │ │ └── template/ │ │ │ │ │ │ │ ├── MailTemplatePageReqVO.java │ │ │ │ │ │ │ ├── MailTemplateRespVO.java │ │ │ │ │ │ │ ├── MailTemplateSaveReqVO.java │ │ │ │ │ │ │ ├── MailTemplateSendReqVO.java │ │ │ │ │ │ │ └── MailTemplateSimpleRespVO.java │ │ │ │ │ │ ├── notice/ │ │ │ │ │ │ │ ├── NoticeController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── NoticePageReqVO.java │ │ │ │ │ │ │ ├── NoticeRespVO.java │ │ │ │ │ │ │ └── NoticeSaveReqVO.java │ │ │ │ │ │ ├── notify/ │ │ │ │ │ │ │ ├── NotifyMessageController.java │ │ │ │ │ │ │ ├── NotifyTemplateController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── message/ │ │ │ │ │ │ │ │ ├── NotifyMessageMyPageReqVO.java │ │ │ │ │ │ │ │ ├── NotifyMessagePageReqVO.java │ │ │ │ │ │ │ │ └── NotifyMessageRespVO.java │ │ │ │ │ │ │ └── template/ │ │ │ │ │ │ │ ├── NotifyTemplatePageReqVO.java │ │ │ │ │ │ │ ├── NotifyTemplateRespVO.java │ │ │ │ │ │ │ ├── NotifyTemplateSaveReqVO.java │ │ │ │ │ │ │ └── NotifyTemplateSendReqVO.java │ │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ │ ├── OAuth2ClientController.java │ │ │ │ │ │ │ ├── OAuth2OpenController.java │ │ │ │ │ │ │ ├── OAuth2TokenController.java │ │ │ │ │ │ │ ├── OAuth2UserController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── client/ │ │ │ │ │ │ │ │ ├── OAuth2ClientPageReqVO.java │ │ │ │ │ │ │ │ ├── OAuth2ClientRespVO.java │ │ │ │ │ │ │ │ └── OAuth2ClientSaveReqVO.java │ │ │ │ │ │ │ ├── open/ │ │ │ │ │ │ │ │ ├── OAuth2OpenAccessTokenRespVO.java │ │ │ │ │ │ │ │ ├── OAuth2OpenAuthorizeInfoRespVO.java │ │ │ │ │ │ │ │ └── OAuth2OpenCheckTokenRespVO.java │ │ │ │ │ │ │ ├── token/ │ │ │ │ │ │ │ │ ├── OAuth2AccessTokenPageReqVO.java │ │ │ │ │ │ │ │ └── OAuth2AccessTokenRespVO.java │ │ │ │ │ │ │ └── user/ │ │ │ │ │ │ │ ├── OAuth2UserInfoRespVO.java │ │ │ │ │ │ │ └── OAuth2UserUpdateReqVO.java │ │ │ │ │ │ ├── permission/ │ │ │ │ │ │ │ ├── MenuController.java │ │ │ │ │ │ │ ├── PermissionController.java │ │ │ │ │ │ │ ├── RoleController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── menu/ │ │ │ │ │ │ │ │ ├── MenuListReqVO.java │ │ │ │ │ │ │ │ ├── MenuRespVO.java │ │ │ │ │ │ │ │ ├── MenuSaveVO.java │ │ │ │ │ │ │ │ └── MenuSimpleRespVO.java │ │ │ │ │ │ │ ├── permission/ │ │ │ │ │ │ │ │ ├── PermissionAssignRoleDataScopeReqVO.java │ │ │ │ │ │ │ │ ├── PermissionAssignRoleMenuReqVO.java │ │ │ │ │ │ │ │ └── PermissionAssignUserRoleReqVO.java │ │ │ │ │ │ │ └── role/ │ │ │ │ │ │ │ ├── RolePageReqVO.java │ │ │ │ │ │ │ ├── RoleRespVO.java │ │ │ │ │ │ │ ├── RoleSaveReqVO.java │ │ │ │ │ │ │ └── RoleSimpleRespVO.java │ │ │ │ │ │ ├── sms/ │ │ │ │ │ │ │ ├── SmsCallbackController.java │ │ │ │ │ │ │ ├── SmsChannelController.java │ │ │ │ │ │ │ ├── SmsLogController.java │ │ │ │ │ │ │ ├── SmsTemplateController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── channel/ │ │ │ │ │ │ │ │ ├── SmsChannelPageReqVO.java │ │ │ │ │ │ │ │ ├── SmsChannelRespVO.java │ │ │ │ │ │ │ │ ├── SmsChannelSaveReqVO.java │ │ │ │ │ │ │ │ └── SmsChannelSimpleRespVO.java │ │ │ │ │ │ │ ├── log/ │ │ │ │ │ │ │ │ ├── SmsLogPageReqVO.java │ │ │ │ │ │ │ │ └── SmsLogRespVO.java │ │ │ │ │ │ │ └── template/ │ │ │ │ │ │ │ ├── SmsTemplatePageReqVO.java │ │ │ │ │ │ │ ├── SmsTemplateRespVO.java │ │ │ │ │ │ │ ├── SmsTemplateSaveReqVO.java │ │ │ │ │ │ │ └── SmsTemplateSendReqVO.java │ │ │ │ │ │ ├── socail/ │ │ │ │ │ │ │ ├── SocialClientController.java │ │ │ │ │ │ │ ├── SocialUserController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── client/ │ │ │ │ │ │ │ │ ├── SocialClientPageReqVO.java │ │ │ │ │ │ │ │ ├── SocialClientRespVO.java │ │ │ │ │ │ │ │ └── SocialClientSaveReqVO.java │ │ │ │ │ │ │ └── user/ │ │ │ │ │ │ │ ├── SocialUserBindReqVO.java │ │ │ │ │ │ │ ├── SocialUserPageReqVO.java │ │ │ │ │ │ │ ├── SocialUserRespVO.java │ │ │ │ │ │ │ └── SocialUserUnbindReqVO.java │ │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ │ ├── TenantController.java │ │ │ │ │ │ │ ├── TenantPackageController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── packages/ │ │ │ │ │ │ │ │ ├── TenantPackagePageReqVO.java │ │ │ │ │ │ │ │ ├── TenantPackageRespVO.java │ │ │ │ │ │ │ │ ├── TenantPackageSaveReqVO.java │ │ │ │ │ │ │ │ └── TenantPackageSimpleRespVO.java │ │ │ │ │ │ │ └── tenant/ │ │ │ │ │ │ │ ├── TenantPageReqVO.java │ │ │ │ │ │ │ ├── TenantRespVO.java │ │ │ │ │ │ │ ├── TenantSaveReqVO.java │ │ │ │ │ │ │ └── TenantSimpleRespVO.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ ├── UserController.java │ │ │ │ │ │ ├── UserProfileController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── profile/ │ │ │ │ │ │ │ ├── UserProfileRespVO.java │ │ │ │ │ │ │ ├── UserProfileUpdatePasswordReqVO.java │ │ │ │ │ │ │ └── UserProfileUpdateReqVO.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ ├── UserImportExcelVO.java │ │ │ │ │ │ ├── UserImportRespVO.java │ │ │ │ │ │ ├── UserPageReqVO.java │ │ │ │ │ │ ├── UserRespVO.java │ │ │ │ │ │ ├── UserSaveReqVO.java │ │ │ │ │ │ ├── UserSimpleRespVO.java │ │ │ │ │ │ ├── UserUpdatePasswordReqVO.java │ │ │ │ │ │ └── UserUpdateStatusReqVO.java │ │ │ │ │ └── app/ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ ├── AppDictDataController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppDictDataRespVO.java │ │ │ │ │ ├── ip/ │ │ │ │ │ │ ├── AppAreaController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppAreaNodeRespVO.java │ │ │ │ │ └── notice/ │ │ │ │ │ └── AppNoticeController.java │ │ │ │ ├── convert/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── AuthConvert.java │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ └── OAuth2OpenConvert.java │ │ │ │ │ ├── social/ │ │ │ │ │ │ └── SocialUserConvert.java │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ └── TenantConvert.java │ │ │ │ │ └── user/ │ │ │ │ │ └── UserConvert.java │ │ │ │ ├── dal/ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ ├── DeptDO.java │ │ │ │ │ │ │ ├── PostDO.java │ │ │ │ │ │ │ └── UserPostDO.java │ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ │ ├── DictDataDO.java │ │ │ │ │ │ │ └── DictTypeDO.java │ │ │ │ │ │ ├── logger/ │ │ │ │ │ │ │ ├── LoginLogDO.java │ │ │ │ │ │ │ └── OperateLogDO.java │ │ │ │ │ │ ├── mail/ │ │ │ │ │ │ │ ├── MailAccountDO.java │ │ │ │ │ │ │ ├── MailLogDO.java │ │ │ │ │ │ │ └── MailTemplateDO.java │ │ │ │ │ │ ├── notice/ │ │ │ │ │ │ │ └── NoticeDO.java │ │ │ │ │ │ ├── notify/ │ │ │ │ │ │ │ ├── NotifyMessageDO.java │ │ │ │ │ │ │ └── NotifyTemplateDO.java │ │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ │ ├── OAuth2AccessTokenDO.java │ │ │ │ │ │ │ ├── OAuth2ApproveDO.java │ │ │ │ │ │ │ ├── OAuth2ClientDO.java │ │ │ │ │ │ │ ├── OAuth2CodeDO.java │ │ │ │ │ │ │ └── OAuth2RefreshTokenDO.java │ │ │ │ │ │ ├── permission/ │ │ │ │ │ │ │ ├── MenuDO.java │ │ │ │ │ │ │ ├── RoleDO.java │ │ │ │ │ │ │ ├── RoleMenuDO.java │ │ │ │ │ │ │ └── UserRoleDO.java │ │ │ │ │ │ ├── sms/ │ │ │ │ │ │ │ ├── SmsChannelDO.java │ │ │ │ │ │ │ ├── SmsCodeDO.java │ │ │ │ │ │ │ ├── SmsLogDO.java │ │ │ │ │ │ │ └── SmsTemplateDO.java │ │ │ │ │ │ ├── social/ │ │ │ │ │ │ │ ├── SocialClientDO.java │ │ │ │ │ │ │ ├── SocialUserBindDO.java │ │ │ │ │ │ │ └── SocialUserDO.java │ │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ │ ├── TenantDO.java │ │ │ │ │ │ │ └── TenantPackageDO.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ └── AdminUserDO.java │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ ├── DeptMapper.java │ │ │ │ │ │ │ ├── PostMapper.java │ │ │ │ │ │ │ └── UserPostMapper.java │ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ │ ├── DictDataMapper.java │ │ │ │ │ │ │ └── DictTypeMapper.java │ │ │ │ │ │ ├── logger/ │ │ │ │ │ │ │ ├── LoginLogMapper.java │ │ │ │ │ │ │ └── OperateLogMapper.java │ │ │ │ │ │ ├── mail/ │ │ │ │ │ │ │ ├── MailAccountMapper.java │ │ │ │ │ │ │ ├── MailLogMapper.java │ │ │ │ │ │ │ └── MailTemplateMapper.java │ │ │ │ │ │ ├── notice/ │ │ │ │ │ │ │ └── NoticeMapper.java │ │ │ │ │ │ ├── notify/ │ │ │ │ │ │ │ ├── NotifyMessageMapper.java │ │ │ │ │ │ │ └── NotifyTemplateMapper.java │ │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ │ ├── OAuth2AccessTokenMapper.java │ │ │ │ │ │ │ ├── OAuth2ApproveMapper.java │ │ │ │ │ │ │ ├── OAuth2ClientMapper.java │ │ │ │ │ │ │ ├── OAuth2CodeMapper.java │ │ │ │ │ │ │ └── OAuth2RefreshTokenMapper.java │ │ │ │ │ │ ├── permission/ │ │ │ │ │ │ │ ├── MenuMapper.java │ │ │ │ │ │ │ ├── RoleMapper.java │ │ │ │ │ │ │ ├── RoleMenuMapper.java │ │ │ │ │ │ │ └── UserRoleMapper.java │ │ │ │ │ │ ├── sms/ │ │ │ │ │ │ │ ├── SmsChannelMapper.java │ │ │ │ │ │ │ ├── SmsCodeMapper.java │ │ │ │ │ │ │ ├── SmsLogMapper.java │ │ │ │ │ │ │ └── SmsTemplateMapper.java │ │ │ │ │ │ ├── social/ │ │ │ │ │ │ │ ├── SocialClientMapper.java │ │ │ │ │ │ │ ├── SocialUserBindMapper.java │ │ │ │ │ │ │ └── SocialUserMapper.java │ │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ │ ├── TenantMapper.java │ │ │ │ │ │ │ └── TenantPackageMapper.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ └── AdminUserMapper.java │ │ │ │ │ └── redis/ │ │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ │ └── oauth2/ │ │ │ │ │ └── OAuth2AccessTokenRedisDAO.java │ │ │ │ ├── framework/ │ │ │ │ │ ├── captcha/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopCaptchaConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── RedisCaptchaServiceImpl.java │ │ │ │ │ ├── datapermission/ │ │ │ │ │ │ └── config/ │ │ │ │ │ │ └── DataPermissionConfiguration.java │ │ │ │ │ ├── operatelog/ │ │ │ │ │ │ └── core/ │ │ │ │ │ │ ├── AdminUserParseFunction.java │ │ │ │ │ │ ├── AreaParseFunction.java │ │ │ │ │ │ ├── BooleanParseFunction.java │ │ │ │ │ │ ├── DeptParseFunction.java │ │ │ │ │ │ ├── PostParseFunction.java │ │ │ │ │ │ └── SexParseFunction.java │ │ │ │ │ ├── sms/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── SmsCodeProperties.java │ │ │ │ │ │ │ └── SmsConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ ├── client/ │ │ │ │ │ │ │ ├── SmsClient.java │ │ │ │ │ │ │ ├── SmsClientFactory.java │ │ │ │ │ │ │ ├── dto/ │ │ │ │ │ │ │ │ ├── SmsReceiveRespDTO.java │ │ │ │ │ │ │ │ ├── SmsSendRespDTO.java │ │ │ │ │ │ │ │ └── SmsTemplateRespDTO.java │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ ├── AbstractSmsClient.java │ │ │ │ │ │ │ ├── AliyunSmsClient.java │ │ │ │ │ │ │ ├── DebugDingTalkSmsClient.java │ │ │ │ │ │ │ ├── SmsClientFactoryImpl.java │ │ │ │ │ │ │ └── TencentSmsClient.java │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ ├── SmsChannelEnum.java │ │ │ │ │ │ │ └── SmsTemplateAuditStatusEnum.java │ │ │ │ │ │ └── property/ │ │ │ │ │ │ └── SmsChannelProperties.java │ │ │ │ │ └── web/ │ │ │ │ │ └── config/ │ │ │ │ │ └── SystemWebConfiguration.java │ │ │ │ ├── job/ │ │ │ │ │ └── DemoJob.java │ │ │ │ ├── mq/ │ │ │ │ │ ├── consumer/ │ │ │ │ │ │ ├── mail/ │ │ │ │ │ │ │ └── MailSendConsumer.java │ │ │ │ │ │ └── sms/ │ │ │ │ │ │ └── SmsSendConsumer.java │ │ │ │ │ ├── message/ │ │ │ │ │ │ ├── mail/ │ │ │ │ │ │ │ └── MailSendMessage.java │ │ │ │ │ │ └── sms/ │ │ │ │ │ │ └── SmsSendMessage.java │ │ │ │ │ └── producer/ │ │ │ │ │ ├── mail/ │ │ │ │ │ │ └── MailProducer.java │ │ │ │ │ └── sms/ │ │ │ │ │ └── SmsProducer.java │ │ │ │ ├── service/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── AdminAuthService.java │ │ │ │ │ │ └── AdminAuthServiceImpl.java │ │ │ │ │ ├── dept/ │ │ │ │ │ │ ├── DeptService.java │ │ │ │ │ │ ├── DeptServiceImpl.java │ │ │ │ │ │ ├── PostService.java │ │ │ │ │ │ └── PostServiceImpl.java │ │ │ │ │ ├── dict/ │ │ │ │ │ │ ├── DictDataService.java │ │ │ │ │ │ ├── DictDataServiceImpl.java │ │ │ │ │ │ ├── DictTypeService.java │ │ │ │ │ │ └── DictTypeServiceImpl.java │ │ │ │ │ ├── logger/ │ │ │ │ │ │ ├── LoginLogService.java │ │ │ │ │ │ ├── LoginLogServiceImpl.java │ │ │ │ │ │ ├── OperateLogService.java │ │ │ │ │ │ └── OperateLogServiceImpl.java │ │ │ │ │ ├── mail/ │ │ │ │ │ │ ├── MailAccountService.java │ │ │ │ │ │ ├── MailAccountServiceImpl.java │ │ │ │ │ │ ├── MailLogService.java │ │ │ │ │ │ ├── MailLogServiceImpl.java │ │ │ │ │ │ ├── MailSendService.java │ │ │ │ │ │ ├── MailSendServiceImpl.java │ │ │ │ │ │ ├── MailTemplateService.java │ │ │ │ │ │ └── MailTemplateServiceImpl.java │ │ │ │ │ ├── member/ │ │ │ │ │ │ ├── MemberService.java │ │ │ │ │ │ └── MemberServiceImpl.java │ │ │ │ │ ├── notice/ │ │ │ │ │ │ ├── NoticeService.java │ │ │ │ │ │ └── NoticeServiceImpl.java │ │ │ │ │ ├── notify/ │ │ │ │ │ │ ├── NotifyMessageService.java │ │ │ │ │ │ ├── NotifyMessageServiceImpl.java │ │ │ │ │ │ ├── NotifySendService.java │ │ │ │ │ │ ├── NotifySendServiceImpl.java │ │ │ │ │ │ ├── NotifyTemplateService.java │ │ │ │ │ │ └── NotifyTemplateServiceImpl.java │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ ├── OAuth2ApproveService.java │ │ │ │ │ │ ├── OAuth2ApproveServiceImpl.java │ │ │ │ │ │ ├── OAuth2ClientService.java │ │ │ │ │ │ ├── OAuth2ClientServiceImpl.java │ │ │ │ │ │ ├── OAuth2CodeService.java │ │ │ │ │ │ ├── OAuth2CodeServiceImpl.java │ │ │ │ │ │ ├── OAuth2GrantService.java │ │ │ │ │ │ ├── OAuth2GrantServiceImpl.java │ │ │ │ │ │ ├── OAuth2TokenService.java │ │ │ │ │ │ └── OAuth2TokenServiceImpl.java │ │ │ │ │ ├── permission/ │ │ │ │ │ │ ├── MenuService.java │ │ │ │ │ │ ├── MenuServiceImpl.java │ │ │ │ │ │ ├── PermissionService.java │ │ │ │ │ │ ├── PermissionServiceImpl.java │ │ │ │ │ │ ├── RoleService.java │ │ │ │ │ │ └── RoleServiceImpl.java │ │ │ │ │ ├── sms/ │ │ │ │ │ │ ├── SmsChannelService.java │ │ │ │ │ │ ├── SmsChannelServiceImpl.java │ │ │ │ │ │ ├── SmsCodeService.java │ │ │ │ │ │ ├── SmsCodeServiceImpl.java │ │ │ │ │ │ ├── SmsLogService.java │ │ │ │ │ │ ├── SmsLogServiceImpl.java │ │ │ │ │ │ ├── SmsSendService.java │ │ │ │ │ │ ├── SmsSendServiceImpl.java │ │ │ │ │ │ ├── SmsTemplateService.java │ │ │ │ │ │ └── SmsTemplateServiceImpl.java │ │ │ │ │ ├── social/ │ │ │ │ │ │ ├── SocialClientService.java │ │ │ │ │ │ ├── SocialClientServiceImpl.java │ │ │ │ │ │ ├── SocialUserService.java │ │ │ │ │ │ └── SocialUserServiceImpl.java │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ ├── TenantPackageService.java │ │ │ │ │ │ ├── TenantPackageServiceImpl.java │ │ │ │ │ │ ├── TenantService.java │ │ │ │ │ │ ├── TenantServiceImpl.java │ │ │ │ │ │ └── handler/ │ │ │ │ │ │ ├── TenantInfoHandler.java │ │ │ │ │ │ └── TenantMenuHandler.java │ │ │ │ │ └── user/ │ │ │ │ │ ├── AdminUserService.java │ │ │ │ │ └── AdminUserServiceImpl.java │ │ │ │ └── util/ │ │ │ │ └── oauth2/ │ │ │ │ └── OAuth2Utils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── services/ │ │ │ └── com.xingyuv.captcha.service.CaptchaCacheService │ │ └── test/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── system/ │ │ │ ├── controller/ │ │ │ │ └── admin/ │ │ │ │ └── oauth2/ │ │ │ │ └── OAuth2OpenControllerTest.java │ │ │ ├── framework/ │ │ │ │ └── sms/ │ │ │ │ └── core/ │ │ │ │ └── client/ │ │ │ │ └── impl/ │ │ │ │ ├── AliyunSmsClientTest.java │ │ │ │ └── TencentSmsClientTest.java │ │ │ └── service/ │ │ │ ├── auth/ │ │ │ │ └── AdminAuthServiceImplTest.java │ │ │ ├── dept/ │ │ │ │ ├── DeptServiceImplTest.java │ │ │ │ └── PostServiceImplTest.java │ │ │ ├── dict/ │ │ │ │ ├── DictDataServiceImplTest.java │ │ │ │ └── DictTypeServiceImplTest.java │ │ │ ├── logger/ │ │ │ │ ├── LoginLogServiceImplTest.java │ │ │ │ └── OperateLogServiceImplTest.java │ │ │ ├── mail/ │ │ │ │ ├── MailAccountServiceImplTest.java │ │ │ │ ├── MailLogServiceImplTest.java │ │ │ │ ├── MailSendServiceImplTest.java │ │ │ │ └── MailTemplateServiceImplTest.java │ │ │ ├── notice/ │ │ │ │ └── NoticeServiceImplTest.java │ │ │ ├── notify/ │ │ │ │ ├── NotifyMessageServiceImplTest.java │ │ │ │ ├── NotifySendServiceImplTest.java │ │ │ │ └── NotifyTemplateServiceImplTest.java │ │ │ ├── oauth2/ │ │ │ │ ├── OAuth2ApproveServiceImplTest.java │ │ │ │ ├── OAuth2ClientServiceImplTest.java │ │ │ │ ├── OAuth2CodeServiceImplTest.java │ │ │ │ ├── OAuth2GrantServiceImplTest.java │ │ │ │ └── OAuth2TokenServiceImplTest.java │ │ │ ├── permission/ │ │ │ │ ├── MenuServiceImplTest.java │ │ │ │ ├── PermissionServiceTest.java │ │ │ │ └── RoleServiceImplTest.java │ │ │ ├── sms/ │ │ │ │ ├── SmsChannelServiceTest.java │ │ │ │ ├── SmsCodeServiceImplTest.java │ │ │ │ ├── SmsLogServiceImplTest.java │ │ │ │ ├── SmsSendServiceImplTest.java │ │ │ │ └── SmsTemplateServiceImplTest.java │ │ │ ├── social/ │ │ │ │ ├── SocialClientServiceImplTest.java │ │ │ │ └── SocialUserServiceImplTest.java │ │ │ ├── tenant/ │ │ │ │ ├── TenantPackageServiceImplTest.java │ │ │ │ └── TenantServiceImplTest.java │ │ │ └── user/ │ │ │ └── AdminUserServiceImplTest.java │ │ └── resources/ │ │ ├── application-unit-test.yaml │ │ ├── logback.xml │ │ └── sql/ │ │ ├── clean.sql │ │ └── create_tables.sql │ └── yshop-server/ │ ├── Dockerfile │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── server/ │ │ │ ├── YshopServerApplication.java │ │ │ └── controller/ │ │ │ └── DefaultController.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application.yaml │ │ └── logback-spring.xml │ └── test/ │ └── java/ │ └── co/ │ └── yixiang/ │ └── yshop/ │ └── ProjectReactor.java ├── yshop-drink-uniapp-vue3/ │ ├── .gitignore │ ├── .hbuilderx/ │ │ └── launch.json │ ├── App.vue │ ├── api/ │ │ ├── address.js │ │ ├── api.js │ │ ├── auth.js │ │ ├── coupon.js │ │ ├── goods.js │ │ ├── market.js │ │ ├── order.js │ │ ├── score.js │ │ └── user.js │ ├── components/ │ │ ├── blank/ │ │ │ └── blank.vue │ │ ├── card/ │ │ │ └── card.vue │ │ ├── city-select/ │ │ │ └── city-select.vue │ │ ├── container/ │ │ │ └── container.vue │ │ ├── layout/ │ │ │ └── layout.vue │ │ ├── list-cell/ │ │ │ └── list-cell.vue │ │ ├── logo/ │ │ │ └── logo.vue │ │ ├── modal/ │ │ │ └── modal.vue │ │ ├── space/ │ │ │ └── space.vue │ │ ├── upload-file/ │ │ │ └── upload-file.vue │ │ └── verification/ │ │ └── verification.vue │ ├── config/ │ │ └── index.js │ ├── hooks/ │ │ ├── index.js │ │ ├── useGlobalProperties.js │ │ └── usePage.js │ ├── index.html │ ├── jsconfig.json │ ├── main.js │ ├── manifest.json │ ├── package.json │ ├── pages/ │ │ ├── cart/ │ │ │ └── cart.vue │ │ ├── components/ │ │ │ └── pages/ │ │ │ ├── address/ │ │ │ │ ├── add.vue │ │ │ │ └── address.vue │ │ │ ├── balance/ │ │ │ │ └── bill.vue │ │ │ ├── coupons/ │ │ │ │ └── coupons.vue │ │ │ ├── login/ │ │ │ │ ├── login.vue │ │ │ │ └── logout.vue │ │ │ ├── mine/ │ │ │ │ ├── content.vue │ │ │ │ └── userinfo.vue │ │ │ ├── orders/ │ │ │ │ ├── detail.vue │ │ │ │ ├── orders.vue │ │ │ │ └── refund.vue │ │ │ ├── packages/ │ │ │ │ └── index.vue │ │ │ ├── pay/ │ │ │ │ └── pay.vue │ │ │ ├── remark/ │ │ │ │ └── remark.vue │ │ │ ├── scoreproduct/ │ │ │ │ ├── confirm.vue │ │ │ │ ├── detail.vue │ │ │ │ ├── list.vue │ │ │ │ ├── order.vue │ │ │ │ └── orderDetail.vue │ │ │ └── shop/ │ │ │ └── shop.vue │ │ ├── index/ │ │ │ └── index.vue │ │ ├── menu/ │ │ │ └── menu.vue │ │ ├── mine/ │ │ │ └── mine.vue │ │ └── order/ │ │ └── order.vue │ ├── pages.json │ ├── static/ │ │ ├── iconfont/ │ │ │ ├── iconfont.css │ │ │ └── iconfont.scss │ │ └── style/ │ │ ├── app.scss │ │ ├── style.css │ │ ├── style.less │ │ └── yshop.css │ ├── store/ │ │ ├── home.js │ │ ├── page.js │ │ └── store.js │ ├── uni.promisify.adaptor.js │ ├── uni.scss │ ├── uni_modules/ │ │ ├── uni-card/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uni-card/ │ │ │ │ └── uni-card.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uni-icons/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uni-icons/ │ │ │ │ ├── icons.js │ │ │ │ ├── uni-icons.vue │ │ │ │ └── uniicons.css │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uni-scss/ │ │ │ ├── changelog.md │ │ │ ├── index.scss │ │ │ ├── package.json │ │ │ ├── readme.md │ │ │ ├── styles/ │ │ │ │ ├── index.scss │ │ │ │ ├── setting/ │ │ │ │ │ ├── _border.scss │ │ │ │ │ ├── _color.scss │ │ │ │ │ ├── _radius.scss │ │ │ │ │ ├── _space.scss │ │ │ │ │ ├── _styles.scss │ │ │ │ │ ├── _text.scss │ │ │ │ │ └── _variables.scss │ │ │ │ └── tools/ │ │ │ │ └── functions.scss │ │ │ ├── theme.scss │ │ │ └── variables.scss │ │ ├── uv-action-sheet/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-action-sheet/ │ │ │ │ ├── props.js │ │ │ │ └── uv-action-sheet.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-album/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-album/ │ │ │ │ └── uv-album.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-alert/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-alert/ │ │ │ │ ├── props.js │ │ │ │ └── uv-alert.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-avatar/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-avatar/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-avatar.vue │ │ │ │ └── uv-avatar-group/ │ │ │ │ ├── props.js │ │ │ │ └── uv-avatar-group.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-back-top/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-back-top/ │ │ │ │ ├── props.js │ │ │ │ └── uv-back-top.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-badge/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-badge/ │ │ │ │ ├── props.js │ │ │ │ └── uv-badge.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-button/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-button/ │ │ │ │ ├── nvue.scss │ │ │ │ ├── props.js │ │ │ │ ├── uv-button.vue │ │ │ │ └── vue.scss │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-calendar/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-calendar/ │ │ │ │ ├── calendar.js │ │ │ │ ├── header.vue │ │ │ │ ├── month.vue │ │ │ │ ├── props.js │ │ │ │ └── uv-calendar.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-calendars/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-calendars/ │ │ │ │ ├── calendar-body.vue │ │ │ │ ├── calendar-item.vue │ │ │ │ ├── calendar.js │ │ │ │ ├── i18n/ │ │ │ │ │ ├── en.json │ │ │ │ │ ├── index.js │ │ │ │ │ ├── zh-Hans.json │ │ │ │ │ └── zh-Hant.json │ │ │ │ ├── util.js │ │ │ │ ├── uv-calendar-body.vue │ │ │ │ ├── uv-calendar-item.vue │ │ │ │ └── uv-calendars.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-cell/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-cell/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-cell.vue │ │ │ │ └── uv-cell-group/ │ │ │ │ ├── props.js │ │ │ │ └── uv-cell-group.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-checkbox/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-checkbox/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-checkbox.vue │ │ │ │ └── uv-checkbox-group/ │ │ │ │ ├── props.js │ │ │ │ └── uv-checkbox-group.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-code/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-code/ │ │ │ │ ├── props.js │ │ │ │ └── uv-code.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-code-input/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-code-input/ │ │ │ │ ├── props.js │ │ │ │ └── uv-code-input.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-collapse/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-collapse/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-collapse.vue │ │ │ │ └── uv-collapse-item/ │ │ │ │ ├── props.js │ │ │ │ └── uv-collapse-item.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-count-down/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-count-down/ │ │ │ │ ├── props.js │ │ │ │ ├── utils.js │ │ │ │ └── uv-count-down.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-count-to/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-count-to/ │ │ │ │ ├── props.js │ │ │ │ └── uv-count-to.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-datetime-picker/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-datetime-picker/ │ │ │ │ ├── props.js │ │ │ │ └── uv-datetime-picker.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-divider/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-divider/ │ │ │ │ ├── props.js │ │ │ │ └── uv-divider.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-drop-down/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-drop-down/ │ │ │ │ │ └── uv-drop-down.vue │ │ │ │ ├── uv-drop-down-item/ │ │ │ │ │ └── uv-drop-down-item.vue │ │ │ │ └── uv-drop-down-popup/ │ │ │ │ └── uv-drop-down-popup.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-empty/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-empty/ │ │ │ │ ├── props.js │ │ │ │ └── uv-empty.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-form/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-form/ │ │ │ │ │ ├── props.js │ │ │ │ │ ├── uv-form.vue │ │ │ │ │ └── valid.js │ │ │ │ └── uv-form-item/ │ │ │ │ ├── props.js │ │ │ │ └── uv-form-item.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-gap/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-gap/ │ │ │ │ ├── props.js │ │ │ │ └── uv-gap.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-grid/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-grid/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-grid.vue │ │ │ │ └── uv-grid-item/ │ │ │ │ ├── props.js │ │ │ │ └── uv-grid-item.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-icon/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-icon/ │ │ │ │ ├── icons.js │ │ │ │ ├── props.js │ │ │ │ └── uv-icon.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-image/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-image/ │ │ │ │ ├── props.js │ │ │ │ └── uv-image.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-index-list/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-index-anchor/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-index-anchor.vue │ │ │ │ ├── uv-index-item/ │ │ │ │ │ └── uv-index-item.vue │ │ │ │ └── uv-index-list/ │ │ │ │ ├── props.js │ │ │ │ └── uv-index-list.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-input/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-input/ │ │ │ │ ├── props.js │ │ │ │ └── uv-input.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-keyboard/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-car-keyboard/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-car-keyboard.vue │ │ │ │ ├── uv-keyboard/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-keyboard.vue │ │ │ │ ├── uv-keyboard-car/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-keyboard-car.vue │ │ │ │ ├── uv-keyboard-number/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-keyboard-number.vue │ │ │ │ └── uv-number-keyboard/ │ │ │ │ ├── props.js │ │ │ │ └── uv-number-keyboard.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-line/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-line/ │ │ │ │ ├── props.js │ │ │ │ └── uv-line.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-line-progress/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-line-progress/ │ │ │ │ ├── props.js │ │ │ │ └── uv-line-progress.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-link/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-link/ │ │ │ │ ├── props.js │ │ │ │ └── uv-link.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-list/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-list/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-list.vue │ │ │ │ └── uv-list-item/ │ │ │ │ ├── props.js │ │ │ │ └── uv-list-item.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-load-more/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-load-more/ │ │ │ │ ├── props.js │ │ │ │ └── uv-load-more.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-loading-icon/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-loading-icon/ │ │ │ │ ├── props.js │ │ │ │ └── uv-loading-icon.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-loading-page/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-loading-page/ │ │ │ │ ├── props.js │ │ │ │ └── uv-loading-page.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-modal/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-modal/ │ │ │ │ ├── props.js │ │ │ │ └── uv-modal.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-navbar/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-navbar/ │ │ │ │ ├── props.js │ │ │ │ └── uv-navbar.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-no-network/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-no-network/ │ │ │ │ ├── props.js │ │ │ │ └── uv-no-network.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-notice-bar/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-column-notice/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-column-notice.vue │ │ │ │ ├── uv-notice-bar/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-notice-bar.vue │ │ │ │ └── uv-row-notice/ │ │ │ │ ├── props.js │ │ │ │ └── uv-row-notice.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-notify/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-notify/ │ │ │ │ ├── props.js │ │ │ │ └── uv-notify.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-number-box/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-number-box/ │ │ │ │ ├── props.js │ │ │ │ └── uv-number-box.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-overlay/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-overlay/ │ │ │ │ ├── props.js │ │ │ │ └── uv-overlay.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-parse/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-parse/ │ │ │ │ ├── node/ │ │ │ │ │ └── node.vue │ │ │ │ ├── parser.js │ │ │ │ └── uv-parse.vue │ │ │ ├── package.json │ │ │ ├── readme.md │ │ │ └── static/ │ │ │ └── app-plus/ │ │ │ └── uv-parse/ │ │ │ ├── js/ │ │ │ │ └── handler.js │ │ │ └── local.html │ │ ├── uv-pick-color/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-pick-color/ │ │ │ │ ├── colors.js │ │ │ │ ├── props.js │ │ │ │ └── uv-pick-color.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-picker/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-picker/ │ │ │ │ ├── props.js │ │ │ │ └── uv-picker.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-popup/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-popup/ │ │ │ │ ├── keypress.js │ │ │ │ ├── props.js │ │ │ │ └── uv-popup.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-qrcode/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-qrcode/ │ │ │ │ ├── cache.js │ │ │ │ ├── gcanvas/ │ │ │ │ │ ├── bridge/ │ │ │ │ │ │ └── bridge-weex.js │ │ │ │ │ ├── context-2d/ │ │ │ │ │ │ ├── FillStyleLinearGradient.js │ │ │ │ │ │ ├── FillStylePattern.js │ │ │ │ │ │ ├── FillStyleRadialGradient.js │ │ │ │ │ │ └── RenderingContext.js │ │ │ │ │ ├── context-webgl/ │ │ │ │ │ │ ├── ActiveInfo.js │ │ │ │ │ │ ├── Buffer.js │ │ │ │ │ │ ├── Framebuffer.js │ │ │ │ │ │ ├── GLenum.js │ │ │ │ │ │ ├── GLmethod.js │ │ │ │ │ │ ├── GLtype.js │ │ │ │ │ │ ├── Program.js │ │ │ │ │ │ ├── Renderbuffer.js │ │ │ │ │ │ ├── RenderingContext.js │ │ │ │ │ │ ├── Shader.js │ │ │ │ │ │ ├── ShaderPrecisionFormat.js │ │ │ │ │ │ ├── Texture.js │ │ │ │ │ │ ├── UniformLocation.js │ │ │ │ │ │ └── classUtils.js │ │ │ │ │ ├── env/ │ │ │ │ │ │ ├── canvas.js │ │ │ │ │ │ ├── image.js │ │ │ │ │ │ └── tool.js │ │ │ │ │ └── index.js │ │ │ │ ├── props.js │ │ │ │ ├── qrcode.js │ │ │ │ ├── queue.js │ │ │ │ └── uv-qrcode.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-radio/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-radio/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-radio.vue │ │ │ │ └── uv-radio-group/ │ │ │ │ ├── props.js │ │ │ │ └── uv-radio-group.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-rate/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-rate/ │ │ │ │ ├── props.js │ │ │ │ └── uv-rate.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-read-more/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-read-more/ │ │ │ │ ├── props.js │ │ │ │ └── uv-read-more.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-row/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-col/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-col.vue │ │ │ │ └── uv-row/ │ │ │ │ ├── props.js │ │ │ │ └── uv-row.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-safe-bottom/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-safe-bottom/ │ │ │ │ └── uv-safe-bottom.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-scroll-list/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-scroll-list/ │ │ │ │ ├── nvue.js │ │ │ │ ├── other.js │ │ │ │ ├── props.js │ │ │ │ ├── scrollWxs.wxs │ │ │ │ └── uv-scroll-list.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-search/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-search/ │ │ │ │ ├── props.js │ │ │ │ └── uv-search.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-skeleton/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-skeleton/ │ │ │ │ ├── props.js │ │ │ │ └── uv-skeleton.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-slider/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-slider/ │ │ │ │ ├── props.js │ │ │ │ └── uv-slider.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-status-bar/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-status-bar/ │ │ │ │ ├── props.js │ │ │ │ └── uv-status-bar.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-steps/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-steps/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-steps.vue │ │ │ │ └── uv-steps-item/ │ │ │ │ ├── props.js │ │ │ │ └── uv-steps-item.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-sticky/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-sticky/ │ │ │ │ ├── props.js │ │ │ │ └── uv-sticky.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-subsection/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-subsection/ │ │ │ │ ├── props.js │ │ │ │ └── uv-subsection.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-swipe-action/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-swipe-action/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-swipe-action.vue │ │ │ │ └── uv-swipe-action-item/ │ │ │ │ ├── index - backup.wxs │ │ │ │ ├── index.wxs │ │ │ │ ├── nvue - backup.js │ │ │ │ ├── nvue.js │ │ │ │ ├── props.js │ │ │ │ ├── uv-swipe-action-item.vue │ │ │ │ └── wxs.js │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-swiper/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-swiper/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-swiper.vue │ │ │ │ └── uv-swiper-indicator/ │ │ │ │ ├── props.js │ │ │ │ └── uv-swiper-indicator.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-switch/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-switch/ │ │ │ │ ├── props.js │ │ │ │ └── uv-switch.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-tabbar/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-tabbar/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-tabbar.vue │ │ │ │ └── uv-tabbar-item/ │ │ │ │ ├── props.js │ │ │ │ └── uv-tabbar-item.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-tabs/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-tabs/ │ │ │ │ ├── props.js │ │ │ │ └── uv-tabs.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-tags/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-tags/ │ │ │ │ ├── props.js │ │ │ │ └── uv-tags.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-text/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-text/ │ │ │ │ ├── props.js │ │ │ │ ├── uv-text.vue │ │ │ │ └── value.js │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-textarea/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-textarea/ │ │ │ │ ├── props.js │ │ │ │ └── uv-textarea.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-toast/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-toast/ │ │ │ │ └── uv-toast.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-toolbar/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-toolbar/ │ │ │ │ ├── props.js │ │ │ │ └── uv-toolbar.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-tooltip/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-tooltip/ │ │ │ │ ├── props.js │ │ │ │ └── uv-tooltip.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-transition/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-transition/ │ │ │ │ ├── createAnimation.js │ │ │ │ ├── props.js │ │ │ │ └── uv-transition.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-ui/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-ui/ │ │ │ │ └── uv-ui.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-ui-tools/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ └── uv-ui-tools/ │ │ │ │ └── uv-ui-tools.vue │ │ │ ├── index.js │ │ │ ├── index.scss │ │ │ ├── libs/ │ │ │ │ ├── config/ │ │ │ │ │ └── config.js │ │ │ │ ├── css/ │ │ │ │ │ ├── color.scss │ │ │ │ │ ├── common.scss │ │ │ │ │ ├── components.scss │ │ │ │ │ ├── variable.scss │ │ │ │ │ └── vue.scss │ │ │ │ ├── function/ │ │ │ │ │ ├── colorGradient.js │ │ │ │ │ ├── debounce.js │ │ │ │ │ ├── digit.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── platform.js │ │ │ │ │ ├── test.js │ │ │ │ │ └── throttle.js │ │ │ │ ├── luch-request/ │ │ │ │ │ ├── adapters/ │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── InterceptorManager.js │ │ │ │ │ │ ├── Request.js │ │ │ │ │ │ ├── buildFullPath.js │ │ │ │ │ │ ├── defaults.js │ │ │ │ │ │ ├── dispatchRequest.js │ │ │ │ │ │ ├── mergeConfig.js │ │ │ │ │ │ └── settle.js │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ ├── buildURL.js │ │ │ │ │ │ ├── combineURLs.js │ │ │ │ │ │ └── isAbsoluteURL.js │ │ │ │ │ ├── index.d.ts │ │ │ │ │ ├── index.js │ │ │ │ │ ├── utils/ │ │ │ │ │ │ └── clone.js │ │ │ │ │ └── utils.js │ │ │ │ ├── mixin/ │ │ │ │ │ ├── button.js │ │ │ │ │ ├── mixin.js │ │ │ │ │ ├── mpMixin.js │ │ │ │ │ ├── mpShare.js │ │ │ │ │ ├── openType.js │ │ │ │ │ └── touch.js │ │ │ │ └── util/ │ │ │ │ ├── dayjs.js │ │ │ │ └── route.js │ │ │ ├── package.json │ │ │ ├── readme.md │ │ │ └── theme.scss │ │ ├── uv-upload/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-preview-video/ │ │ │ │ │ └── uv-preview-video.vue │ │ │ │ └── uv-upload/ │ │ │ │ ├── mixin.js │ │ │ │ ├── props.js │ │ │ │ ├── utils.js │ │ │ │ └── uv-upload.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── uv-vtabs/ │ │ │ ├── changelog.md │ │ │ ├── components/ │ │ │ │ ├── uv-vtabs/ │ │ │ │ │ ├── props.js │ │ │ │ │ └── uv-vtabs.vue │ │ │ │ └── uv-vtabs-item/ │ │ │ │ └── uv-vtabs-item.vue │ │ │ ├── package.json │ │ │ └── readme.md │ │ └── uv-waterfall/ │ │ ├── changelog.md │ │ ├── components/ │ │ │ └── uv-waterfall/ │ │ │ ├── props.js │ │ │ └── uv-waterfall.vue │ │ ├── package.json │ │ └── readme.md │ ├── utils/ │ │ ├── cookie.js │ │ ├── index.js │ │ ├── querystring.js │ │ ├── router.js │ │ └── util.js │ └── vue.config.js └── yshop-drink-vue3/ ├── .editorconfig ├── .eslintignore ├── .eslintrc-auto-import.json ├── .eslintrc.js ├── .gitignore ├── .prettierignore ├── .stylelintignore ├── .vscode/ │ ├── extensions.json │ ├── launch.json │ └── settings.json ├── README.md ├── build/ │ └── vite/ │ ├── index.ts │ └── optimize.ts ├── index.html ├── package.json ├── postcss.config.js ├── prettier.config.js ├── public/ │ ├── UEditor/ │ │ ├── dialogs/ │ │ │ ├── anchor/ │ │ │ │ └── anchor.html │ │ │ ├── attachment/ │ │ │ │ ├── attachment.css │ │ │ │ ├── attachment.html │ │ │ │ └── attachment.js │ │ │ ├── background/ │ │ │ │ ├── background.css │ │ │ │ ├── background.html │ │ │ │ └── background.js │ │ │ ├── charts/ │ │ │ │ ├── chart.config.js │ │ │ │ ├── charts.css │ │ │ │ ├── charts.html │ │ │ │ └── charts.js │ │ │ ├── emotion/ │ │ │ │ ├── emotion.css │ │ │ │ ├── emotion.html │ │ │ │ └── emotion.js │ │ │ ├── gmap/ │ │ │ │ └── gmap.html │ │ │ ├── help/ │ │ │ │ ├── help.css │ │ │ │ ├── help.html │ │ │ │ └── help.js │ │ │ ├── image/ │ │ │ │ ├── image.css │ │ │ │ ├── image.html │ │ │ │ └── image.js │ │ │ ├── insertframe/ │ │ │ │ └── insertframe.html │ │ │ ├── internal.js │ │ │ ├── link/ │ │ │ │ └── link.html │ │ │ ├── map/ │ │ │ │ ├── map.html │ │ │ │ └── show.html │ │ │ ├── music/ │ │ │ │ ├── music.css │ │ │ │ ├── music.html │ │ │ │ └── music.js │ │ │ ├── preview/ │ │ │ │ └── preview.html │ │ │ ├── scrawl/ │ │ │ │ ├── scrawl.css │ │ │ │ ├── scrawl.html │ │ │ │ └── scrawl.js │ │ │ ├── searchreplace/ │ │ │ │ ├── searchreplace.html │ │ │ │ └── searchreplace.js │ │ │ ├── snapscreen/ │ │ │ │ └── snapscreen.html │ │ │ ├── spechars/ │ │ │ │ ├── spechars.html │ │ │ │ └── spechars.js │ │ │ ├── table/ │ │ │ │ ├── edittable.css │ │ │ │ ├── edittable.html │ │ │ │ ├── edittable.js │ │ │ │ ├── edittd.html │ │ │ │ └── edittip.html │ │ │ ├── template/ │ │ │ │ ├── config.js │ │ │ │ ├── template.css │ │ │ │ ├── template.html │ │ │ │ └── template.js │ │ │ ├── video/ │ │ │ │ ├── video.css │ │ │ │ ├── video.html │ │ │ │ └── video.js │ │ │ ├── webapp/ │ │ │ │ └── webapp.html │ │ │ └── wordimage/ │ │ │ ├── tangram.js │ │ │ ├── wordimage.html │ │ │ └── wordimage.js │ │ ├── index.html │ │ ├── lang/ │ │ │ ├── en/ │ │ │ │ └── en.js │ │ │ └── zh-cn/ │ │ │ └── zh-cn.js │ │ ├── themes/ │ │ │ ├── default/ │ │ │ │ ├── css/ │ │ │ │ │ └── ueditor.css │ │ │ │ └── dialogbase.css │ │ │ └── iframe.css │ │ ├── third-party/ │ │ │ ├── SyntaxHighlighter/ │ │ │ │ ├── shCore.js │ │ │ │ └── shCoreDefault.css │ │ │ ├── codemirror/ │ │ │ │ ├── codemirror.css │ │ │ │ └── codemirror.js │ │ │ ├── highcharts/ │ │ │ │ ├── adapters/ │ │ │ │ │ ├── mootools-adapter.js │ │ │ │ │ ├── mootools-adapter.src.js │ │ │ │ │ ├── prototype-adapter.js │ │ │ │ │ ├── prototype-adapter.src.js │ │ │ │ │ ├── standalone-framework.js │ │ │ │ │ └── standalone-framework.src.js │ │ │ │ ├── highcharts-more.js │ │ │ │ ├── highcharts-more.src.js │ │ │ │ ├── highcharts.js │ │ │ │ ├── highcharts.src.js │ │ │ │ ├── modules/ │ │ │ │ │ ├── annotations.js │ │ │ │ │ ├── annotations.src.js │ │ │ │ │ ├── canvas-tools.js │ │ │ │ │ ├── canvas-tools.src.js │ │ │ │ │ ├── data.js │ │ │ │ │ ├── data.src.js │ │ │ │ │ ├── drilldown.js │ │ │ │ │ ├── drilldown.src.js │ │ │ │ │ ├── exporting.js │ │ │ │ │ ├── exporting.src.js │ │ │ │ │ ├── funnel.js │ │ │ │ │ ├── funnel.src.js │ │ │ │ │ ├── heatmap.js │ │ │ │ │ ├── heatmap.src.js │ │ │ │ │ ├── map.js │ │ │ │ │ ├── map.src.js │ │ │ │ │ ├── no-data-to-display.js │ │ │ │ │ └── no-data-to-display.src.js │ │ │ │ └── themes/ │ │ │ │ ├── dark-blue.js │ │ │ │ ├── dark-green.js │ │ │ │ ├── gray.js │ │ │ │ ├── grid.js │ │ │ │ └── skies.js │ │ │ ├── jquery-1.10.2.js │ │ │ ├── video-js/ │ │ │ │ ├── video-js.css │ │ │ │ ├── video.dev.js │ │ │ │ └── video.js │ │ │ ├── webuploader/ │ │ │ │ ├── webuploader.css │ │ │ │ ├── webuploader.custom.js │ │ │ │ ├── webuploader.flashonly.js │ │ │ │ ├── webuploader.html5only.js │ │ │ │ ├── webuploader.js │ │ │ │ └── webuploader.withoutimage.js │ │ │ └── zeroclipboard/ │ │ │ └── ZeroClipboard.js │ │ ├── ueditor.all.js │ │ ├── ueditor.config.js │ │ └── ueditor.parse.js │ └── UEditor22/ │ ├── dialogs/ │ │ ├── anchor/ │ │ │ └── anchor.html │ │ ├── attachment/ │ │ │ ├── attachment.css │ │ │ ├── attachment.html │ │ │ └── attachment.js │ │ ├── background/ │ │ │ ├── background.css │ │ │ ├── background.html │ │ │ └── background.js │ │ ├── charts/ │ │ │ ├── chart.config.js │ │ │ ├── charts.css │ │ │ ├── charts.html │ │ │ └── charts.js │ │ ├── emotion/ │ │ │ ├── emotion.css │ │ │ ├── emotion.html │ │ │ └── emotion.js │ │ ├── gmap/ │ │ │ └── gmap.html │ │ ├── help/ │ │ │ ├── help.css │ │ │ ├── help.html │ │ │ └── help.js │ │ ├── image/ │ │ │ ├── image.css │ │ │ ├── image.html │ │ │ └── image.js │ │ ├── insertframe/ │ │ │ └── insertframe.html │ │ ├── internal.js │ │ ├── link/ │ │ │ └── link.html │ │ ├── map/ │ │ │ ├── map.html │ │ │ └── show.html │ │ ├── music/ │ │ │ ├── music.css │ │ │ ├── music.html │ │ │ └── music.js │ │ ├── preview/ │ │ │ └── preview.html │ │ ├── scrawl/ │ │ │ ├── scrawl.css │ │ │ ├── scrawl.html │ │ │ └── scrawl.js │ │ ├── searchreplace/ │ │ │ ├── searchreplace.html │ │ │ └── searchreplace.js │ │ ├── snapscreen/ │ │ │ └── snapscreen.html │ │ ├── spechars/ │ │ │ ├── spechars.html │ │ │ └── spechars.js │ │ ├── table/ │ │ │ ├── edittable.css │ │ │ ├── edittable.html │ │ │ ├── edittable.js │ │ │ ├── edittd.html │ │ │ └── edittip.html │ │ ├── template/ │ │ │ ├── config.js │ │ │ ├── template.css │ │ │ ├── template.html │ │ │ └── template.js │ │ ├── video/ │ │ │ ├── video.css │ │ │ ├── video.html │ │ │ └── video.js │ │ ├── webapp/ │ │ │ └── webapp.html │ │ └── wordimage/ │ │ ├── fClipboard_ueditor.swf │ │ ├── imageUploader.swf │ │ ├── tangram.js │ │ ├── wordimage.html │ │ └── wordimage.js │ ├── index.html │ ├── lang/ │ │ ├── en/ │ │ │ └── en.js │ │ └── zh-cn/ │ │ └── zh-cn.js │ ├── php/ │ │ ├── Uploader.class.php │ │ ├── action_crawler.php │ │ ├── action_list.php │ │ ├── action_upload.php │ │ ├── config.json │ │ └── controller.php │ ├── themes/ │ │ ├── default/ │ │ │ ├── css/ │ │ │ │ └── ueditor.css │ │ │ └── dialogbase.css │ │ └── iframe.css │ ├── third-party/ │ │ ├── SyntaxHighlighter/ │ │ │ ├── shCore.js │ │ │ └── shCoreDefault.css │ │ ├── codemirror/ │ │ │ ├── codemirror.css │ │ │ └── codemirror.js │ │ ├── highcharts/ │ │ │ ├── adapters/ │ │ │ │ ├── mootools-adapter.js │ │ │ │ ├── mootools-adapter.src.js │ │ │ │ ├── prototype-adapter.js │ │ │ │ ├── prototype-adapter.src.js │ │ │ │ ├── standalone-framework.js │ │ │ │ └── standalone-framework.src.js │ │ │ ├── highcharts-more.js │ │ │ ├── highcharts-more.src.js │ │ │ ├── highcharts.js │ │ │ ├── highcharts.src.js │ │ │ ├── modules/ │ │ │ │ ├── annotations.js │ │ │ │ ├── annotations.src.js │ │ │ │ ├── canvas-tools.js │ │ │ │ ├── canvas-tools.src.js │ │ │ │ ├── data.js │ │ │ │ ├── data.src.js │ │ │ │ ├── drilldown.js │ │ │ │ ├── drilldown.src.js │ │ │ │ ├── exporting.js │ │ │ │ ├── exporting.src.js │ │ │ │ ├── funnel.js │ │ │ │ ├── funnel.src.js │ │ │ │ ├── heatmap.js │ │ │ │ ├── heatmap.src.js │ │ │ │ ├── map.js │ │ │ │ ├── map.src.js │ │ │ │ ├── no-data-to-display.js │ │ │ │ └── no-data-to-display.src.js │ │ │ └── themes/ │ │ │ ├── dark-blue.js │ │ │ ├── dark-green.js │ │ │ ├── gray.js │ │ │ ├── grid.js │ │ │ └── skies.js │ │ ├── jquery-1.10.2.js │ │ ├── video-js/ │ │ │ ├── video-js.css │ │ │ ├── video-js.swf │ │ │ ├── video.dev.js │ │ │ └── video.js │ │ ├── webuploader/ │ │ │ ├── Uploader.swf │ │ │ ├── webuploader.css │ │ │ ├── webuploader.custom.js │ │ │ ├── webuploader.flashonly.js │ │ │ ├── webuploader.html5only.js │ │ │ ├── webuploader.js │ │ │ └── webuploader.withoutimage.js │ │ └── zeroclipboard/ │ │ ├── ZeroClipboard.js │ │ └── ZeroClipboard.swf │ ├── ueditor.all.js │ ├── ueditor.config.js │ └── ueditor.parse.js ├── src/ │ ├── App.vue │ ├── api/ │ │ ├── express/ │ │ │ └── index.ts │ │ ├── infra/ │ │ │ ├── apiAccessLog/ │ │ │ │ └── index.ts │ │ │ ├── apiErrorLog/ │ │ │ │ └── index.ts │ │ │ ├── codegen/ │ │ │ │ └── index.ts │ │ │ ├── config/ │ │ │ │ └── index.ts │ │ │ ├── dataSourceConfig/ │ │ │ │ └── index.ts │ │ │ ├── demo/ │ │ │ │ ├── demo01/ │ │ │ │ │ └── index.ts │ │ │ │ ├── demo02/ │ │ │ │ │ └── index.ts │ │ │ │ └── demo03/ │ │ │ │ ├── erp/ │ │ │ │ │ └── index.ts │ │ │ │ ├── inner/ │ │ │ │ │ └── index.ts │ │ │ │ └── normal/ │ │ │ │ └── index.ts │ │ │ ├── file/ │ │ │ │ └── index.ts │ │ │ ├── fileConfig/ │ │ │ │ └── index.ts │ │ │ ├── job/ │ │ │ │ └── index.ts │ │ │ ├── jobLog/ │ │ │ │ └── index.ts │ │ │ └── redis/ │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── login/ │ │ │ ├── index.ts │ │ │ ├── oauth2/ │ │ │ │ └── index.ts │ │ │ └── types.ts │ │ ├── mall/ │ │ │ ├── coupon/ │ │ │ │ ├── index.ts │ │ │ │ └── user/ │ │ │ │ └── index.ts │ │ │ ├── order/ │ │ │ │ └── storeOrder/ │ │ │ │ └── index.ts │ │ │ ├── product/ │ │ │ │ ├── brand.ts │ │ │ │ ├── category.ts │ │ │ │ ├── product.ts │ │ │ │ ├── storeProductRelation/ │ │ │ │ │ └── index.ts │ │ │ │ └── storeProductReply/ │ │ │ │ └── index.ts │ │ │ ├── shop/ │ │ │ │ ├── ads/ │ │ │ │ │ └── index.ts │ │ │ │ ├── materialGroup/ │ │ │ │ │ └── index.ts │ │ │ │ ├── recharge/ │ │ │ │ │ └── index.ts │ │ │ │ ├── service/ │ │ │ │ │ └── index.ts │ │ │ │ └── storeProductRule/ │ │ │ │ └── index.ts │ │ │ └── store/ │ │ │ └── shop/ │ │ │ └── index.ts │ │ ├── member/ │ │ │ ├── user/ │ │ │ │ └── index.ts │ │ │ ├── userAddress/ │ │ │ │ └── index.ts │ │ │ └── userBill/ │ │ │ └── index.ts │ │ ├── message/ │ │ │ └── wechatTemplate/ │ │ │ └── index.ts │ │ ├── mp/ │ │ │ ├── account/ │ │ │ │ └── index.ts │ │ │ ├── account2/ │ │ │ │ └── index.ts │ │ │ ├── autoReply/ │ │ │ │ └── index.ts │ │ │ ├── draft/ │ │ │ │ └── index.ts │ │ │ ├── freePublish/ │ │ │ │ └── index.ts │ │ │ ├── material/ │ │ │ │ └── index.ts │ │ │ ├── menu/ │ │ │ │ └── index.ts │ │ │ ├── message/ │ │ │ │ └── index.ts │ │ │ ├── statistics/ │ │ │ │ └── index.ts │ │ │ ├── tag/ │ │ │ │ └── index.ts │ │ │ └── user/ │ │ │ └── index.ts │ │ ├── pay/ │ │ │ └── merchantDetails/ │ │ │ └── index.ts │ │ ├── score/ │ │ │ ├── order/ │ │ │ │ └── index.ts │ │ │ └── product/ │ │ │ └── index.ts │ │ ├── system/ │ │ │ ├── area/ │ │ │ │ └── index.ts │ │ │ ├── dept/ │ │ │ │ └── index.ts │ │ │ ├── dict/ │ │ │ │ ├── dict.data.ts │ │ │ │ └── dict.type.ts │ │ │ ├── loginLog/ │ │ │ │ └── index.ts │ │ │ ├── mail/ │ │ │ │ ├── account/ │ │ │ │ │ └── index.ts │ │ │ │ ├── log/ │ │ │ │ │ └── index.ts │ │ │ │ └── template/ │ │ │ │ └── index.ts │ │ │ ├── menu/ │ │ │ │ └── index.ts │ │ │ ├── notice/ │ │ │ │ └── index.ts │ │ │ ├── notify/ │ │ │ │ ├── message/ │ │ │ │ │ └── index.ts │ │ │ │ └── template/ │ │ │ │ └── index.ts │ │ │ ├── oauth2/ │ │ │ │ ├── client.ts │ │ │ │ └── token.ts │ │ │ ├── operatelog/ │ │ │ │ └── index.ts │ │ │ ├── permission/ │ │ │ │ └── index.ts │ │ │ ├── post/ │ │ │ │ └── index.ts │ │ │ ├── role/ │ │ │ │ └── index.ts │ │ │ ├── sms/ │ │ │ │ ├── smsChannel/ │ │ │ │ │ └── index.ts │ │ │ │ ├── smsLog/ │ │ │ │ │ └── index.ts │ │ │ │ └── smsTemplate/ │ │ │ │ └── index.ts │ │ │ ├── social/ │ │ │ │ ├── client/ │ │ │ │ │ └── index.ts │ │ │ │ └── user/ │ │ │ │ └── index.ts │ │ │ ├── tenant/ │ │ │ │ └── index.ts │ │ │ ├── tenantPackage/ │ │ │ │ └── index.ts │ │ │ └── user/ │ │ │ ├── index.ts │ │ │ ├── profile.ts │ │ │ └── socialUser.ts │ │ └── tools/ │ │ ├── material.js │ │ └── materialgroup.js │ ├── assets/ │ │ └── map/ │ │ └── json/ │ │ └── china.json │ ├── components/ │ │ ├── AppLinkInput/ │ │ │ ├── AppLinkSelectDialog.vue │ │ │ ├── data.ts │ │ │ └── index.vue │ │ ├── Backtop/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Backtop.vue │ │ ├── Card/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── CardTitle.vue │ │ ├── ColorInput/ │ │ │ └── index.vue │ │ ├── ConfigGlobal/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── ConfigGlobal.vue │ │ ├── ContentDetailWrap/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── ContentDetailWrap.vue │ │ ├── ContentWrap/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── ContentWrap.vue │ │ ├── CountTo/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── CountTo.vue │ │ ├── Crontab/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Crontab.vue │ │ ├── Cropper/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── CopperModal.vue │ │ │ ├── Cropper.vue │ │ │ ├── CropperAvatar.vue │ │ │ └── types.ts │ │ ├── Descriptions/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── Descriptions.vue │ │ │ └── DescriptionsItemLabel.vue │ │ ├── Dialog/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Dialog.vue │ │ ├── DictTag/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── DictTag.vue │ │ ├── DocAlert/ │ │ │ └── index.vue │ │ ├── Draggable/ │ │ │ └── index.vue │ │ ├── Echart/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Echart.vue │ │ ├── Editor/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Editor.vue │ │ ├── Error/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Error.vue │ │ ├── Form/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── Form.vue │ │ │ ├── componentMap.ts │ │ │ ├── components/ │ │ │ │ ├── useRenderCheckbox.tsx │ │ │ │ ├── useRenderRadio.tsx │ │ │ │ └── useRenderSelect.tsx │ │ │ ├── helper.ts │ │ │ └── types.ts │ │ ├── FormCreate/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── components/ │ │ │ │ ├── DictSelect.vue │ │ │ │ └── useApiSelect.tsx │ │ │ ├── config/ │ │ │ │ ├── index.ts │ │ │ │ ├── selectRule.ts │ │ │ │ ├── useDictSelectRule.ts │ │ │ │ ├── useEditorRule.ts │ │ │ │ ├── useSelectRule.ts │ │ │ │ ├── useUploadFileRule.ts │ │ │ │ ├── useUploadImgRule.ts │ │ │ │ └── useUploadImgsRule.ts │ │ │ ├── type/ │ │ │ │ └── index.ts │ │ │ ├── useFormCreateDesigner.ts │ │ │ └── utils/ │ │ │ └── index.ts │ │ ├── Highlight/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Highlight.vue │ │ ├── IFrame/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── IFrame.vue │ │ ├── Icon/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── Icon.vue │ │ │ ├── IconSelect.vue │ │ │ └── data.ts │ │ ├── ImageViewer/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── ImageViewer.vue │ │ │ └── types.ts │ │ ├── Infotip/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Infotip.vue │ │ ├── InputPassword/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── InputPassword.vue │ │ ├── InputWithColor/ │ │ │ └── index.vue │ │ ├── MagicCubeEditor/ │ │ │ ├── index.vue │ │ │ └── util.ts │ │ ├── Materials/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── Materials.vue │ │ │ └── editorMaterials.vue │ │ ├── OperateLogV2/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── OperateLogV2.vue │ │ ├── Pagination/ │ │ │ └── index.vue │ │ ├── Qrcode/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Qrcode.vue │ │ ├── RouterSearch/ │ │ │ └── index.vue │ │ ├── Search/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Search.vue │ │ ├── ShortcutDateRangePicker/ │ │ │ └── index.vue │ │ ├── SimpleProcessDesigner/ │ │ │ ├── src/ │ │ │ │ ├── addNode.vue │ │ │ │ ├── nodeWrap.vue │ │ │ │ └── util.ts │ │ │ └── theme/ │ │ │ └── workflow.css │ │ ├── Sticky/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Sticky.vue │ │ ├── SummaryCard/ │ │ │ └── index.vue │ │ ├── Table/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── Table.vue │ │ │ ├── TableSelectForm.vue │ │ │ ├── helper.ts │ │ │ └── types.ts │ │ ├── Tooltip/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Tooltip.vue │ │ ├── UploadFile/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── UploadFile.vue │ │ │ ├── UploadImg.vue │ │ │ ├── UploadImgs.vue │ │ │ └── useUpload.ts │ │ ├── Verifition/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── Verify/ │ │ │ │ ├── VerifyPoints.vue │ │ │ │ ├── VerifySlide.vue │ │ │ │ └── index.ts │ │ │ ├── Verify.vue │ │ │ └── utils/ │ │ │ ├── ase.ts │ │ │ └── util.ts │ │ ├── VerticalButtonGroup/ │ │ │ └── index.vue │ │ ├── XButton/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── XButton.vue │ │ │ └── XTextButton.vue │ │ └── index.ts │ ├── config/ │ │ └── axios/ │ │ ├── config.ts │ │ ├── errorCode.ts │ │ ├── index.ts │ │ └── service.ts │ ├── directives/ │ │ ├── index.ts │ │ └── permission/ │ │ ├── hasPermi.ts │ │ └── hasRole.ts │ ├── hooks/ │ │ ├── event/ │ │ │ └── useScrollTo.ts │ │ └── web/ │ │ ├── useCache.ts │ │ ├── useConfigGlobal.ts │ │ ├── useCrudSchemas.ts │ │ ├── useDesign.ts │ │ ├── useEmitt.ts │ │ ├── useForm.ts │ │ ├── useGuide.ts │ │ ├── useI18n.ts │ │ ├── useIcon.ts │ │ ├── useLocale.ts │ │ ├── useMessage.ts │ │ ├── useNProgress.ts │ │ ├── useNetwork.ts │ │ ├── useNow.ts │ │ ├── usePageLoading.ts │ │ ├── useTable.ts │ │ ├── useTagsView.ts │ │ ├── useTimeAgo.ts │ │ ├── useTitle.ts │ │ ├── useValidator.ts │ │ └── useWatermark.ts │ ├── layout/ │ │ ├── Layout.vue │ │ └── components/ │ │ ├── AppView.vue │ │ ├── Breadcrumb/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── Breadcrumb.vue │ │ │ └── helper.ts │ │ ├── Collapse/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Collapse.vue │ │ ├── ContextMenu/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── ContextMenu.vue │ │ ├── Footer/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Footer.vue │ │ ├── LocaleDropdown/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── LocaleDropdown.vue │ │ ├── Logo/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Logo.vue │ │ ├── Menu/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── Menu.vue │ │ │ ├── components/ │ │ │ │ ├── useRenderMenuItem.tsx │ │ │ │ └── useRenderMenuTitle.tsx │ │ │ └── helper.ts │ │ ├── Message/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Message.vue │ │ ├── Screenfull/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── Screenfull.vue │ │ ├── Setting/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── Setting.vue │ │ │ └── components/ │ │ │ ├── ColorRadioPicker.vue │ │ │ ├── InterfaceDisplay.vue │ │ │ └── LayoutRadioPicker.vue │ │ ├── SizeDropdown/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── SizeDropdown.vue │ │ ├── TabMenu/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── TabMenu.vue │ │ │ └── helper.ts │ │ ├── TagsView/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── TagsView.vue │ │ │ └── helper.ts │ │ ├── ThemeSwitch/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ └── ThemeSwitch.vue │ │ ├── ToolHeader.vue │ │ ├── UserInfo/ │ │ │ ├── index.ts │ │ │ └── src/ │ │ │ ├── UserInfo.vue │ │ │ └── components/ │ │ │ ├── LockDialog.vue │ │ │ └── LockPage.vue │ │ └── useRenderLayout.tsx │ ├── locales/ │ │ ├── en.ts │ │ └── zh-CN.ts │ ├── main.ts │ ├── permission.ts │ ├── plugins/ │ │ ├── animate.css/ │ │ │ └── index.ts │ │ ├── echarts/ │ │ │ └── index.ts │ │ ├── elementPlus/ │ │ │ └── index.ts │ │ ├── formCreate/ │ │ │ └── index.ts │ │ ├── svgIcon/ │ │ │ └── index.ts │ │ ├── tongji/ │ │ │ └── index.ts │ │ ├── unocss/ │ │ │ └── index.ts │ │ └── vueI18n/ │ │ ├── helper.ts │ │ └── index.ts │ ├── router/ │ │ ├── index.ts │ │ └── modules/ │ │ └── remaining.ts │ ├── store/ │ │ ├── index.ts │ │ └── modules/ │ │ ├── app.ts │ │ ├── dict.ts │ │ ├── locale.ts │ │ ├── lock.ts │ │ ├── permission.ts │ │ ├── simpleWorkflow.ts │ │ ├── tagsView.ts │ │ └── user.ts │ ├── styles/ │ │ ├── FormCreate/ │ │ │ └── index.scss │ │ ├── global.module.scss │ │ ├── index.scss │ │ ├── theme.scss │ │ ├── var.css │ │ └── variables.scss │ ├── types/ │ │ ├── components.d.ts │ │ ├── configGlobal.d.ts │ │ ├── contextMenu.d.ts │ │ ├── descriptions.d.ts │ │ ├── elementPlus.d.ts │ │ ├── form.d.ts │ │ ├── icon.d.ts │ │ ├── infoTip.d.ts │ │ ├── layout.d.ts │ │ ├── localeDropdown.d.ts │ │ ├── qrcode.d.ts │ │ ├── table.d.ts │ │ └── theme.d.ts │ ├── utils/ │ │ ├── Logger.ts │ │ ├── auth.ts │ │ ├── color.ts │ │ ├── constants.ts │ │ ├── dateUtil.ts │ │ ├── dict.ts │ │ ├── domUtils.ts │ │ ├── download.ts │ │ ├── filt.ts │ │ ├── formCreate.ts │ │ ├── formRules.ts │ │ ├── formatTime.ts │ │ ├── formatter.ts │ │ ├── index.ts │ │ ├── is.ts │ │ ├── jsencrypt.ts │ │ ├── permission.ts │ │ ├── propTypes.ts │ │ ├── routerHelper.ts │ │ ├── tree.ts │ │ └── tsxHelper.ts │ └── views/ │ ├── Error/ │ │ ├── 403.vue │ │ ├── 404.vue │ │ └── 500.vue │ ├── Home/ │ │ ├── Index.vue │ │ ├── Index2.vue │ │ ├── PanelGroupT.vue │ │ ├── echarts-data.ts │ │ └── types.ts │ ├── Login/ │ │ ├── Login.vue │ │ ├── SocialLogin.vue │ │ └── components/ │ │ ├── LoginForm.vue │ │ ├── LoginFormTitle.vue │ │ ├── MobileForm.vue │ │ ├── QrCodeForm.vue │ │ ├── RegisterForm.vue │ │ ├── SSOLogin.vue │ │ ├── index.ts │ │ └── useLogin.ts │ ├── Profile/ │ │ ├── Index.vue │ │ └── components/ │ │ ├── BasicInfo.vue │ │ ├── ProfileUser.vue │ │ ├── ResetPwd.vue │ │ ├── UserAvatar.vue │ │ ├── UserSocial.vue │ │ └── index.ts │ ├── Redirect/ │ │ └── Redirect.vue │ ├── express/ │ │ ├── ExpressForm.vue │ │ ├── ExpressSet.vue │ │ └── index.vue │ ├── infra/ │ │ ├── apiAccessLog/ │ │ │ ├── ApiAccessLogDetail.vue │ │ │ └── index.vue │ │ ├── apiErrorLog/ │ │ │ ├── ApiErrorLogDetail.vue │ │ │ └── index.vue │ │ ├── build/ │ │ │ └── index.vue │ │ ├── codegen/ │ │ │ ├── EditTable.vue │ │ │ ├── ImportTable.vue │ │ │ ├── PreviewCode.vue │ │ │ ├── components/ │ │ │ │ ├── BasicInfoForm.vue │ │ │ │ ├── ColumInfoForm.vue │ │ │ │ ├── GenerateInfoForm.vue │ │ │ │ └── index.ts │ │ │ └── index.vue │ │ ├── config/ │ │ │ ├── ConfigForm.vue │ │ │ └── index.vue │ │ ├── dataSourceConfig/ │ │ │ ├── DataSourceConfigForm.vue │ │ │ └── index.vue │ │ ├── demo/ │ │ │ ├── demo01/ │ │ │ │ ├── Demo01ContactForm.vue │ │ │ │ └── index.vue │ │ │ ├── demo02/ │ │ │ │ ├── Demo02CategoryForm.vue │ │ │ │ └── index.vue │ │ │ └── demo03/ │ │ │ ├── erp/ │ │ │ │ ├── Demo03StudentForm.vue │ │ │ │ ├── components/ │ │ │ │ │ ├── Demo03CourseForm.vue │ │ │ │ │ ├── Demo03CourseList.vue │ │ │ │ │ ├── Demo03GradeForm.vue │ │ │ │ │ └── Demo03GradeList.vue │ │ │ │ └── index.vue │ │ │ ├── inner/ │ │ │ │ ├── Demo03StudentForm.vue │ │ │ │ ├── components/ │ │ │ │ │ ├── Demo03CourseForm.vue │ │ │ │ │ ├── Demo03CourseList.vue │ │ │ │ │ ├── Demo03GradeForm.vue │ │ │ │ │ └── Demo03GradeList.vue │ │ │ │ └── index.vue │ │ │ └── normal/ │ │ │ ├── Demo03StudentForm.vue │ │ │ ├── components/ │ │ │ │ ├── Demo03CourseForm.vue │ │ │ │ └── Demo03GradeForm.vue │ │ │ └── index.vue │ │ ├── druid/ │ │ │ └── index.vue │ │ ├── file/ │ │ │ ├── FileForm.vue │ │ │ └── index.vue │ │ ├── fileConfig/ │ │ │ ├── FileConfigForm.vue │ │ │ └── index.vue │ │ ├── job/ │ │ │ ├── JobDetail.vue │ │ │ ├── JobForm.vue │ │ │ ├── index.vue │ │ │ └── logger/ │ │ │ ├── JobLogDetail.vue │ │ │ └── index.vue │ │ ├── redis/ │ │ │ └── index.vue │ │ ├── server/ │ │ │ └── index.vue │ │ ├── skywalking/ │ │ │ └── index.vue │ │ ├── swagger/ │ │ │ └── index.vue │ │ └── webSocket/ │ │ └── index.vue │ ├── mall/ │ │ ├── coupon/ │ │ │ ├── Form.vue │ │ │ ├── index.vue │ │ │ └── user/ │ │ │ └── OrderRecord.vue │ │ ├── member/ │ │ │ ├── user/ │ │ │ │ ├── UserDetail.vue │ │ │ │ ├── UserForm.vue │ │ │ │ ├── index.vue │ │ │ │ └── yue.vue │ │ │ └── userAddress/ │ │ │ ├── UserAddressForm.vue │ │ │ └── index.vue │ │ ├── order/ │ │ │ └── storeOrder/ │ │ │ ├── OrderDetail.vue │ │ │ ├── OrderRecord.vue │ │ │ ├── OrderSend.vue │ │ │ ├── OrderSendInfo.vue │ │ │ ├── StoreOrderForm.vue │ │ │ ├── StoreOrderRefund.vue │ │ │ ├── StoreOrderRemark.vue │ │ │ ├── index.vue │ │ │ └── work.vue │ │ ├── product/ │ │ │ ├── category/ │ │ │ │ ├── CategoryForm.vue │ │ │ │ └── index.vue │ │ │ ├── storeProduct/ │ │ │ │ ├── CateTree.vue │ │ │ │ ├── StoreProductForm.vue │ │ │ │ └── index.vue │ │ │ ├── storeProductRelation/ │ │ │ │ └── index.vue │ │ │ └── storeProductReply/ │ │ │ └── index.vue │ │ ├── shop/ │ │ │ ├── ads/ │ │ │ │ ├── AdsForm.vue │ │ │ │ └── index.vue │ │ │ ├── recharge/ │ │ │ │ ├── RechargeForm.vue │ │ │ │ └── index.vue │ │ │ ├── service/ │ │ │ │ ├── ServiceForm.vue │ │ │ │ └── index.vue │ │ │ └── storeProductRule/ │ │ │ ├── StoreProductRuleForm.vue │ │ │ └── index.vue │ │ └── store/ │ │ └── shop/ │ │ ├── ShopForm.vue │ │ ├── index.vue │ │ └── map.vue │ ├── message/ │ │ └── wechatTemplate/ │ │ ├── WechatTemplateForm.vue │ │ └── index.vue │ ├── mp/ │ │ ├── account/ │ │ │ ├── AccountForm.vue │ │ │ └── index.vue │ │ ├── account2/ │ │ │ ├── AccountForm.vue │ │ │ └── index.vue │ │ ├── autoReply/ │ │ │ ├── components/ │ │ │ │ ├── ReplyForm.vue │ │ │ │ ├── ReplyTable.vue │ │ │ │ └── types.ts │ │ │ └── index.vue │ │ ├── components/ │ │ │ ├── wx-account-select/ │ │ │ │ ├── index.ts │ │ │ │ └── main.vue │ │ │ ├── wx-location/ │ │ │ │ ├── index.ts │ │ │ │ └── main.vue │ │ │ ├── wx-material-select/ │ │ │ │ ├── index.ts │ │ │ │ ├── main.vue │ │ │ │ └── types.ts │ │ │ ├── wx-msg/ │ │ │ │ ├── card.scss │ │ │ │ ├── comment.scss │ │ │ │ ├── components/ │ │ │ │ │ ├── Msg.vue │ │ │ │ │ ├── MsgEvent.vue │ │ │ │ │ └── MsgList.vue │ │ │ │ ├── index.ts │ │ │ │ ├── main.vue │ │ │ │ └── types.ts │ │ │ ├── wx-music/ │ │ │ │ ├── index.ts │ │ │ │ └── main.vue │ │ │ ├── wx-news/ │ │ │ │ ├── index.ts │ │ │ │ └── main.vue │ │ │ ├── wx-reply/ │ │ │ │ ├── components/ │ │ │ │ │ ├── TabImage.vue │ │ │ │ │ ├── TabMusic.vue │ │ │ │ │ ├── TabNews.vue │ │ │ │ │ ├── TabText.vue │ │ │ │ │ ├── TabVideo.vue │ │ │ │ │ ├── TabVoice.vue │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ └── main.vue │ │ │ ├── wx-video-play/ │ │ │ │ ├── index.ts │ │ │ │ └── main.vue │ │ │ └── wx-voice-play/ │ │ │ ├── index.ts │ │ │ └── main.vue │ │ ├── draft/ │ │ │ ├── components/ │ │ │ │ ├── CoverSelect.vue │ │ │ │ ├── DraftTable.vue │ │ │ │ ├── NewsForm.vue │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── editor-config.ts │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── freePublish/ │ │ │ └── index.vue │ │ ├── hooks/ │ │ │ └── useUpload.ts │ │ ├── material/ │ │ │ ├── components/ │ │ │ │ ├── ImageTable.vue │ │ │ │ ├── UploadFile.vue │ │ │ │ ├── UploadVideo.vue │ │ │ │ ├── VideoTable.vue │ │ │ │ ├── VoiceTable.vue │ │ │ │ └── upload.ts │ │ │ └── index.vue │ │ ├── menu/ │ │ │ ├── components/ │ │ │ │ ├── MenuEditor.vue │ │ │ │ ├── MenuPreviewer.vue │ │ │ │ ├── menuOptions.ts │ │ │ │ └── types.ts │ │ │ └── index.vue │ │ ├── message/ │ │ │ ├── MessageTable.vue │ │ │ └── index.vue │ │ ├── statistics/ │ │ │ └── index.vue │ │ ├── tag/ │ │ │ ├── TagForm.vue │ │ │ └── index.vue │ │ └── user/ │ │ ├── UserForm.vue │ │ └── index.vue │ ├── pay/ │ │ └── merchantDetails/ │ │ ├── MerchantDetailsForm.vue │ │ └── index.vue │ ├── score/ │ │ ├── order/ │ │ │ ├── OrderDetail.vue │ │ │ ├── OrderForm.vue │ │ │ └── index.vue │ │ └── product/ │ │ ├── ProductForm.vue │ │ └── index.vue │ └── system/ │ ├── area/ │ │ ├── AreaForm.vue │ │ └── index.vue │ ├── dept/ │ │ ├── DeptForm.vue │ │ └── index.vue │ ├── dict/ │ │ ├── DictTypeForm.vue │ │ ├── data/ │ │ │ ├── DictDataForm.vue │ │ │ └── index.vue │ │ └── index.vue │ ├── loginlog/ │ │ ├── LoginLogDetail.vue │ │ └── index.vue │ ├── mail/ │ │ ├── account/ │ │ │ ├── MailAccountDetail.vue │ │ │ ├── MailAccountForm.vue │ │ │ ├── account.data.ts │ │ │ └── index.vue │ │ ├── log/ │ │ │ ├── MailLogDetail.vue │ │ │ ├── index.vue │ │ │ └── log.data.ts │ │ └── template/ │ │ ├── MailTemplateForm.vue │ │ ├── MailTemplateSendForm.vue │ │ ├── index.vue │ │ └── template.data.ts │ ├── menu/ │ │ ├── MenuForm.vue │ │ └── index.vue │ ├── notice/ │ │ ├── NoticeForm.vue │ │ └── index.vue │ ├── notify/ │ │ ├── message/ │ │ │ ├── NotifyMessageDetail.vue │ │ │ └── index.vue │ │ ├── my/ │ │ │ ├── MyNotifyMessageDetail.vue │ │ │ └── index.vue │ │ └── template/ │ │ ├── NotifyTemplateForm.vue │ │ ├── NotifyTemplateSendForm.vue │ │ └── index.vue │ ├── oauth2/ │ │ ├── client/ │ │ │ ├── ClientForm.vue │ │ │ └── index.vue │ │ └── token/ │ │ └── index.vue │ ├── operatelog/ │ │ ├── OperateLogDetail.vue │ │ └── index.vue │ ├── post/ │ │ ├── PostForm.vue │ │ └── index.vue │ ├── role/ │ │ ├── RoleAssignMenuForm.vue │ │ ├── RoleDataPermissionForm.vue │ │ ├── RoleForm.vue │ │ └── index.vue │ ├── sms/ │ │ ├── channel/ │ │ │ ├── SmsChannelForm.vue │ │ │ └── index.vue │ │ ├── log/ │ │ │ ├── SmsLogDetail.vue │ │ │ └── index.vue │ │ └── template/ │ │ ├── SmsTemplateForm.vue │ │ ├── SmsTemplateSendForm.vue │ │ └── index.vue │ ├── social/ │ │ ├── client/ │ │ │ ├── SocialClientForm.vue │ │ │ └── index.vue │ │ └── user/ │ │ ├── SocialUserDetail.vue │ │ └── index.vue │ ├── tenant/ │ │ ├── TenantForm.vue │ │ └── index.vue │ ├── tenantPackage/ │ │ ├── TenantPackageForm.vue │ │ └── index.vue │ └── user/ │ ├── DeptTree.vue │ ├── UserAssignRoleForm.vue │ ├── UserForm.vue │ ├── UserImportForm.vue │ └── index.vue ├── stylelint.config.js ├── tsconfig.json ├── types/ │ ├── components.d.ts │ ├── custom-types.d.ts │ ├── env.d.ts │ ├── global.d.ts │ └── router.d.ts ├── uno.config.ts └── vite.config.ts