├── .github └── FUNDING.yml ├── .gitignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── bin ├── clean.bat ├── package.bat ├── run-auth.bat ├── run-gateway.bat ├── run-modules-file.bat ├── run-modules-gen.bat ├── run-modules-job.bat ├── run-modules-system.bat └── run-monitor.bat ├── docker ├── copy.sh ├── deploy.sh ├── docker-compose.yml ├── mysql │ ├── db │ │ └── readme.txt │ └── dockerfile ├── nacos │ ├── conf │ │ └── application.properties │ └── dockerfile ├── nginx │ ├── conf │ │ └── nginx.conf │ └── dockerfile ├── redis │ ├── conf │ │ └── redis.conf │ └── dockerfile └── ruoyi │ ├── auth │ ├── dockerfile │ └── jar │ │ └── readme.txt │ ├── gateway │ ├── dockerfile │ └── jar │ │ └── readme.txt │ ├── modules │ ├── file │ │ ├── dockerfile │ │ └── jar │ │ │ └── readme.txt │ ├── gen │ │ ├── dockerfile │ │ └── jar │ │ │ └── readme.txt │ ├── job │ │ ├── dockerfile │ │ └── jar │ │ │ └── readme.txt │ └── system │ │ ├── dockerfile │ │ └── jar │ │ └── readme.txt │ └── visual │ └── monitor │ ├── dockerfile │ └── jar │ └── readme.txt ├── pom.xml ├── react-ui ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .github │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE │ │ ├── bug_report.md │ │ ├── feature_request.md │ │ └── question.md │ └── workflows │ │ ├── ci.yml │ │ ├── codeql.yml │ │ ├── coverage.yml │ │ ├── emoji-helper.yml │ │ ├── issue-labeled.yml │ │ ├── issue-open-check.yml │ │ ├── pnpm.yml │ │ ├── preview-build.yml │ │ ├── preview-deploy.yml │ │ └── preview-start.yml ├── .gitignore ├── .husky │ ├── commit-msg │ └── pre-commit ├── .prettierignore ├── .prettierrc.js ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── config │ ├── config.ts │ ├── defaultSettings.ts │ ├── oneapi.json │ ├── proxy.ts │ └── routes.ts ├── jest.config.ts ├── jsconfig.json ├── mock │ ├── listTableList.ts │ ├── notices.ts │ ├── requestRecord.mock.js │ ├── route.ts │ └── user.ts ├── package.json ├── public │ ├── CNAME │ ├── favicon.ico │ ├── icons │ │ ├── icon-128x128.png │ │ ├── icon-192x192.png │ │ └── icon-512x512.png │ ├── logo.svg │ ├── pro_icon.svg │ └── scripts │ │ └── loading.js ├── src │ ├── access.ts │ ├── app.tsx │ ├── components │ │ ├── DictTag │ │ │ └── index.tsx │ │ ├── Footer │ │ │ └── index.tsx │ │ ├── HeaderDropdown │ │ │ └── index.tsx │ │ ├── IconSelector │ │ │ ├── Category.tsx │ │ │ ├── CopyableIcon.tsx │ │ │ ├── IconPicSearcher.tsx │ │ │ ├── fields.ts │ │ │ ├── index.tsx │ │ │ ├── style.less │ │ │ └── themeIcons.tsx │ │ └── RightContent │ │ │ ├── AvatarDropdown.tsx │ │ │ └── index.tsx │ ├── enums │ │ ├── httpEnum.ts │ │ └── pagesEnums.ts │ ├── global.less │ ├── global.tsx │ ├── hooks │ │ └── net │ │ │ └── dict.ts │ ├── locales │ │ ├── en-US.ts │ │ ├── en-US │ │ │ ├── app.ts │ │ │ ├── component.ts │ │ │ ├── globalHeader.ts │ │ │ ├── menu.ts │ │ │ ├── pages.ts │ │ │ ├── pwa.ts │ │ │ ├── settingDrawer.ts │ │ │ └── settings.ts │ │ ├── zh-CN.ts │ │ ├── zh-CN │ │ │ ├── app.ts │ │ │ ├── component.ts │ │ │ ├── globalHeader.ts │ │ │ ├── menu.ts │ │ │ ├── monitor │ │ │ │ ├── job-log.ts │ │ │ │ ├── job.ts │ │ │ │ ├── logininfor.ts │ │ │ │ ├── onlineUser.ts │ │ │ │ ├── operlog.ts │ │ │ │ └── server.ts │ │ │ ├── pages.ts │ │ │ ├── pwa.ts │ │ │ ├── settingDrawer.ts │ │ │ ├── settings.ts │ │ │ └── system │ │ │ │ ├── config.ts │ │ │ │ ├── dept.ts │ │ │ │ ├── dict-data.ts │ │ │ │ ├── dict.ts │ │ │ │ ├── menu.ts │ │ │ │ ├── notice.ts │ │ │ │ ├── post.ts │ │ │ │ ├── role.ts │ │ │ │ └── user.ts │ │ ├── zh-TW.ts │ │ └── zh-TW │ │ │ ├── component.ts │ │ │ ├── globalHeader.ts │ │ │ ├── menu.ts │ │ │ ├── pages.ts │ │ │ ├── pwa.ts │ │ │ ├── settingDrawer.ts │ │ │ └── settings.ts │ ├── manifest.json │ ├── pages │ │ ├── 404.tsx │ │ ├── Monitor │ │ │ ├── Job │ │ │ │ ├── detail.tsx │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ ├── JobLog │ │ │ │ ├── detail.tsx │ │ │ │ └── index.tsx │ │ │ └── Online │ │ │ │ └── index.tsx │ │ ├── System │ │ │ ├── Config │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ ├── Dept │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ ├── Dict │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ ├── DictData │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ ├── Logininfor │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ ├── Menu │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ ├── Notice │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ ├── Operlog │ │ │ │ ├── detail.tsx │ │ │ │ └── index.tsx │ │ │ ├── Post │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ ├── Role │ │ │ │ ├── authUser.tsx │ │ │ │ ├── components │ │ │ │ │ ├── DataScope.tsx │ │ │ │ │ └── UserSelectorModal.tsx │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ │ └── User │ │ │ │ ├── components │ │ │ │ ├── AuthRole.tsx │ │ │ │ ├── DeptTree.tsx │ │ │ │ └── ResetPwd.tsx │ │ │ │ ├── edit.tsx │ │ │ │ └── index.tsx │ │ ├── Tool │ │ │ ├── Gen │ │ │ │ ├── components │ │ │ │ │ ├── BaseInfo.tsx │ │ │ │ │ ├── ColumnInfo.tsx │ │ │ │ │ ├── GenInfo.tsx │ │ │ │ │ └── PreviewCode.tsx │ │ │ │ ├── data.d.ts │ │ │ │ ├── edit.tsx │ │ │ │ ├── import.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── locales │ │ │ │ │ └── zh-CN.ts │ │ │ │ ├── service.ts │ │ │ │ └── style.less │ │ │ └── Swagger │ │ │ │ └── index.tsx │ │ ├── User │ │ │ ├── Center │ │ │ │ ├── Center.less │ │ │ │ ├── components │ │ │ │ │ ├── AvatarCropper │ │ │ │ │ │ ├── cropper.css │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ └── bg.png │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── BaseInfo │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── ResetPassword │ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── Login │ │ │ │ └── index.tsx │ │ │ └── Settings │ │ │ │ └── index.tsx │ │ └── Welcome.tsx │ ├── requestErrorConfig.ts │ ├── service-worker.js │ ├── services │ │ ├── ant-design-pro │ │ │ ├── api.ts │ │ │ ├── index.ts │ │ │ ├── login.ts │ │ │ ├── rule.ts │ │ │ └── typings.d.ts │ │ ├── monitor │ │ │ ├── cache.ts │ │ │ ├── cachelist.ts │ │ │ ├── job.ts │ │ │ ├── jobLog.ts │ │ │ ├── logininfor.ts │ │ │ ├── online.ts │ │ │ ├── operlog.ts │ │ │ └── server.ts │ │ ├── session.ts │ │ ├── swagger │ │ │ ├── index.ts │ │ │ ├── pet.ts │ │ │ ├── store.ts │ │ │ ├── typings.d.ts │ │ │ └── user.ts │ │ ├── system │ │ │ ├── auth.ts │ │ │ ├── config.ts │ │ │ ├── dept.ts │ │ │ ├── dict.ts │ │ │ ├── dictdata.ts │ │ │ ├── index.ts │ │ │ ├── menu.ts │ │ │ ├── notice.ts │ │ │ ├── post.ts │ │ │ ├── role.ts │ │ │ └── user.ts │ │ └── typings.d.ts │ ├── types │ │ ├── monitor │ │ │ ├── cache.d.ts │ │ │ ├── cacheList.d.ts │ │ │ ├── job.d.ts │ │ │ ├── jobLog.d.ts │ │ │ ├── logininfor.d.ts │ │ │ ├── online.d.ts │ │ │ ├── operlog.d.ts │ │ │ └── server.d.ts │ │ ├── system │ │ │ ├── config.d.ts │ │ │ ├── dept.d.ts │ │ │ ├── dict-data.d.ts │ │ │ ├── dict.d.ts │ │ │ ├── menu.d.ts │ │ │ ├── notice.d.ts │ │ │ ├── post.d.ts │ │ │ ├── role.d.ts │ │ │ └── user.d.ts │ │ └── typings.d.ts │ ├── typings.d.ts │ └── utils │ │ ├── IconUtil.ts │ │ ├── downloadfile.ts │ │ ├── options.ts │ │ ├── permission.ts │ │ └── tree.ts ├── tests │ └── setupTests.jsx ├── tsconfig.json └── types │ ├── cache │ ├── cache.json │ ├── login.cache.json │ └── mock │ │ ├── login.mock.cache.js │ │ └── mock.cache.js │ ├── index.d.ts │ └── route.d.ts ├── ruoyi-api ├── pom.xml └── ruoyi-api-system │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── ruoyi │ │ └── system │ │ └── api │ │ ├── RemoteFileService.java │ │ ├── RemoteLogService.java │ │ ├── RemoteUserService.java │ │ ├── domain │ │ ├── SysDept.java │ │ ├── SysDictData.java │ │ ├── SysDictType.java │ │ ├── SysFile.java │ │ ├── SysLogininfor.java │ │ ├── SysOperLog.java │ │ ├── SysRole.java │ │ └── SysUser.java │ │ ├── factory │ │ ├── RemoteFileFallbackFactory.java │ │ ├── RemoteLogFallbackFactory.java │ │ └── RemoteUserFallbackFactory.java │ │ └── model │ │ └── LoginUser.java │ └── resources │ └── META-INF │ └── spring │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-auth ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── ruoyi │ │ └── auth │ │ ├── RuoYiAuthApplication.java │ │ ├── controller │ │ └── TokenController.java │ │ ├── form │ │ ├── LoginBody.java │ │ └── RegisterBody.java │ │ └── service │ │ ├── SysLoginService.java │ │ ├── SysPasswordService.java │ │ └── SysRecordLogService.java │ └── resources │ ├── banner.txt │ ├── bootstrap.yml │ └── logback.xml ├── ruoyi-common ├── pom.xml ├── ruoyi-common-core │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── core │ │ │ ├── annotation │ │ │ ├── Excel.java │ │ │ └── Excels.java │ │ │ ├── constant │ │ │ ├── CacheConstants.java │ │ │ ├── Constants.java │ │ │ ├── GenConstants.java │ │ │ ├── HttpStatus.java │ │ │ ├── ScheduleConstants.java │ │ │ ├── SecurityConstants.java │ │ │ ├── ServiceNameConstants.java │ │ │ ├── TokenConstants.java │ │ │ └── UserConstants.java │ │ │ ├── context │ │ │ └── SecurityContextHolder.java │ │ │ ├── domain │ │ │ └── R.java │ │ │ ├── enums │ │ │ └── UserStatus.java │ │ │ ├── exception │ │ │ ├── CaptchaException.java │ │ │ ├── CheckedException.java │ │ │ ├── DemoModeException.java │ │ │ ├── GlobalException.java │ │ │ ├── InnerAuthException.java │ │ │ ├── PreAuthorizeException.java │ │ │ ├── ServiceException.java │ │ │ ├── UtilException.java │ │ │ ├── auth │ │ │ │ ├── NotLoginException.java │ │ │ │ ├── NotPermissionException.java │ │ │ │ └── NotRoleException.java │ │ │ ├── base │ │ │ │ └── BaseException.java │ │ │ ├── file │ │ │ │ ├── FileException.java │ │ │ │ ├── FileNameLengthLimitExceededException.java │ │ │ │ ├── FileSizeLimitExceededException.java │ │ │ │ ├── FileUploadException.java │ │ │ │ └── InvalidExtensionException.java │ │ │ ├── job │ │ │ │ └── TaskException.java │ │ │ └── user │ │ │ │ ├── CaptchaExpireException.java │ │ │ │ ├── UserException.java │ │ │ │ └── UserPasswordNotMatchException.java │ │ │ ├── text │ │ │ ├── CharsetKit.java │ │ │ ├── Convert.java │ │ │ └── StrFormatter.java │ │ │ ├── utils │ │ │ ├── DateUtils.java │ │ │ ├── ExceptionUtil.java │ │ │ ├── JwtUtils.java │ │ │ ├── PageUtils.java │ │ │ ├── ServletUtils.java │ │ │ ├── SpringUtils.java │ │ │ ├── StringUtils.java │ │ │ ├── bean │ │ │ │ ├── BeanUtils.java │ │ │ │ └── BeanValidators.java │ │ │ ├── file │ │ │ │ ├── FileTypeUtils.java │ │ │ │ ├── FileUtils.java │ │ │ │ ├── ImageUtils.java │ │ │ │ └── MimeTypeUtils.java │ │ │ ├── html │ │ │ │ ├── EscapeUtil.java │ │ │ │ └── HTMLFilter.java │ │ │ ├── ip │ │ │ │ └── IpUtils.java │ │ │ ├── poi │ │ │ │ ├── ExcelHandlerAdapter.java │ │ │ │ └── ExcelUtil.java │ │ │ ├── reflect │ │ │ │ └── ReflectUtils.java │ │ │ ├── sign │ │ │ │ └── Base64.java │ │ │ ├── sql │ │ │ │ └── SqlUtil.java │ │ │ └── uuid │ │ │ │ ├── IdUtils.java │ │ │ │ ├── Seq.java │ │ │ │ └── UUID.java │ │ │ ├── web │ │ │ ├── controller │ │ │ │ └── BaseController.java │ │ │ ├── domain │ │ │ │ ├── AjaxResult.java │ │ │ │ ├── BaseEntity.java │ │ │ │ └── TreeEntity.java │ │ │ └── page │ │ │ │ ├── PageDomain.java │ │ │ │ ├── TableDataInfo.java │ │ │ │ └── TableSupport.java │ │ │ └── xss │ │ │ ├── Xss.java │ │ │ └── XssValidator.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-datascope │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── datascope │ │ │ ├── annotation │ │ │ └── DataScope.java │ │ │ └── aspect │ │ │ └── DataScopeAspect.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-datasource │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── ruoyi │ │ └── common │ │ └── datasource │ │ └── annotation │ │ ├── Master.java │ │ └── Slave.java ├── ruoyi-common-log │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── log │ │ │ ├── annotation │ │ │ └── Log.java │ │ │ ├── aspect │ │ │ └── LogAspect.java │ │ │ ├── enums │ │ │ ├── BusinessStatus.java │ │ │ ├── BusinessType.java │ │ │ └── OperatorType.java │ │ │ ├── filter │ │ │ └── PropertyPreExcludeFilter.java │ │ │ └── service │ │ │ └── AsyncLogService.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-redis │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── redis │ │ │ ├── configure │ │ │ ├── FastJson2JsonRedisSerializer.java │ │ │ └── RedisConfig.java │ │ │ └── service │ │ │ └── RedisService.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-seata │ └── pom.xml ├── ruoyi-common-security │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── security │ │ │ ├── annotation │ │ │ ├── EnableCustomConfig.java │ │ │ ├── EnableRyFeignClients.java │ │ │ ├── InnerAuth.java │ │ │ ├── Logical.java │ │ │ ├── RequiresLogin.java │ │ │ ├── RequiresPermissions.java │ │ │ └── RequiresRoles.java │ │ │ ├── aspect │ │ │ ├── InnerAuthAspect.java │ │ │ └── PreAuthorizeAspect.java │ │ │ ├── auth │ │ │ ├── AuthLogic.java │ │ │ └── AuthUtil.java │ │ │ ├── config │ │ │ ├── ApplicationConfig.java │ │ │ └── WebMvcConfig.java │ │ │ ├── feign │ │ │ ├── FeignAutoConfiguration.java │ │ │ └── FeignRequestInterceptor.java │ │ │ ├── handler │ │ │ └── GlobalExceptionHandler.java │ │ │ ├── interceptor │ │ │ └── HeaderInterceptor.java │ │ │ ├── service │ │ │ └── TokenService.java │ │ │ └── utils │ │ │ ├── DictUtils.java │ │ │ └── SecurityUtils.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports └── ruoyi-common-swagger │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── ruoyi │ │ └── common │ │ └── swagger │ │ ├── annotation │ │ └── EnableCustomSwagger2.java │ │ └── config │ │ ├── SwaggerAutoConfiguration.java │ │ ├── SwaggerBeanPostProcessor.java │ │ ├── SwaggerProperties.java │ │ └── SwaggerWebConfiguration.java │ └── resources │ └── META-INF │ └── spring │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-gateway ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── ruoyi │ │ └── gateway │ │ ├── RuoYiGatewayApplication.java │ │ ├── config │ │ ├── CaptchaConfig.java │ │ ├── GatewayConfig.java │ │ ├── KaptchaTextCreator.java │ │ ├── RouterFunctionConfiguration.java │ │ ├── SwaggerProvider.java │ │ └── properties │ │ │ ├── CaptchaProperties.java │ │ │ ├── IgnoreWhiteProperties.java │ │ │ └── XssProperties.java │ │ ├── filter │ │ ├── AuthFilter.java │ │ ├── BlackListUrlFilter.java │ │ ├── CacheRequestFilter.java │ │ ├── ValidateCodeFilter.java │ │ └── XssFilter.java │ │ ├── handler │ │ ├── GatewayExceptionHandler.java │ │ ├── SentinelFallbackHandler.java │ │ ├── SwaggerHandler.java │ │ └── ValidateCodeHandler.java │ │ └── service │ │ ├── ValidateCodeService.java │ │ └── impl │ │ └── ValidateCodeServiceImpl.java │ └── resources │ ├── banner.txt │ ├── bootstrap.yml │ └── logback.xml ├── ruoyi-modules ├── pom.xml ├── ruoyi-file │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── ruoyi │ │ │ └── file │ │ │ ├── RuoYiFileApplication.java │ │ │ ├── config │ │ │ ├── MinioConfig.java │ │ │ └── ResourcesConfig.java │ │ │ ├── controller │ │ │ └── SysFileController.java │ │ │ ├── service │ │ │ ├── FastDfsSysFileServiceImpl.java │ │ │ ├── ISysFileService.java │ │ │ ├── LocalSysFileServiceImpl.java │ │ │ └── MinioSysFileServiceImpl.java │ │ │ └── utils │ │ │ └── FileUploadUtils.java │ │ └── resources │ │ ├── banner.txt │ │ ├── bootstrap.yml │ │ └── logback.xml ├── ruoyi-gen │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── ruoyi │ │ │ └── gen │ │ │ ├── RuoYiGenApplication.java │ │ │ ├── config │ │ │ └── GenConfig.java │ │ │ ├── controller │ │ │ └── GenController.java │ │ │ ├── domain │ │ │ ├── GenTable.java │ │ │ └── GenTableColumn.java │ │ │ ├── mapper │ │ │ ├── GenTableColumnMapper.java │ │ │ └── GenTableMapper.java │ │ │ ├── service │ │ │ ├── GenTableColumnServiceImpl.java │ │ │ ├── GenTableServiceImpl.java │ │ │ ├── IGenTableColumnService.java │ │ │ └── IGenTableService.java │ │ │ └── util │ │ │ ├── GenUtils.java │ │ │ ├── VelocityInitializer.java │ │ │ └── VelocityUtils.java │ │ └── resources │ │ ├── banner.txt │ │ ├── bootstrap.yml │ │ ├── logback.xml │ │ ├── mapper │ │ └── generator │ │ │ ├── GenTableColumnMapper.xml │ │ │ └── GenTableMapper.xml │ │ └── vm │ │ ├── java │ │ ├── controller.java.vm │ │ ├── domain.java.vm │ │ ├── mapper.java.vm │ │ ├── service.java.vm │ │ ├── serviceImpl.java.vm │ │ └── sub-domain.java.vm │ │ ├── js │ │ └── api.js.vm │ │ ├── sql │ │ └── sql.vm │ │ ├── vue │ │ ├── index-tree.vue.vm │ │ ├── index.vue.vm │ │ └── v3 │ │ │ ├── index-tree.vue.vm │ │ │ ├── index.vue.vm │ │ │ └── readme.txt │ │ └── xml │ │ └── mapper.xml.vm ├── ruoyi-job │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── ruoyi │ │ │ └── job │ │ │ ├── RuoYiJobApplication.java │ │ │ ├── config │ │ │ └── ScheduleConfig.java │ │ │ ├── controller │ │ │ ├── SysJobController.java │ │ │ └── SysJobLogController.java │ │ │ ├── domain │ │ │ ├── SysJob.java │ │ │ └── SysJobLog.java │ │ │ ├── mapper │ │ │ ├── SysJobLogMapper.java │ │ │ └── SysJobMapper.java │ │ │ ├── service │ │ │ ├── ISysJobLogService.java │ │ │ ├── ISysJobService.java │ │ │ ├── SysJobLogServiceImpl.java │ │ │ └── SysJobServiceImpl.java │ │ │ ├── task │ │ │ └── RyTask.java │ │ │ └── util │ │ │ ├── AbstractQuartzJob.java │ │ │ ├── CronUtils.java │ │ │ ├── JobInvokeUtil.java │ │ │ ├── QuartzDisallowConcurrentExecution.java │ │ │ ├── QuartzJobExecution.java │ │ │ └── ScheduleUtils.java │ │ └── resources │ │ ├── banner.txt │ │ ├── bootstrap.yml │ │ ├── logback.xml │ │ └── mapper │ │ └── job │ │ ├── SysJobLogMapper.xml │ │ └── SysJobMapper.xml └── ruoyi-system │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── ruoyi │ │ └── system │ │ ├── RuoYiSystemApplication.java │ │ ├── controller │ │ ├── SysConfigController.java │ │ ├── SysDeptController.java │ │ ├── SysDictDataController.java │ │ ├── SysDictTypeController.java │ │ ├── SysLogininforController.java │ │ ├── SysMenuController.java │ │ ├── SysNoticeController.java │ │ ├── SysOperlogController.java │ │ ├── SysPostController.java │ │ ├── SysProfileController.java │ │ ├── SysRoleController.java │ │ ├── SysUserController.java │ │ └── SysUserOnlineController.java │ │ ├── domain │ │ ├── SysConfig.java │ │ ├── SysMenu.java │ │ ├── SysNotice.java │ │ ├── SysPost.java │ │ ├── SysRoleDept.java │ │ ├── SysRoleMenu.java │ │ ├── SysUserOnline.java │ │ ├── SysUserPost.java │ │ ├── SysUserRole.java │ │ └── vo │ │ │ ├── MetaVo.java │ │ │ ├── RouterVo.java │ │ │ └── TreeSelect.java │ │ ├── mapper │ │ ├── SysConfigMapper.java │ │ ├── SysDeptMapper.java │ │ ├── SysDictDataMapper.java │ │ ├── SysDictTypeMapper.java │ │ ├── SysLogininforMapper.java │ │ ├── SysMenuMapper.java │ │ ├── SysNoticeMapper.java │ │ ├── SysOperLogMapper.java │ │ ├── SysPostMapper.java │ │ ├── SysRoleDeptMapper.java │ │ ├── SysRoleMapper.java │ │ ├── SysRoleMenuMapper.java │ │ ├── SysUserMapper.java │ │ ├── SysUserPostMapper.java │ │ └── SysUserRoleMapper.java │ │ └── service │ │ ├── ISysConfigService.java │ │ ├── ISysDeptService.java │ │ ├── ISysDictDataService.java │ │ ├── ISysDictTypeService.java │ │ ├── ISysLogininforService.java │ │ ├── ISysMenuService.java │ │ ├── ISysNoticeService.java │ │ ├── ISysOperLogService.java │ │ ├── ISysPermissionService.java │ │ ├── ISysPostService.java │ │ ├── ISysRoleService.java │ │ ├── ISysUserOnlineService.java │ │ ├── ISysUserService.java │ │ └── impl │ │ ├── SysConfigServiceImpl.java │ │ ├── SysDeptServiceImpl.java │ │ ├── SysDictDataServiceImpl.java │ │ ├── SysDictTypeServiceImpl.java │ │ ├── SysLogininforServiceImpl.java │ │ ├── SysMenuServiceImpl.java │ │ ├── SysNoticeServiceImpl.java │ │ ├── SysOperLogServiceImpl.java │ │ ├── SysPermissionServiceImpl.java │ │ ├── SysPostServiceImpl.java │ │ ├── SysRoleServiceImpl.java │ │ ├── SysUserOnlineServiceImpl.java │ │ └── SysUserServiceImpl.java │ └── resources │ ├── banner.txt │ ├── bootstrap.yml │ ├── logback.xml │ └── mapper │ └── system │ ├── SysConfigMapper.xml │ ├── SysDeptMapper.xml │ ├── SysDictDataMapper.xml │ ├── SysDictTypeMapper.xml │ ├── SysLogininforMapper.xml │ ├── SysMenuMapper.xml │ ├── SysNoticeMapper.xml │ ├── SysOperLogMapper.xml │ ├── SysPostMapper.xml │ ├── SysRoleDeptMapper.xml │ ├── SysRoleMapper.xml │ ├── SysRoleMenuMapper.xml │ ├── SysUserMapper.xml │ ├── SysUserPostMapper.xml │ └── SysUserRoleMapper.xml ├── ruoyi-visual ├── pom.xml └── ruoyi-monitor │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── com │ │ └── ruoyi │ │ └── modules │ │ └── monitor │ │ ├── RuoYiMonitorApplication.java │ │ └── config │ │ └── WebSecurityConfigurer.java │ └── resources │ ├── banner.txt │ ├── bootstrap.yml │ └── logback.xml └── sql ├── quartz.sql ├── ry_20230706.sql ├── ry_config_20220929.sql └── ry_seata_20210128.sql /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: https://gitee.com/whiteshader/ruoyi-react 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ###################################################################### 2 | # Build Tools 3 | 4 | .gradle 5 | /build/ 6 | !gradle/wrapper/gradle-wrapper.jar 7 | 8 | target/ 9 | !.mvn/wrapper/maven-wrapper.jar 10 | 11 | ###################################################################### 12 | # IDE 13 | 14 | ### STS ### 15 | .apt_generated 16 | .classpath 17 | .factorypath 18 | .project 19 | .settings 20 | .springBeans 21 | 22 | ### IntelliJ IDEA ### 23 | .idea 24 | *.iws 25 | *.iml 26 | *.ipr 27 | 28 | ### JRebel ### 29 | rebel.xml 30 | ### NetBeans ### 31 | nbproject/private/ 32 | build/* 33 | nbbuild/ 34 | dist/ 35 | nbdist/ 36 | .nb-gradle/ 37 | 38 | ###################################################################### 39 | # Others 40 | *.log 41 | *.xml.versionsBackup 42 | *.swp 43 | 44 | !*/build/*.java 45 | !*/build/*.html 46 | !*/build/*.xml -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "**/.classpath": true, 4 | "**/.project": true, 5 | "**/.settings": true, 6 | "**/.factorypath": true 7 | }, 8 | "java.compile.nullAnalysis.mode": "automatic", 9 | "java.configuration.updateBuildConfiguration": "interactive" 10 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 若依 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /bin/clean.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/bin/clean.bat -------------------------------------------------------------------------------- /bin/package.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/bin/package.bat -------------------------------------------------------------------------------- /bin/run-auth.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/bin/run-auth.bat -------------------------------------------------------------------------------- /bin/run-gateway.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/bin/run-gateway.bat -------------------------------------------------------------------------------- /bin/run-modules-file.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/bin/run-modules-file.bat -------------------------------------------------------------------------------- /bin/run-modules-gen.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/bin/run-modules-gen.bat -------------------------------------------------------------------------------- /bin/run-modules-job.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/bin/run-modules-job.bat -------------------------------------------------------------------------------- /bin/run-modules-system.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/bin/run-modules-system.bat -------------------------------------------------------------------------------- /bin/run-monitor.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/bin/run-monitor.bat -------------------------------------------------------------------------------- /docker/copy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 复制项目的文件到对应docker路径,便于一键生成镜像。 4 | usage() { 5 | echo "Usage: sh copy.sh" 6 | exit 1 7 | } 8 | 9 | 10 | # copy sql 11 | echo "begin copy sql " 12 | cp ../sql/ry_20230223.sql ./mysql/db 13 | cp ../sql/ry_config_20220929.sql ./mysql/db 14 | 15 | # copy html 16 | echo "begin copy html " 17 | cp -r ../ruoyi-ui/dist/** ./nginx/html/dist 18 | 19 | 20 | # copy jar 21 | echo "begin copy ruoyi-gateway " 22 | cp ../ruoyi-gateway/target/ruoyi-gateway.jar ./ruoyi/gateway/jar 23 | 24 | echo "begin copy ruoyi-auth " 25 | cp ../ruoyi-auth/target/ruoyi-auth.jar ./ruoyi/auth/jar 26 | 27 | echo "begin copy ruoyi-visual " 28 | cp ../ruoyi-visual/ruoyi-monitor/target/ruoyi-visual-monitor.jar ./ruoyi/visual/monitor/jar 29 | 30 | echo "begin copy ruoyi-modules-system " 31 | cp ../ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar ./ruoyi/modules/system/jar 32 | 33 | echo "begin copy ruoyi-modules-file " 34 | cp ../ruoyi-modules/ruoyi-file/target/ruoyi-modules-file.jar ./ruoyi/modules/file/jar 35 | 36 | echo "begin copy ruoyi-modules-job " 37 | cp ../ruoyi-modules/ruoyi-job/target/ruoyi-modules-job.jar ./ruoyi/modules/job/jar 38 | 39 | echo "begin copy ruoyi-modules-gen " 40 | cp ../ruoyi-modules/ruoyi-gen/target/ruoyi-modules-gen.jar ./ruoyi/modules/gen/jar 41 | 42 | -------------------------------------------------------------------------------- /docker/mysql/db/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/docker/mysql/db/readme.txt -------------------------------------------------------------------------------- /docker/mysql/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM mysql:5.7 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 执行sql脚本 7 | ADD ./db/*.sql /docker-entrypoint-initdb.d/ 8 | -------------------------------------------------------------------------------- /docker/nacos/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM nacos/nacos-server 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 复制conf文件到路径 7 | COPY ./conf/application.properties /home/nacos/conf/application.properties 8 | -------------------------------------------------------------------------------- /docker/nginx/conf/nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes 1; 2 | 3 | events { 4 | worker_connections 1024; 5 | } 6 | 7 | http { 8 | include mime.types; 9 | default_type application/octet-stream; 10 | sendfile on; 11 | keepalive_timeout 65; 12 | 13 | server { 14 | listen 80; 15 | server_name localhost; 16 | 17 | location / { 18 | root /home/ruoyi/projects/ruoyi-ui; 19 | try_files $uri $uri/ /index.html; 20 | index index.html index.htm; 21 | } 22 | 23 | location /prod-api/{ 24 | proxy_set_header Host $http_host; 25 | proxy_set_header X-Real-IP $remote_addr; 26 | proxy_set_header REMOTE-HOST $remote_addr; 27 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 28 | proxy_pass http://ruoyi-gateway:8080/; 29 | } 30 | 31 | # 避免actuator暴露 32 | if ($request_uri ~ "/actuator") { 33 | return 403; 34 | } 35 | 36 | error_page 500 502 503 504 /50x.html; 37 | location = /50x.html { 38 | root html; 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /docker/nginx/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM nginx 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 挂载目录 7 | VOLUME /home/ruoyi/projects/ruoyi-ui 8 | # 创建目录 9 | RUN mkdir -p /home/ruoyi/projects/ruoyi-ui 10 | # 指定路径 11 | WORKDIR /home/ruoyi/projects/ruoyi-ui 12 | # 复制conf文件到路径 13 | COPY ./conf/nginx.conf /etc/nginx/nginx.conf 14 | # 复制html文件到路径 15 | COPY ./html/dist /home/ruoyi/projects/ruoyi-ui 16 | -------------------------------------------------------------------------------- /docker/redis/conf/redis.conf: -------------------------------------------------------------------------------- 1 | # requirepass 123456 -------------------------------------------------------------------------------- /docker/redis/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM redis 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 挂载目录 7 | VOLUME /home/ruoyi/redis 8 | # 创建目录 9 | RUN mkdir -p /home/ruoyi/redis 10 | # 指定路径 11 | WORKDIR /home/ruoyi/redis 12 | # 复制conf文件到路径 13 | COPY ./conf/redis.conf /home/ruoyi/redis/redis.conf 14 | -------------------------------------------------------------------------------- /docker/ruoyi/auth/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:8-jre 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 挂载目录 7 | VOLUME /home/ruoyi 8 | # 创建目录 9 | RUN mkdir -p /home/ruoyi 10 | # 指定路径 11 | WORKDIR /home/ruoyi 12 | # 复制jar文件到路径 13 | COPY ./jar/ruoyi-auth.jar /home/ruoyi/ruoyi-auth.jar 14 | # 启动认证服务 15 | ENTRYPOINT ["java","-jar","ruoyi-auth.jar"] -------------------------------------------------------------------------------- /docker/ruoyi/auth/jar/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/docker/ruoyi/auth/jar/readme.txt -------------------------------------------------------------------------------- /docker/ruoyi/gateway/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:8-jre 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 挂载目录 7 | VOLUME /home/ruoyi 8 | # 创建目录 9 | RUN mkdir -p /home/ruoyi 10 | # 指定路径 11 | WORKDIR /home/ruoyi 12 | # 复制jar文件到路径 13 | COPY ./jar/ruoyi-gateway.jar /home/ruoyi/ruoyi-gateway.jar 14 | # 启动网关服务 15 | ENTRYPOINT ["java","-jar","ruoyi-gateway.jar"] -------------------------------------------------------------------------------- /docker/ruoyi/gateway/jar/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/docker/ruoyi/gateway/jar/readme.txt -------------------------------------------------------------------------------- /docker/ruoyi/modules/file/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:8-jre 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 挂载目录 7 | VOLUME /home/ruoyi 8 | # 创建目录 9 | RUN mkdir -p /home/ruoyi 10 | # 指定路径 11 | WORKDIR /home/ruoyi 12 | # 复制jar文件到路径 13 | COPY ./jar/ruoyi-modules-file.jar /home/ruoyi/ruoyi-modules-file.jar 14 | # 启动文件服务 15 | ENTRYPOINT ["java","-jar","ruoyi-modules-file.jar"] -------------------------------------------------------------------------------- /docker/ruoyi/modules/file/jar/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/docker/ruoyi/modules/file/jar/readme.txt -------------------------------------------------------------------------------- /docker/ruoyi/modules/gen/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:8-jre 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 挂载目录 7 | VOLUME /home/ruoyi 8 | # 创建目录 9 | RUN mkdir -p /home/ruoyi 10 | # 指定路径 11 | WORKDIR /home/ruoyi 12 | # 复制jar文件到路径 13 | COPY ./jar/ruoyi-modules-gen.jar /home/ruoyi/ruoyi-modules-gen.jar 14 | # 启动代码生成服务 15 | ENTRYPOINT ["java","-jar","ruoyi-modules-gen.jar"] -------------------------------------------------------------------------------- /docker/ruoyi/modules/gen/jar/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/docker/ruoyi/modules/gen/jar/readme.txt -------------------------------------------------------------------------------- /docker/ruoyi/modules/job/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:8-jre 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 挂载目录 7 | VOLUME /home/ruoyi 8 | # 创建目录 9 | RUN mkdir -p /home/ruoyi 10 | # 指定路径 11 | WORKDIR /home/ruoyi 12 | # 复制jar文件到路径 13 | COPY ./jar/ruoyi-modules-job.jar /home/ruoyi/ruoyi-modules-job.jar 14 | # 启动定时任务服务 15 | ENTRYPOINT ["java","-jar","ruoyi-modules-job.jar"] -------------------------------------------------------------------------------- /docker/ruoyi/modules/job/jar/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/docker/ruoyi/modules/job/jar/readme.txt -------------------------------------------------------------------------------- /docker/ruoyi/modules/system/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:8-jre 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 挂载目录 7 | VOLUME /home/ruoyi 8 | # 创建目录 9 | RUN mkdir -p /home/ruoyi 10 | # 指定路径 11 | WORKDIR /home/ruoyi 12 | # 复制jar文件到路径 13 | COPY ./jar/ruoyi-modules-system.jar /home/ruoyi/ruoyi-modules-system.jar 14 | # 启动系统服务 15 | ENTRYPOINT ["java","-jar","ruoyi-modules-system.jar"] -------------------------------------------------------------------------------- /docker/ruoyi/modules/system/jar/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/docker/ruoyi/modules/system/jar/readme.txt -------------------------------------------------------------------------------- /docker/ruoyi/visual/monitor/dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:8-jre 3 | # author 4 | MAINTAINER ruoyi 5 | 6 | # 挂载目录 7 | VOLUME /home/ruoyi 8 | # 创建目录 9 | RUN mkdir -p /home/ruoyi 10 | # 指定路径 11 | WORKDIR /home/ruoyi 12 | # 复制jar文件到路径 13 | COPY ./jar/ruoyi-visual-monitor.jar /home/ruoyi/ruoyi-visual-monitor.jar 14 | # 启动系统服务 15 | ENTRYPOINT ["java","-jar","ruoyi-visual-monitor.jar"] -------------------------------------------------------------------------------- /docker/ruoyi/visual/monitor/jar/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/docker/ruoyi/visual/monitor/jar/readme.txt -------------------------------------------------------------------------------- /react-ui/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [Makefile] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /react-ui/.eslintignore: -------------------------------------------------------------------------------- 1 | /lambda/ 2 | /scripts 3 | /config 4 | .history 5 | public 6 | dist 7 | .umi 8 | mock -------------------------------------------------------------------------------- /react-ui/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [require.resolve('@umijs/lint/dist/config/eslint')], 3 | globals: { 4 | page: true, 5 | REACT_APP_ENV: true, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /react-ui/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: ant-design 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /react-ui/.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: '报告 Bug | Report bug 🐛' 3 | about: 报告 Ant Design Pro 的 bug 4 | title: '🐛 [BUG]' 5 | labels: '🐛 bug' 6 | assignees: '' 7 | --- 8 | 9 | ### 🐛 bug 描述 10 | 11 | 15 | 16 | ### 📷 复现步骤 | Recurrence steps 17 | 18 | 22 | 23 | ### 🏞 期望结果 | Expected results 24 | 25 | 29 | 30 | ### 💻 复现代码 | Recurrence code 31 | 32 | 36 | 37 | ### © 版本信息 38 | 39 | - Ant Design Pro 版本: [e.g. 4.0.0] 40 | - umi 版本 41 | - 浏览器环境 42 | - 开发环境 [e.g. mac OS] 43 | 44 | ### 🚑 其他信息 45 | 46 | 49 | -------------------------------------------------------------------------------- /react-ui/.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: '功能需求 | Feature Requirements ✨' 3 | about: 对 Ant Design Pro 的需求或建议 4 | title: '👑 [需求 | Feature]' 5 | labels: '👑 Feature Request' 6 | assignees: '' 7 | --- 8 | 9 | ### 🥰 需求描述 | Requirements description 10 | 11 | 15 | 16 | ### 🧐 解决方案 | Solution 17 | 18 | 22 | 23 | ### 🚑 其他信息 | Other information 24 | 25 | 29 | -------------------------------------------------------------------------------- /react-ui/.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: '疑问或需要帮助 | Questions or need help ❓' 3 | about: 对 Ant Design Pro 使用的疑问或需要帮助 4 | title: '🧐[问题 | question]' 5 | labels: '🧐 question' 6 | assignees: '' 7 | --- 8 | 9 | ### 🧐 问题描述 | Problem description 10 | 11 | 15 | 16 | ### 💻 示例代码 | Sample code 17 | 18 | 22 | 23 | ### 🚑 其他信息 | Other information 24 | 25 | 29 | 30 | OS: 31 | 32 | Node: 33 | 34 | 浏览器 | browser: 35 | -------------------------------------------------------------------------------- /react-ui/.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Node CI 2 | 3 | on: [push, pull_request] 4 | 5 | permissions: 6 | contents: read 7 | 8 | jobs: 9 | build: 10 | runs-on: ${{ matrix.os }} 11 | strategy: 12 | matrix: 13 | node_version: [16.x, 14.x] 14 | os: [ubuntu-latest, windows-latest, macOS-latest] 15 | steps: 16 | - uses: actions/checkout@v1 17 | - name: Use Node.js ${{ matrix.node_version }} 18 | uses: actions/setup-node@v1 19 | with: 20 | node-version: ${{ matrix.node_version }} 21 | - run: echo ${{github.ref}} 22 | - run: npm install 23 | - run: yarn run lint 24 | - run: yarn run tsc 25 | - run: yarn run build 26 | env: 27 | CI: true 28 | PROGRESS: none 29 | NODE_ENV: test 30 | NODE_OPTIONS: --max_old_space_size=4096 31 | -------------------------------------------------------------------------------- /react-ui/.github/workflows/codeql.yml: -------------------------------------------------------------------------------- 1 | name: "CodeQL" 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | schedule: 9 | - cron: "48 12 * * 2" 10 | 11 | jobs: 12 | analyze: 13 | name: Analyze 14 | runs-on: ubuntu-latest 15 | permissions: 16 | actions: read 17 | contents: read 18 | security-events: write 19 | 20 | strategy: 21 | fail-fast: false 22 | matrix: 23 | language: [ javascript ] 24 | 25 | steps: 26 | - name: Checkout 27 | uses: actions/checkout@v3 28 | 29 | - name: Initialize CodeQL 30 | uses: github/codeql-action/init@v2 31 | with: 32 | languages: ${{ matrix.language }} 33 | queries: +security-and-quality 34 | 35 | - name: Autobuild 36 | uses: github/codeql-action/autobuild@v2 37 | 38 | - name: Perform CodeQL Analysis 39 | uses: github/codeql-action/analyze@v2 40 | with: 41 | category: "/language:${{ matrix.language }}" 42 | -------------------------------------------------------------------------------- /react-ui/.github/workflows/coverage.yml: -------------------------------------------------------------------------------- 1 | name: coverage CI 2 | 3 | on: [push, pull_request] 4 | 5 | permissions: 6 | contents: read 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v1 13 | - name: Use Node.js 16.x 14 | uses: actions/setup-node@v1 15 | with: 16 | node-version: 16.x 17 | - run: echo ${{github.ref}} 18 | - run: curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@7 19 | - run: pnpm config set store-dir ~/.pnpm-store 20 | - run: pnpm install --strict-peer-dependencies=false 21 | - run: yarn run test:coverage 22 | env: 23 | CI: true 24 | PROGRESS: none 25 | NODE_ENV: test 26 | NODE_OPTIONS: --max_old_space_size=4096 27 | - run: bash <(curl -s https://codecov.io/bash) 28 | -------------------------------------------------------------------------------- /react-ui/.github/workflows/emoji-helper.yml: -------------------------------------------------------------------------------- 1 | name: Emoji Helper 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | emoji: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions-cool/emoji-helper@v1.0.0 12 | with: 13 | type: 'release' 14 | emoji: '+1, laugh, heart, hooray, rocket, eyes' 15 | -------------------------------------------------------------------------------- /react-ui/.github/workflows/issue-open-check.yml: -------------------------------------------------------------------------------- 1 | name: Issue Open Check 2 | 3 | on: 4 | issues: 5 | types: [opened, edited] 6 | 7 | jobs: 8 | check-issue: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions-cool/issues-helper@v2.2.0 12 | id: check 13 | with: 14 | actions: 'check-issue' 15 | issue-number: ${{ github.event.issue.number }} 16 | title-excludes: '🐛 [BUG], 👑 [需求 | Feature], 🧐[问题 | question]' 17 | 18 | - if: steps.check.outputs.check-result == 'false' && github.event.issue.state == 'open' 19 | uses: actions-cool/issues-helper@v2.2.0 20 | with: 21 | actions: 'create-comment, close-issue' 22 | issue-number: ${{ github.event.issue.number }} 23 | body: | 24 | 当前 Issue 未检测到标题,请规范填写,谢谢! 25 | 26 | The title of the current issue is not detected, please fill in according to the specifications, thank you! 27 | 28 | - if: steps.check.outputs.check-result == 'true' 29 | uses: actions-cool/issues-similarity-analysis@v1 30 | with: 31 | filter-threshold: 0.8 32 | title-excludes: '🐛[BUG], 👑 [需求 | Feature], 🧐[问题 | question]' 33 | comment-title: '### 以下的 Issues 可能会帮助到你 / The following issues may help you' 34 | show-footer: false 35 | -------------------------------------------------------------------------------- /react-ui/.github/workflows/pnpm.yml: -------------------------------------------------------------------------------- 1 | name: Node pnpm CI 2 | 3 | on: [push, pull_request] 4 | 5 | permissions: 6 | contents: read 7 | 8 | jobs: 9 | build: 10 | runs-on: ${{ matrix.os }} 11 | strategy: 12 | matrix: 13 | node_version: [16.x] 14 | os: [ubuntu-latest, windows-latest, macOS-latest] 15 | steps: 16 | - uses: actions/checkout@v1 17 | - name: Use Node.js ${{ matrix.node_version }} 18 | uses: actions/setup-node@v1 19 | with: 20 | node-version: ${{ matrix.node_version }} 21 | - run: echo ${{github.ref}} 22 | - run: curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@7 23 | - run: pnpm config set store-dir ~/.pnpm-store 24 | - run: pnpm install --strict-peer-dependencies=false 25 | - run: pnpm run lint 26 | - run: pnpm run tsc 27 | - run: pnpm run build 28 | - run: pnpm run test 29 | env: 30 | CI: true 31 | PROGRESS: none 32 | NODE_ENV: test 33 | NODE_OPTIONS: --max_old_space_size=4096 34 | -------------------------------------------------------------------------------- /react-ui/.github/workflows/preview-build.yml: -------------------------------------------------------------------------------- 1 | name: Preview Build 2 | 3 | on: 4 | pull_request: 5 | types: [opened, synchronize, reopened] 6 | 7 | permissions: 8 | contents: read 9 | 10 | jobs: 11 | build-preview: 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | with: 17 | ref: ${{ github.event.pull_request.head.sha }} 18 | 19 | - name: build 20 | run: | 21 | yarn 22 | yarn add umi-plugin-pro --save 23 | yarn build 24 | 25 | - name: upload dist artifact 26 | uses: actions/upload-artifact@v2 27 | with: 28 | name: dist 29 | path: dist/ 30 | retention-days: 5 31 | 32 | - name: Save PR number 33 | if: ${{ always() }} 34 | run: echo ${{ github.event.number }} > ./pr-id.txt 35 | 36 | - name: Upload PR number 37 | if: ${{ always() }} 38 | uses: actions/upload-artifact@v2 39 | with: 40 | name: pr 41 | path: ./pr-id.txt 42 | -------------------------------------------------------------------------------- /react-ui/.github/workflows/preview-start.yml: -------------------------------------------------------------------------------- 1 | name: Preview Start 2 | 3 | on: pull_request_target 4 | 5 | permissions: 6 | contents: read 7 | 8 | jobs: 9 | preview: 10 | permissions: 11 | issues: write # for actions-cool/maintain-one-comment to modify or create issue comments 12 | pull-requests: write # for actions-cool/maintain-one-comment to modify or create PR comments 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: create 16 | uses: actions-cool/maintain-one-comment@v1.2.1 17 | with: 18 | token: ${{ secrets.GITHUB_TOKEN }} 19 | body: | 20 | ⚡️ Deploying PR Preview... 21 | 22 | 23 | 24 | body-include: '' 25 | -------------------------------------------------------------------------------- /react-ui/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | **/node_modules 5 | # roadhog-api-doc ignore 6 | /src/utils/request-temp.js 7 | _roadhog-api-doc 8 | 9 | # production 10 | /dist 11 | 12 | # misc 13 | .DS_Store 14 | npm-debug.log* 15 | yarn-error.log 16 | 17 | /coverage 18 | .idea 19 | yarn.lock 20 | package-lock.json 21 | *bak 22 | .vscode 23 | 24 | 25 | # visual studio code 26 | .history 27 | *.log 28 | functions/* 29 | .temp/** 30 | 31 | # umi 32 | .umi 33 | .umi-production 34 | .umi-test 35 | 36 | # screenshot 37 | screenshot 38 | .firebase 39 | .eslintcache 40 | 41 | build 42 | 43 | pnpm-lock.yaml -------------------------------------------------------------------------------- /react-ui/.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | # Export Git hook params 5 | export GIT_PARAMS=$* 6 | 7 | # npx --no-install fabric verify-commit 8 | -------------------------------------------------------------------------------- /react-ui/.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | # npx --no-install lint-staged 5 | -------------------------------------------------------------------------------- /react-ui/.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.svg 2 | .umi 3 | .umi-production 4 | /dist 5 | .dockerignore 6 | .DS_Store 7 | .eslintignore 8 | *.png 9 | *.toml 10 | docker 11 | .editorconfig 12 | Dockerfile* 13 | .gitignore 14 | .prettierignore 15 | LICENSE 16 | .eslintcache 17 | *.lock 18 | yarn-error.log 19 | .history 20 | CNAME 21 | /build 22 | /public 23 | -------------------------------------------------------------------------------- /react-ui/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | singleQuote: true, 3 | trailingComma: 'all', 4 | printWidth: 100, 5 | proseWrap: 'never', 6 | endOfLine: 'lf', 7 | overrides: [ 8 | { 9 | files: '.prettierrc', 10 | options: { 11 | parser: 'json', 12 | }, 13 | }, 14 | { 15 | files: 'document.ejs', 16 | options: { 17 | parser: 'html', 18 | }, 19 | }, 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /react-ui/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019-present Alipay.inc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /react-ui/config/defaultSettings.ts: -------------------------------------------------------------------------------- 1 | import { ProLayoutProps } from '@ant-design/pro-components'; 2 | 3 | /** 4 | * @name 5 | */ 6 | const Settings: ProLayoutProps & { 7 | pwa?: boolean; 8 | logo?: string; 9 | } = { 10 | navTheme: 'light', 11 | // 拂晓蓝 12 | colorPrimary: '#1890ff', 13 | layout: 'mix', 14 | contentWidth: 'Fluid', 15 | fixedHeader: false, 16 | fixSiderbar: false, 17 | splitMenus: true, 18 | colorWeak: false, 19 | title: 'Ant Design Pro', 20 | pwa: true, 21 | logo: 'https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg', 22 | iconfontUrl: '', 23 | token: { 24 | // 参见ts声明,demo 见文档,通过token 修改样式 25 | //https://procomponents.ant.design/components/layout#%E9%80%9A%E8%BF%87-token-%E4%BF%AE%E6%94%B9%E6%A0%B7%E5%BC%8F 26 | }, 27 | }; 28 | 29 | export default Settings; 30 | -------------------------------------------------------------------------------- /react-ui/jest.config.ts: -------------------------------------------------------------------------------- 1 | import { configUmiAlias, createConfig } from '@umijs/max/test'; 2 | 3 | export default async () => { 4 | const config = await configUmiAlias({ 5 | ...createConfig({ 6 | target: 'browser', 7 | }), 8 | }); 9 | 10 | console.log(); 11 | return { 12 | ...config, 13 | testEnvironmentOptions: { 14 | ...(config?.testEnvironmentOptions || {}), 15 | url: 'http://localhost:8000', 16 | }, 17 | setupFiles: [...(config.setupFiles || []), './tests/setupTests.jsx'], 18 | globals: { 19 | ...config.globals, 20 | localStorage: null, 21 | }, 22 | }; 23 | }; 24 | -------------------------------------------------------------------------------- /react-ui/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "jsx": "react-jsx", 4 | "emitDecoratorMetadata": true, 5 | "experimentalDecorators": true, 6 | "baseUrl": ".", 7 | "paths": { 8 | "@/*": ["./src/*"] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /react-ui/mock/route.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | '/api/auth_routes': { 3 | '/form/advanced-form': { authority: ['admin', 'user'] }, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /react-ui/public/CNAME: -------------------------------------------------------------------------------- 1 | preview.pro.ant.design -------------------------------------------------------------------------------- /react-ui/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/react-ui/public/favicon.ico -------------------------------------------------------------------------------- /react-ui/public/icons/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/react-ui/public/icons/icon-128x128.png -------------------------------------------------------------------------------- /react-ui/public/icons/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/react-ui/public/icons/icon-192x192.png -------------------------------------------------------------------------------- /react-ui/public/icons/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/whiteshader/Spring-Cloud-React-Admin/81d3bfe2f5d2e51bbbd700cfc9fcc31548372f6d/react-ui/public/icons/icon-512x512.png -------------------------------------------------------------------------------- /react-ui/public/pro_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /react-ui/src/components/Footer/index.tsx: -------------------------------------------------------------------------------- 1 | import { GithubOutlined } from '@ant-design/icons'; 2 | import { DefaultFooter } from '@ant-design/pro-components'; 3 | import { useIntl } from '@umijs/max'; 4 | import React from 'react'; 5 | 6 | const Footer: React.FC = () => { 7 | const intl = useIntl(); 8 | const defaultMessage = intl.formatMessage({ 9 | id: 'app.copyright.produced', 10 | defaultMessage: '蚂蚁集团体验技术部出品', 11 | }); 12 | 13 | const currentYear = new Date().getFullYear(); 14 | 15 | return ( 16 | , 31 | href: 'https://github.com/ant-design/ant-design-pro', 32 | blankTarget: true, 33 | }, 34 | { 35 | key: 'Ant Design', 36 | title: 'Ant Design', 37 | href: 'https://ant.design', 38 | blankTarget: true, 39 | }, 40 | ]} 41 | /> 42 | ); 43 | }; 44 | 45 | export default Footer; 46 | -------------------------------------------------------------------------------- /react-ui/src/components/HeaderDropdown/index.tsx: -------------------------------------------------------------------------------- 1 | import { Dropdown } from 'antd'; 2 | import type { DropDownProps } from 'antd/es/dropdown'; 3 | import React from 'react'; 4 | import { useEmotionCss } from '@ant-design/use-emotion-css'; 5 | import classNames from 'classnames'; 6 | 7 | export type HeaderDropdownProps = { 8 | overlayClassName?: string; 9 | placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight' | 'bottomCenter'; 10 | } & Omit; 11 | 12 | const HeaderDropdown: React.FC = ({ overlayClassName: cls, ...restProps }) => { 13 | const className = useEmotionCss(({ token }) => { 14 | return { 15 | [`@media screen and (max-width: ${token.screenXS})`]: { 16 | width: '100%', 17 | }, 18 | }; 19 | }); 20 | return ( 21 | target.parentElement || document.body} 24 | {...restProps} 25 | /> 26 | ); 27 | }; 28 | 29 | export default HeaderDropdown; 30 | -------------------------------------------------------------------------------- /react-ui/src/components/IconSelector/CopyableIcon.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Tooltip } from 'antd'; 3 | import classNames from 'classnames'; 4 | import * as AntdIcons from '@ant-design/icons'; 5 | import type { ThemeType } from './index'; 6 | import styles from './style.less'; 7 | 8 | const allIcons: { 9 | [key: string]: any; 10 | } = AntdIcons; 11 | 12 | export interface CopyableIconProps { 13 | name: string; 14 | isNew: boolean; 15 | theme: ThemeType; 16 | justCopied: string | null; 17 | onSelect: (type: string, text: string) => any; 18 | } 19 | 20 | const CopyableIcon: React.FC = ({ 21 | name, 22 | justCopied, 23 | onSelect, 24 | theme, 25 | }) => { 26 | const className = classNames({ 27 | copied: justCopied === name, 28 | [theme]: !!theme, 29 | }); 30 | return ( 31 |
  • { 33 | if (onSelect) { 34 | onSelect(theme, name); 35 | } 36 | }}> 37 | 38 | {React.createElement(allIcons[name], { className: styles.anticon })} 39 | 40 | {/* 41 | {name} 42 | */} 43 |
  • 44 | ); 45 | }; 46 | 47 | export default CopyableIcon; 48 | -------------------------------------------------------------------------------- /react-ui/src/components/IconSelector/themeIcons.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | 4 | export const FilledIcon: React.FC = props => { 5 | const path = 6 | 'M864 64H160C107 64 64 107 64 160v' + 7 | '704c0 53 43 96 96 96h704c53 0 96-43 96-96V16' + 8 | '0c0-53-43-96-96-96z'; 9 | return ( 10 | 11 | 12 | 13 | ); 14 | }; 15 | 16 | export const OutlinedIcon: React.FC = props => { 17 | const path = 18 | 'M864 64H160C107 64 64 107 64 160v7' + 19 | '04c0 53 43 96 96 96h704c53 0 96-43 96-96V160c' + 20 | '0-53-43-96-96-96z m-12 800H172c-6.6 0-12-5.4-' + 21 | '12-12V172c0-6.6 5.4-12 12-12h680c6.6 0 12 5.4' + 22 | ' 12 12v680c0 6.6-5.4 12-12 12z'; 23 | return ( 24 | 25 | 26 | 27 | ); 28 | }; 29 | 30 | export const TwoToneIcon: React.FC = props => { 31 | const path = 32 | 'M16 512c0 273.932 222.066 496 496 49' + 33 | '6s496-222.068 496-496S785.932 16 512 16 16 238.' + 34 | '066 16 512z m496 368V144c203.41 0 368 164.622 3' + 35 | '68 368 0 203.41-164.622 368-368 368z'; 36 | return ( 37 | 38 | 39 | 40 | ); 41 | }; 42 | -------------------------------------------------------------------------------- /react-ui/src/enums/httpEnum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @description: Request result set 3 | */ 4 | export enum HttpResult { 5 | SUCCESS = 200, 6 | ERROR = -1, 7 | TIMEOUT = 401, 8 | TYPE = 'success', 9 | } 10 | 11 | /** 12 | * @description: request method 13 | */ 14 | export enum RequestMethod { 15 | GET = 'GET', 16 | POST = 'POST', 17 | PUT = 'PUT', 18 | DELETE = 'DELETE', 19 | } 20 | 21 | /** 22 | * @description: contentType 23 | */ 24 | export enum ContentType { 25 | // json 26 | JSON = 'application/json;charset=UTF-8', 27 | // form-data qs 28 | FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8', 29 | // form-data upload 30 | FORM_DATA = 'multipart/form-data;charset=UTF-8', 31 | } 32 | -------------------------------------------------------------------------------- /react-ui/src/enums/pagesEnums.ts: -------------------------------------------------------------------------------- 1 | 2 | export enum PageEnum { 3 | LOGIN = '/user/login' 4 | } -------------------------------------------------------------------------------- /react-ui/src/global.less: -------------------------------------------------------------------------------- 1 | html, 2 | body, 3 | #root { 4 | height: 100%; 5 | margin: 0; 6 | padding: 0; 7 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 8 | 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 9 | 'Noto Color Emoji'; 10 | } 11 | 12 | .colorWeak { 13 | filter: invert(80%); 14 | } 15 | 16 | .ant-layout { 17 | min-height: 100vh; 18 | } 19 | .ant-pro-sider.ant-layout-sider.ant-pro-sider-fixed { 20 | left: unset; 21 | } 22 | 23 | canvas { 24 | display: block; 25 | } 26 | 27 | body { 28 | text-rendering: optimizeLegibility; 29 | -webkit-font-smoothing: antialiased; 30 | -moz-osx-font-smoothing: grayscale; 31 | } 32 | 33 | ul, 34 | ol { 35 | list-style: none; 36 | } 37 | 38 | @media (max-width: 768px) { 39 | .ant-table { 40 | width: 100%; 41 | overflow-x: auto; 42 | &-thead > tr, 43 | &-tbody > tr { 44 | > th, 45 | > td { 46 | white-space: pre; 47 | > span { 48 | display: block; 49 | } 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /react-ui/src/hooks/net/dict.ts: -------------------------------------------------------------------------------- 1 | import { getDictValueEnum } from "@/services/system/dict"; 2 | 3 | export function useDictEnum(name: string) 4 | { 5 | const data = getDictValueEnum(name); 6 | return data; 7 | } -------------------------------------------------------------------------------- /react-ui/src/locales/en-US.ts: -------------------------------------------------------------------------------- 1 | import app from './en-US/app'; 2 | import component from './en-US/component'; 3 | import globalHeader from './en-US/globalHeader'; 4 | import menu from './en-US/menu'; 5 | import pages from './en-US/pages'; 6 | import pwa from './en-US/pwa'; 7 | import settingDrawer from './en-US/settingDrawer'; 8 | import settings from './en-US/settings'; 9 | 10 | export default { 11 | 'navBar.lang': 'Languages', 12 | 'layout.user.link.help': 'Help', 13 | 'layout.user.link.privacy': 'Privacy', 14 | 'layout.user.link.terms': 'Terms', 15 | 'app.copyright.produced': 'Produced by Ant Financial Experience Department', 16 | 'app.preview.down.block': 'Download this page to your local project', 17 | 'app.welcome.link.fetch-blocks': 'Get all block', 18 | 'app.welcome.link.block-list': 'Quickly build standard, pages based on `block` development', 19 | ...app, 20 | ...globalHeader, 21 | ...menu, 22 | ...settingDrawer, 23 | ...settings, 24 | ...pwa, 25 | ...component, 26 | ...pages, 27 | }; 28 | -------------------------------------------------------------------------------- /react-ui/src/locales/en-US/component.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.tagSelect.expand': 'Expand', 3 | 'component.tagSelect.collapse': 'Collapse', 4 | 'component.tagSelect.all': 'All', 5 | }; 6 | -------------------------------------------------------------------------------- /react-ui/src/locales/en-US/globalHeader.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.globalHeader.search': 'Search', 3 | 'component.globalHeader.search.example1': 'Search example 1', 4 | 'component.globalHeader.search.example2': 'Search example 2', 5 | 'component.globalHeader.search.example3': 'Search example 3', 6 | 'component.globalHeader.help': 'Help', 7 | 'component.globalHeader.notification': 'Notification', 8 | 'component.globalHeader.notification.empty': 'You have viewed all notifications.', 9 | 'component.globalHeader.message': 'Message', 10 | 'component.globalHeader.message.empty': 'You have viewed all messsages.', 11 | 'component.globalHeader.event': 'Event', 12 | 'component.globalHeader.event.empty': 'You have viewed all events.', 13 | 'component.noticeIcon.clear': 'Clear', 14 | 'component.noticeIcon.cleared': 'Cleared', 15 | 'component.noticeIcon.empty': 'No notifications', 16 | 'component.noticeIcon.view-more': 'View more', 17 | }; 18 | -------------------------------------------------------------------------------- /react-ui/src/locales/en-US/pwa.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.pwa.offline': 'You are offline now', 3 | 'app.pwa.serviceworker.updated': 'New content is available', 4 | 'app.pwa.serviceworker.updated.hint': 'Please press the "Refresh" button to reload current page', 5 | 'app.pwa.serviceworker.updated.ok': 'Refresh', 6 | }; 7 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/app.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.docs.components.icon.search.placeholder': '在此搜索图标,点击图标可复制代码', 3 | 'app.docs.components.icon.outlined': '线框风格', 4 | 'app.docs.components.icon.filled': '实底风格', 5 | 'app.docs.components.icon.two-tone': '双色风格', 6 | 'app.docs.components.icon.category.direction': '方向性图标', 7 | 'app.docs.components.icon.category.suggestion': '提示建议性图标', 8 | 'app.docs.components.icon.category.editor': '编辑类图标', 9 | 'app.docs.components.icon.category.data': '数据类图标', 10 | 'app.docs.components.icon.category.other': '网站通用图标', 11 | 'app.docs.components.icon.category.logo': '品牌和标识', 12 | 'app.docs.components.icon.pic-searcher.intro': 'AI 截图搜索上线了,快来体验吧!🎉', 13 | 'app.docs.components.icon.pic-searcher.title': '上传图片搜索图标', 14 | 'app.docs.components.icon.pic-searcher.upload-text': '点击/拖拽/粘贴上传图片', 15 | 'app.docs.components.icon.pic-searcher.upload-hint': 16 | '我们会通过上传的图片进行匹配,得到最相似的图标', 17 | 'app.docs.components.icon.pic-searcher.server-error': '识别服务暂不可用', 18 | 'app.docs.components.icon.pic-searcher.matching': '匹配中...', 19 | 'app.docs.components.icon.pic-searcher.modelloading': '神经网络模型加载中...', 20 | 'app.docs.components.icon.pic-searcher.result-tip': '为您匹配到以下图标:', 21 | 'app.docs.components.icon.pic-searcher.th-icon': '图标', 22 | 'app.docs.components.icon.pic-searcher.th-score': '匹配度', 23 | }; 24 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/component.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.tagSelect.expand': '展开', 3 | 'component.tagSelect.collapse': '收起', 4 | 'component.tagSelect.all': '全部', 5 | }; 6 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/globalHeader.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.globalHeader.search': '站内搜索', 3 | 'component.globalHeader.search.example1': '搜索提示一', 4 | 'component.globalHeader.search.example2': '搜索提示二', 5 | 'component.globalHeader.search.example3': '搜索提示三', 6 | 'component.globalHeader.help': '使用文档', 7 | 'component.globalHeader.notification': '通知', 8 | 'component.globalHeader.notification.empty': '你已查看所有通知', 9 | 'component.globalHeader.message': '消息', 10 | 'component.globalHeader.message.empty': '您已读完所有消息', 11 | 'component.globalHeader.event': '待办', 12 | 'component.globalHeader.event.empty': '你已完成所有待办', 13 | 'component.noticeIcon.clear': '清空', 14 | 'component.noticeIcon.cleared': '清空了', 15 | 'component.noticeIcon.empty': '暂无数据', 16 | 'component.noticeIcon.view-more': '查看更多', 17 | }; 18 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/monitor/job-log.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 定时任务调度日志 3 | * 4 | * @author whiteshader 5 | * @date 2023-02-07 6 | */ 7 | 8 | export default { 9 | 'monitor.job.log.title': '定时任务调度日志', 10 | 'monitor.job.log.job_log_id': '任务日志编号', 11 | 'monitor.job.log.job_name': '任务名称', 12 | 'monitor.job.log.job_group': '任务组名', 13 | 'monitor.job.log.invoke_target': '调用方法', 14 | 'monitor.job.log.job_message': '日志信息', 15 | 'monitor.job.log.status': '执行状态', 16 | 'monitor.job.log.exception_info': '异常信息', 17 | 'monitor.job.log.create_time': '创建时间', 18 | }; 19 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/monitor/job.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 定时任务调度 3 | * 4 | * @author whiteshader@163.com 5 | * @date 2023-02-07 6 | */ 7 | 8 | export default { 9 | 'monitor.job.title': '定时任务调度', 10 | 'monitor.job.job_id': '任务编号', 11 | 'monitor.job.job_name': '任务名称', 12 | 'monitor.job.job_group': '任务组名', 13 | 'monitor.job.invoke_target': '调用方法', 14 | 'monitor.job.cron_expression': 'cron执行表达式', 15 | 'monitor.job.misfire_policy': '执行策略', 16 | 'monitor.job.concurrent': '是否并发执行', 17 | 'monitor.job.next_valid_time': '下次执行时间', 18 | 'monitor.job.status': '状态', 19 | 'monitor.job.create_by': '创建者', 20 | 'monitor.job.create_time': '创建时间', 21 | 'monitor.job.update_by': '更新者', 22 | 'monitor.job.update_time': '更新时间', 23 | 'monitor.job.remark': '备注信息', 24 | 'monitor.job.detail': '任务详情', 25 | }; 26 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/monitor/logininfor.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'monitor.logininfor.title': '系统访问记录', 3 | 'monitor.logininfor.info_id': '访问编号', 4 | 'monitor.logininfor.user_name': '用户账号', 5 | 'monitor.logininfor.ipaddr': '登录IP地址', 6 | 'monitor.logininfor.login_location': '登录地点', 7 | 'monitor.logininfor.browser': '浏览器类型', 8 | 'monitor.logininfor.os': '操作系统', 9 | 'monitor.logininfor.status': '登录状态', 10 | 'monitor.logininfor.msg': '提示消息', 11 | 'monitor.logininfor.login_time': '访问时间', 12 | 'monitor.logininfor.unlock': '解锁', 13 | }; 14 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/monitor/onlineUser.ts: -------------------------------------------------------------------------------- 1 | 2 | /* * 3 | * 4 | * @author whiteshader@163.com 5 | * @datetime 2021/09/16 6 | * 7 | * */ 8 | 9 | export default { 10 | 'monitor.online.user.id': '编号', 11 | 'monitor.online.user.token_id': '会话编号', 12 | 'monitor.online.user.user_name': '会话编号', 13 | 'monitor.online.user.ipaddr': '登录IP地址', 14 | 'monitor.online.user.login_location': '登录地点', 15 | 'monitor.online.user.browser': '浏览器类型', 16 | 'monitor.online.user.os': '操作系统', 17 | 'monitor.online.user.dept_name': '部门', 18 | 'monitor.online.user.login_time': '访问时间', 19 | 'monitor.online.user.force_logout': '强制退出', 20 | }; 21 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/monitor/operlog.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'monitor.operlog.title': '操作日志记录', 3 | 'monitor.operlog.oper_id': '日志主键', 4 | 'monitor.operlog.business_type': '业务类型', 5 | 'monitor.operlog.method': '方法名称', 6 | 'monitor.operlog.request_method': '请求方式', 7 | 'monitor.operlog.operator_type': '操作类别', 8 | 'monitor.operlog.oper_name': '操作人员', 9 | 'monitor.operlog.dept_name': '部门名称', 10 | 'monitor.operlog.oper_url': '请求URL', 11 | 'monitor.operlog.oper_ip': '主机地址', 12 | 'monitor.operlog.oper_location': '操作地点', 13 | 'monitor.operlog.oper_param': '请求参数', 14 | 'monitor.operlog.json_result': '返回参数', 15 | 'monitor.operlog.status': '操作状态', 16 | 'monitor.operlog.error_msg': '错误消息', 17 | 'monitor.operlog.oper_time': '操作时间', 18 | 'monitor.operlog.module': '操作模块', 19 | }; 20 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/monitor/server.ts: -------------------------------------------------------------------------------- 1 | 2 | /* * 3 | * 4 | * @author whiteshader@163.com 5 | * @datetime 2021/09/16 6 | * 7 | * */ 8 | 9 | export default { 10 | 'monitor.server.cpu.cpuNum': '核心数', 11 | 'monitor.server.cpu.total': '总使用率', 12 | 'monitor.server.cpu.sys': '系统使用率', 13 | 'monitor.server.cpu.used': '用户使用率', 14 | 'monitor.server.cpu.wait': 'IO等待', 15 | 'monitor.server.cpu.free': '当前空闲率', 16 | 'monitor.server.mem.total': '总内存', 17 | 'monitor.server.mem.used': '已用内存', 18 | 'monitor.server.mem.free': '剩余内存', 19 | 'monitor.server.mem.usage': '使用率', 20 | 'monitor.server.disk.dirName': '盘符路径', 21 | 'monitor.server.disk.sysTypeName': '文件系统', 22 | 'monitor.server.disk.typeName': '盘符类型', 23 | 'monitor.server.disk.total': '总大小', 24 | 'monitor.server.disk.free': '可用大小', 25 | 'monitor.server.disk.used': '已用大小', 26 | 'monitor.server.disk.usage': '使用率', 27 | }; 28 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/pwa.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.pwa.offline': '当前处于离线状态', 3 | 'app.pwa.serviceworker.updated': '有新内容', 4 | 'app.pwa.serviceworker.updated.hint': '请点击“刷新”按钮或者手动刷新页面', 5 | 'app.pwa.serviceworker.updated.ok': '刷新', 6 | }; 7 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/settingDrawer.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.setting.pagestyle': '整体风格设置', 3 | 'app.setting.pagestyle.dark': '暗色菜单风格', 4 | 'app.setting.pagestyle.light': '亮色菜单风格', 5 | 'app.setting.content-width': '内容区域宽度', 6 | 'app.setting.content-width.fixed': '定宽', 7 | 'app.setting.content-width.fluid': '流式', 8 | 'app.setting.themecolor': '主题色', 9 | 'app.setting.themecolor.dust': '薄暮', 10 | 'app.setting.themecolor.volcano': '火山', 11 | 'app.setting.themecolor.sunset': '日暮', 12 | 'app.setting.themecolor.cyan': '明青', 13 | 'app.setting.themecolor.green': '极光绿', 14 | 'app.setting.themecolor.daybreak': '拂晓蓝(默认)', 15 | 'app.setting.themecolor.geekblue': '极客蓝', 16 | 'app.setting.themecolor.purple': '酱紫', 17 | 'app.setting.navigationmode': '导航模式', 18 | 'app.setting.sidemenu': '侧边菜单布局', 19 | 'app.setting.topmenu': '顶部菜单布局', 20 | 'app.setting.fixedheader': '固定 Header', 21 | 'app.setting.fixedsidebar': '固定侧边菜单', 22 | 'app.setting.fixedsidebar.hint': '侧边菜单布局时可配置', 23 | 'app.setting.hideheader': '下滑时隐藏 Header', 24 | 'app.setting.hideheader.hint': '固定 Header 时可配置', 25 | 'app.setting.othersettings': '其他设置', 26 | 'app.setting.weakmode': '色弱模式', 27 | 'app.setting.copy': '拷贝设置', 28 | 'app.setting.copyinfo': '拷贝成功,请到 config/defaultSettings.js 中替换默认配置', 29 | 'app.setting.production.hint': 30 | '配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件', 31 | }; 32 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/system/config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'system.config.title': '参数配置', 3 | 'system.config.config_id': '参数主键', 4 | 'system.config.config_name': '参数名称', 5 | 'system.config.config_key': '参数键名', 6 | 'system.config.config_value': '参数键值', 7 | 'system.config.config_type': '系统内置', 8 | 'system.config.create_by': '创建者', 9 | 'system.config.create_time': '创建时间', 10 | 'system.config.update_by': '更新者', 11 | 'system.config.update_time': '更新时间', 12 | 'system.config.remark': '备注', 13 | 'system.config.refreshCache': '刷新缓存', 14 | }; 15 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/system/dept.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'system.dept.title': '部门', 3 | 'system.dept.dept_id': '部门id', 4 | 'system.dept.parent_id': '父部门id', 5 | 'system.dept.parent_dept': '上级部门', 6 | 'system.dept.ancestors': '祖级列表', 7 | 'system.dept.dept_name': '部门名称', 8 | 'system.dept.order_num': '显示顺序', 9 | 'system.dept.leader': '负责人', 10 | 'system.dept.phone': '联系电话', 11 | 'system.dept.email': '邮箱', 12 | 'system.dept.status': '部门状态', 13 | 'system.dept.del_flag': '删除标志', 14 | 'system.dept.create_by': '创建者', 15 | 'system.dept.create_time': '创建时间', 16 | 'system.dept.update_by': '更新者', 17 | 'system.dept.update_time': '更新时间', 18 | }; 19 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/system/dict-data.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'system.dict.data.title': '字典数据', 3 | 'system.dict.data.dict_code': '字典编码', 4 | 'system.dict.data.dict_sort': '字典排序', 5 | 'system.dict.data.dict_label': '字典标签', 6 | 'system.dict.data.dict_value': '字典键值', 7 | 'system.dict.data.dict_type': '字典类型', 8 | 'system.dict.data.css_class': '样式属性', 9 | 'system.dict.data.list_class': '回显样式', 10 | 'system.dict.data.is_default': '是否默认', 11 | 'system.dict.data.status': '状态', 12 | 'system.dict.data.create_by': '创建者', 13 | 'system.dict.data.create_time': '创建时间', 14 | 'system.dict.data.update_by': '更新者', 15 | 'system.dict.data.update_time': '更新时间', 16 | 'system.dict.data.remark': '备注', 17 | }; 18 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/system/dict.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'system.dict.title': '字典类型', 3 | 'system.dict.dict_id': '字典主键', 4 | 'system.dict.dict_name': '字典名称', 5 | 'system.dict.dict_type': '字典类型', 6 | 'system.dict.status': '状态', 7 | 'system.dict.create_by': '创建者', 8 | 'system.dict.create_time': '创建时间', 9 | 'system.dict.update_by': '更新者', 10 | 'system.dict.update_time': '更新时间', 11 | 'system.dict.remark': '备注', 12 | }; 13 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/system/menu.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'system.menu.title': '菜单权限', 3 | 'system.menu.menu_id': '菜单编号', 4 | 'system.menu.menu_name': '菜单名称', 5 | 'system.menu.parent_id': '上级菜单', 6 | 'system.menu.order_num': '显示顺序', 7 | 'system.menu.path': '路由地址', 8 | 'system.menu.component': '组件路径', 9 | 'system.menu.query': '路由参数', 10 | 'system.menu.is_frame': '是否为外链', 11 | 'system.menu.is_cache': '是否缓存', 12 | 'system.menu.menu_type': '菜单类型', 13 | 'system.menu.visible': '显示状态', 14 | 'system.menu.status': '菜单状态', 15 | 'system.menu.perms': '权限标识', 16 | 'system.menu.icon': '菜单图标', 17 | 'system.menu.create_by': '创建者', 18 | 'system.menu.create_time': '创建时间', 19 | 'system.menu.update_by': '更新者', 20 | 'system.menu.update_time': '更新时间', 21 | 'system.menu.remark': '备注', 22 | }; 23 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/system/notice.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'system.notice.title': '通知公告', 3 | 'system.notice.notice_id': '公告编号', 4 | 'system.notice.notice_title': '公告标题', 5 | 'system.notice.notice_type': '公告类型', 6 | 'system.notice.notice_content': '公告内容', 7 | 'system.notice.status': '公告状态', 8 | 'system.notice.create_by': '创建者', 9 | 'system.notice.create_time': '创建时间', 10 | 'system.notice.update_by': '更新者', 11 | 'system.notice.update_time': '更新时间', 12 | 'system.notice.remark': '备注', 13 | }; 14 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/system/post.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'system.post.title': '岗位信息', 3 | 'system.post.post_id': '岗位编号', 4 | 'system.post.post_code': '岗位编码', 5 | 'system.post.post_name': '岗位名称', 6 | 'system.post.post_sort': '显示顺序', 7 | 'system.post.status': '状态', 8 | 'system.post.create_by': '创建者', 9 | 'system.post.create_time': '创建时间', 10 | 'system.post.update_by': '更新者', 11 | 'system.post.update_time': '更新时间', 12 | 'system.post.remark': '备注', 13 | }; 14 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/system/role.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'system.role.title': '角色信息', 3 | 'system.role.role_id': '角色编号', 4 | 'system.role.role_name': '角色名称', 5 | 'system.role.role_key': '权限字符', 6 | 'system.role.role_sort': '显示顺序', 7 | 'system.role.data_scope': '数据范围', 8 | 'system.role.menu_check_strictly': '菜单树选择项是否关联显示', 9 | 'system.role.dept_check_strictly': '部门树选择项是否关联显示', 10 | 'system.role.status': '角色状态', 11 | 'system.role.del_flag': '删除标志', 12 | 'system.role.create_by': '创建者', 13 | 'system.role.create_time': '创建时间', 14 | 'system.role.update_by': '更新者', 15 | 'system.role.update_time': '更新时间', 16 | 'system.role.remark': '备注', 17 | 'system.role.auth': '菜单权限', 18 | 'system.role.auth.user': '选择用户', 19 | 'system.role.auth.addUser': '添加用户', 20 | 'system.role.auth.cancelAll': '批量取消授权', 21 | }; 22 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-CN/system/user.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'system.user.title': '用户信息', 3 | 'system.user.user_id': '用户编号', 4 | 'system.user.dept_name': '部门', 5 | 'system.user.user_name': '用户账号', 6 | 'system.user.nick_name': '用户昵称', 7 | 'system.user.user_type': '用户类型', 8 | 'system.user.email': '用户邮箱', 9 | 'system.user.phonenumber': '手机号码', 10 | 'system.user.sex': '用户性别', 11 | 'system.user.avatar': '头像地址', 12 | 'system.user.password': '密码', 13 | 'system.user.status': '帐号状态', 14 | 'system.user.del_flag': '删除标志', 15 | 'system.user.login_ip': '最后登录IP', 16 | 'system.user.login_date': '最后登录时间', 17 | 'system.user.create_by': '创建者', 18 | 'system.user.create_time': '创建时间', 19 | 'system.user.update_by': '更新者', 20 | 'system.user.update_time': '更新时间', 21 | 'system.user.remark': '备注', 22 | 'system.user.post': '岗位', 23 | 'system.user.role': '角色', 24 | 'system.user.auth.role': '分配角色', 25 | 'system.user.reset.password': '密码重置', 26 | 'system.user.modify_info': '编辑用户信息', 27 | 'system.user.old_password': '旧密码', 28 | 'system.user.new_password': '新密码', 29 | 'system.user.confirm_password': '确认密码', 30 | 'system.user.modify_avatar': '修改头像', 31 | }; 32 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-TW.ts: -------------------------------------------------------------------------------- 1 | import component from './zh-TW/component'; 2 | import globalHeader from './zh-TW/globalHeader'; 3 | import menu from './zh-TW/menu'; 4 | import pwa from './zh-TW/pwa'; 5 | import settingDrawer from './zh-TW/settingDrawer'; 6 | import settings from './zh-TW/settings'; 7 | 8 | export default { 9 | 'navBar.lang': '語言', 10 | 'layout.user.link.help': '幫助', 11 | 'layout.user.link.privacy': '隱私', 12 | 'layout.user.link.terms': '條款', 13 | 'app.preview.down.block': '下載此頁面到本地項目', 14 | ...globalHeader, 15 | ...menu, 16 | ...settingDrawer, 17 | ...settings, 18 | ...pwa, 19 | ...component, 20 | }; 21 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-TW/component.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.tagSelect.expand': '展開', 3 | 'component.tagSelect.collapse': '收起', 4 | 'component.tagSelect.all': '全部', 5 | }; 6 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-TW/globalHeader.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.globalHeader.search': '站內搜索', 3 | 'component.globalHeader.search.example1': '搜索提示壹', 4 | 'component.globalHeader.search.example2': '搜索提示二', 5 | 'component.globalHeader.search.example3': '搜索提示三', 6 | 'component.globalHeader.help': '使用手冊', 7 | 'component.globalHeader.notification': '通知', 8 | 'component.globalHeader.notification.empty': '妳已查看所有通知', 9 | 'component.globalHeader.message': '消息', 10 | 'component.globalHeader.message.empty': '您已讀完所有消息', 11 | 'component.globalHeader.event': '待辦', 12 | 'component.globalHeader.event.empty': '妳已完成所有待辦', 13 | 'component.noticeIcon.clear': '清空', 14 | 'component.noticeIcon.cleared': '清空了', 15 | 'component.noticeIcon.empty': '暫無資料', 16 | 'component.noticeIcon.view-more': '查看更多', 17 | }; 18 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-TW/pwa.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.pwa.offline': '當前處於離線狀態', 3 | 'app.pwa.serviceworker.updated': '有新內容', 4 | 'app.pwa.serviceworker.updated.hint': '請點擊“刷新”按鈕或者手動刷新頁面', 5 | 'app.pwa.serviceworker.updated.ok': '刷新', 6 | }; 7 | -------------------------------------------------------------------------------- /react-ui/src/locales/zh-TW/settingDrawer.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.setting.pagestyle': '整體風格設置', 3 | 'app.setting.pagestyle.dark': '暗色菜單風格', 4 | 'app.setting.pagestyle.light': '亮色菜單風格', 5 | 'app.setting.content-width': '內容區域寬度', 6 | 'app.setting.content-width.fixed': '定寬', 7 | 'app.setting.content-width.fluid': '流式', 8 | 'app.setting.themecolor': '主題色', 9 | 'app.setting.themecolor.dust': '薄暮', 10 | 'app.setting.themecolor.volcano': '火山', 11 | 'app.setting.themecolor.sunset': '日暮', 12 | 'app.setting.themecolor.cyan': '明青', 13 | 'app.setting.themecolor.green': '極光綠', 14 | 'app.setting.themecolor.daybreak': '拂曉藍(默認)', 15 | 'app.setting.themecolor.geekblue': '極客藍', 16 | 'app.setting.themecolor.purple': '醬紫', 17 | 'app.setting.navigationmode': '導航模式', 18 | 'app.setting.sidemenu': '側邊菜單布局', 19 | 'app.setting.topmenu': '頂部菜單布局', 20 | 'app.setting.fixedheader': '固定 Header', 21 | 'app.setting.fixedsidebar': '固定側邊菜單', 22 | 'app.setting.fixedsidebar.hint': '側邊菜單布局時可配置', 23 | 'app.setting.hideheader': '下滑時隱藏 Header', 24 | 'app.setting.hideheader.hint': '固定 Header 時可配置', 25 | 'app.setting.othersettings': '其他設置', 26 | 'app.setting.weakmode': '色弱模式', 27 | 'app.setting.copy': '拷貝設置', 28 | 'app.setting.copyinfo': '拷貝成功,請到 config/defaultSettings.js 中替換默認配置', 29 | 'app.setting.production.hint': 30 | '配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件', 31 | }; 32 | -------------------------------------------------------------------------------- /react-ui/src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ant Design Pro", 3 | "short_name": "Ant Design Pro", 4 | "display": "standalone", 5 | "start_url": "./?utm_source=homescreen", 6 | "theme_color": "#002140", 7 | "background_color": "#001529", 8 | "icons": [ 9 | { 10 | "src": "icons/icon-192x192.png", 11 | "sizes": "192x192" 12 | }, 13 | { 14 | "src": "icons/icon-128x128.png", 15 | "sizes": "128x128" 16 | }, 17 | { 18 | "src": "icons/icon-512x512.png", 19 | "sizes": "512x512" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /react-ui/src/pages/404.tsx: -------------------------------------------------------------------------------- 1 | import { history } from '@umijs/max'; 2 | import { Button, Result } from 'antd'; 3 | import React from 'react'; 4 | 5 | const NoFoundPage: React.FC = () => ( 6 | history.push('/')}> 12 | Back Home 13 | 14 | } 15 | /> 16 | ); 17 | 18 | export default NoFoundPage; 19 | -------------------------------------------------------------------------------- /react-ui/src/pages/Tool/Gen/locales/zh-CN.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'gen.import': '导入', 3 | 'gen.title': '表信息', 4 | 'gen.goback': '返回', 5 | 'gen.submit': '提交', 6 | 'gen.gencode': '生成', 7 | 'gen.preview': '预览', 8 | }; 9 | -------------------------------------------------------------------------------- /react-ui/src/pages/Tool/Gen/style.less: -------------------------------------------------------------------------------- 1 | .steps:global(.ant-steps) { 2 | max-width: 750px; 3 | margin: 16px auto; 4 | } 5 | -------------------------------------------------------------------------------- /react-ui/src/pages/Tool/Swagger/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | 3 | /** 4 | * 5 | * @author whiteshader@163.com 6 | * 7 | * */ 8 | 9 | const CacheInfo: React.FC = () => { 10 | useEffect(() => { 11 | const frame = document.getElementById('bdIframe'); 12 | if (frame) { 13 | const deviceWidth = document.documentElement.clientWidth; 14 | const deviceHeight = document.documentElement.clientHeight; 15 | frame.style.width = `${Number(deviceWidth) - 260}px`; 16 | frame.style.height = `${Number(deviceHeight) - 120}px`; 17 | } 18 | }); 19 | 20 | return ( 21 |
    22 |