├── .gitignore ├── LICENSE ├── README.md ├── Roadmap.md ├── deploy ├── docker-compose.yml └── k8s.yml ├── macula-cloud-admin ├── .env.dev ├── .env.development ├── .eslintrc.cjs ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── cypress.config.js ├── cypress │ ├── e2e │ │ ├── example.cy.js │ │ └── jsconfig.json │ ├── fixtures │ │ └── example.json │ └── support │ │ ├── commands.js │ │ └── e2e.js ├── index.html ├── package-lock.json ├── package.json ├── public │ ├── config.js │ ├── favicon.ico │ ├── img │ │ ├── 404.png │ │ ├── auth_banner.jpg │ │ ├── avatar.jpg │ │ ├── avatar2.gif │ │ ├── avatar3.gif │ │ ├── loginbg.svg │ │ ├── logo-r.png │ │ ├── logo.png │ │ ├── no-widgets.svg │ │ ├── tasks-example.png │ │ └── ver.svg │ └── tinymce │ │ ├── langs │ │ └── zh_CN.js │ │ └── skins │ │ ├── content │ │ ├── dark │ │ │ ├── content.css │ │ │ └── content.min.css │ │ ├── default │ │ │ ├── content.css │ │ │ └── content.min.css │ │ ├── document │ │ │ ├── content.css │ │ │ └── content.min.css │ │ ├── tinymce-5-dark │ │ │ ├── content.css │ │ │ └── content.min.css │ │ ├── tinymce-5 │ │ │ ├── content.css │ │ │ └── content.min.css │ │ └── writer │ │ │ ├── content.css │ │ │ └── content.min.css │ │ └── ui │ │ ├── oxide-dark │ │ ├── content.css │ │ ├── content.inline.css │ │ ├── content.inline.min.css │ │ ├── content.min.css │ │ ├── skin.css │ │ ├── skin.min.css │ │ ├── skin.shadowdom.css │ │ └── skin.shadowdom.min.css │ │ ├── oxide │ │ ├── content.css │ │ ├── content.inline.css │ │ ├── content.inline.min.css │ │ ├── content.min.css │ │ ├── skin.css │ │ ├── skin.min.css │ │ ├── skin.shadowdom.css │ │ └── skin.shadowdom.min.css │ │ ├── tinymce-5-dark │ │ ├── content.css │ │ ├── content.inline.css │ │ ├── content.inline.min.css │ │ ├── content.min.css │ │ ├── skin.css │ │ ├── skin.min.css │ │ ├── skin.shadowdom.css │ │ └── skin.shadowdom.min.css │ │ └── tinymce-5 │ │ ├── content.css │ │ ├── content.inline.css │ │ ├── content.inline.min.css │ │ ├── content.min.css │ │ ├── skin.css │ │ ├── skin.min.css │ │ ├── skin.shadowdom.css │ │ └── skin.shadowdom.min.css ├── src │ ├── App.vue │ ├── api │ │ ├── index.js │ │ └── model │ │ │ ├── common │ │ │ ├── auth.js │ │ │ └── common.js │ │ │ └── system │ │ │ ├── application.js │ │ │ ├── dept.js │ │ │ ├── dict.js │ │ │ ├── log.js │ │ │ ├── menu.js │ │ │ ├── permission.js │ │ │ ├── role.js │ │ │ ├── tenant.js │ │ │ └── user.js │ ├── assets │ │ └── icons │ │ │ ├── BugFill.vue │ │ │ ├── BugLine.vue │ │ │ ├── Code.vue │ │ │ ├── Download.vue │ │ │ ├── FileExcel.vue │ │ │ ├── FilePpt.vue │ │ │ ├── FileWord.vue │ │ │ ├── Organization.vue │ │ │ ├── Upload.vue │ │ │ ├── Vue.vue │ │ │ ├── Wechat.vue │ │ │ └── index.js │ ├── components │ │ ├── HelloWorld.vue │ │ ├── scCodeEditor │ │ │ └── index.vue │ │ ├── scContextmenu │ │ │ └── index.vue │ │ ├── scContextmenuItem │ │ │ └── index.vue │ │ ├── scCron │ │ │ └── index.vue │ │ ├── scCropper │ │ │ └── index.vue │ │ ├── scDialog │ │ │ └── index.vue │ │ ├── scEcharts │ │ │ ├── echarts-theme-T.js │ │ │ └── index.vue │ │ ├── scEditor │ │ │ └── index.vue │ │ ├── scFileExport │ │ │ ├── column.vue │ │ │ └── index.vue │ │ ├── scFileImport │ │ │ └── index.vue │ │ ├── scFileSelect │ │ │ └── index.vue │ │ ├── scFilterBar │ │ │ ├── index.vue │ │ │ ├── my.vue │ │ │ └── pySelect.vue │ │ ├── scForm │ │ │ ├── index.vue │ │ │ └── items │ │ │ │ └── tableselect.vue │ │ ├── scFormTable │ │ │ └── index.vue │ │ ├── scIconSelect │ │ │ └── index.vue │ │ ├── scListTable │ │ │ ├── columnListSetting.vue │ │ │ └── index.vue │ │ ├── scPageHeader │ │ │ └── index.vue │ │ ├── scPasswordStrength │ │ │ └── index.vue │ │ ├── scQrCode │ │ │ ├── index.vue │ │ │ └── qrcode.js │ │ ├── scSelect │ │ │ └── index.vue │ │ ├── scSelectFilter │ │ │ └── index.vue │ │ ├── scStatistic │ │ │ └── index.vue │ │ ├── scStatusIndicator │ │ │ └── index.vue │ │ ├── scTable │ │ │ ├── columnSetting.vue │ │ │ └── index.vue │ │ ├── scTableSelect │ │ │ └── index.vue │ │ ├── scTitle │ │ │ └── index.vue │ │ ├── scTrend │ │ │ └── index.vue │ │ ├── scUpload │ │ │ └── index.vue │ │ ├── scUploadFile │ │ │ └── index.vue │ │ ├── scUploadMultiple │ │ │ └── index.vue │ │ ├── scVideo │ │ │ └── index.vue │ │ ├── scWaterMark │ │ │ └── index.vue │ │ └── scWorkflow │ │ │ ├── index.vue │ │ │ ├── nodeWrap.vue │ │ │ ├── nodes │ │ │ ├── addNode.vue │ │ │ ├── approver.vue │ │ │ ├── branch.vue │ │ │ ├── promoter.vue │ │ │ └── send.vue │ │ │ └── select.vue │ ├── config │ │ ├── fileSelect.js │ │ ├── filterBar.js │ │ ├── iconSelect.js │ │ ├── index.js │ │ ├── myConfig.js │ │ ├── route.js │ │ ├── select.js │ │ ├── table.js │ │ ├── tableSelect.js │ │ ├── upload.js │ │ └── workflow.js │ ├── directives │ │ ├── auth.js │ │ ├── copy.js │ │ ├── index.js │ │ ├── role.js │ │ └── time.js │ ├── layout │ │ ├── components │ │ │ ├── iframeView.vue │ │ │ ├── navMenu.vue │ │ │ ├── search.vue │ │ │ ├── setting.vue │ │ │ ├── sideM.vue │ │ │ ├── tags.vue │ │ │ ├── tasks.vue │ │ │ ├── tenant.vue │ │ │ ├── topbar.vue │ │ │ └── userbar.vue │ │ ├── index.vue │ │ └── other │ │ │ ├── 404.vue │ │ │ └── empty.vue │ ├── locales │ │ ├── index.js │ │ └── lang │ │ │ ├── en.js │ │ │ └── zh-cn.js │ ├── main.js │ ├── router │ │ ├── index.js │ │ ├── scrollBehavior.js │ │ └── systemRouter.js │ ├── scui.js │ ├── stores │ │ ├── global.js │ │ ├── iframe.js │ │ ├── keepAlive.js │ │ ├── tenant.js │ │ └── viewTags.js │ ├── style │ │ ├── app.scss │ │ ├── dark.scss │ │ ├── fix.scss │ │ ├── media.scss │ │ ├── pages.scss │ │ └── style.scss │ ├── utils │ │ ├── color.js │ │ ├── db.js │ │ ├── errorHandler.js │ │ ├── load.js │ │ ├── permission.js │ │ ├── print.js │ │ ├── request.js │ │ ├── template.js │ │ ├── tool.js │ │ ├── useTabs.js │ │ └── verificate.js │ └── views │ │ ├── common │ │ ├── home │ │ │ ├── index.vue │ │ │ ├── widgets │ │ │ │ ├── components │ │ │ │ │ ├── about.vue │ │ │ │ │ ├── echarts.vue │ │ │ │ │ ├── index.js │ │ │ │ │ ├── progress.vue │ │ │ │ │ ├── time.vue │ │ │ │ │ ├── ver.vue │ │ │ │ │ └── welcome.vue │ │ │ │ └── index.vue │ │ │ └── work │ │ │ │ ├── components │ │ │ │ └── myapp.vue │ │ │ │ └── index.vue │ │ └── login │ │ │ ├── components │ │ │ ├── commonPage.vue │ │ │ ├── passwordForm.vue │ │ │ └── phoneForm.vue │ │ │ ├── index.vue │ │ │ ├── resetPassword.vue │ │ │ └── userRegister.vue │ │ └── system │ │ ├── application │ │ ├── addMaintainer.vue │ │ ├── index.vue │ │ ├── save.vue │ │ └── showMaintainer.vue │ │ ├── dept │ │ ├── index.vue │ │ └── save.vue │ │ ├── dict │ │ ├── dic.vue │ │ ├── index.vue │ │ └── list.vue │ │ ├── log │ │ └── index.vue │ │ ├── menu │ │ ├── index.vue │ │ └── save.vue │ │ ├── role │ │ ├── index.vue │ │ ├── resource.vue │ │ └── save.vue │ │ ├── tenant │ │ ├── index.vue │ │ ├── save.vue │ │ └── showMaintainer.vue │ │ └── user │ │ ├── index.vue │ │ └── save.vue └── vite.config.js ├── macula-cloud-api ├── README.md ├── macula-cloud-system-api │ ├── README.md │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── dev │ │ └── macula │ │ └── cloud │ │ └── system │ │ ├── api │ │ ├── MenuFeignClient.java │ │ ├── UserFeignClient.java │ │ └── fallback │ │ │ ├── AbstractMenuFeignFallbackFactory.java │ │ │ └── AbstractUserFeignFallbackFactory.java │ │ ├── dto │ │ ├── UserAuthInfo.java │ │ ├── UserImportDTO.java │ │ └── UserTokenRolesDTO.java │ │ ├── form │ │ ├── ApplicationForm.java │ │ ├── DeptForm.java │ │ ├── DictItemForm.java │ │ ├── DictTypeForm.java │ │ ├── MenuForm.java │ │ ├── PermissionValidtorForm.java │ │ ├── RoleForm.java │ │ ├── RolePermsForm.java │ │ ├── RoleResourceForm.java │ │ ├── TenantForm.java │ │ └── UserForm.java │ │ ├── query │ │ ├── ApplicationPageQuery.java │ │ ├── DeptQuery.java │ │ ├── DictItemPageQuery.java │ │ ├── DictTypePageQuery.java │ │ ├── LogPageQuery.java │ │ ├── MenuQuery.java │ │ ├── PermPageQuery.java │ │ ├── RolePageQuery.java │ │ ├── TenantPageQuery.java │ │ └── UserPageQuery.java │ │ └── vo │ │ ├── app │ │ └── ApplicationVO.java │ │ ├── dept │ │ ├── DeptDetailVO.java │ │ └── DeptVO.java │ │ ├── dict │ │ ├── DictItemPageVO.java │ │ └── DictTypePageVO.java │ │ ├── log │ │ └── AuditLogVO.java │ │ ├── menu │ │ ├── MenuDetailVO.java │ │ ├── MenuVO.java │ │ ├── ResourceVO.java │ │ └── RouteVO.java │ │ ├── perm │ │ └── PermPageVO.java │ │ ├── role │ │ └── RolePageVO.java │ │ ├── tenant │ │ └── TenantPageVO.java │ │ └── user │ │ ├── UserExportVO.java │ │ ├── UserLoginVO.java │ │ └── UserVO.java └── pom.xml ├── macula-cloud-gateway ├── Dockerfile ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── dev │ │ └── macula │ │ └── cloud │ │ └── gateway │ │ ├── MaculaGatewayApplication.java │ │ ├── config │ │ └── RedisConfiguration.java │ │ └── crypto │ │ └── CryptoLocaleServiceImpl.java │ └── resources │ ├── application.yml │ ├── bootstrap.yml │ └── jwk │ └── jose.jks ├── macula-cloud-iam ├── Dockerfile ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ ├── dev │ │ └── macula │ │ │ └── cloud │ │ │ └── iam │ │ │ ├── MaculaIamApplication.java │ │ │ ├── authentication │ │ │ ├── captcha │ │ │ │ ├── CaptchaAuthenticationFilter.java │ │ │ │ ├── CaptchaAuthenticationProvider.java │ │ │ │ ├── CaptchaAuthenticationToken.java │ │ │ │ ├── CaptchaLoginFilterConfigurer.java │ │ │ │ ├── CaptchaService.java │ │ │ │ └── CaptchaUserDetailsService.java │ │ │ └── weapp │ │ │ │ ├── WeappAuthenticationFilter.java │ │ │ │ ├── WeappAuthenticationProvider.java │ │ │ │ ├── WeappAuthenticationToken.java │ │ │ │ ├── WeappClient.java │ │ │ │ ├── WeappClientService.java │ │ │ │ ├── WeappLoginFilterConfigurer.java │ │ │ │ ├── WeappPreAuthenticationFilter.java │ │ │ │ ├── WeappRequest.java │ │ │ │ ├── WeappSessionKeyCache.java │ │ │ │ ├── WeappUserDetailsService.java │ │ │ │ └── WechatLoginResponse.java │ │ │ ├── config │ │ │ ├── CorsFilter.java │ │ │ ├── DefaultSecurityConfiguration.java │ │ │ ├── JwtConfiguration.java │ │ │ ├── OAuth2ConfigurerUtils.java │ │ │ ├── PasswordEncoderConfig.java │ │ │ ├── ProtocolCasConfiguration.java │ │ │ ├── ProtocolOAuth2Configuration.java │ │ │ └── ProtocolSaml2Configuration.java │ │ │ ├── controller │ │ │ └── LoginController.java │ │ │ ├── enums │ │ │ ├── PasswordEncoderTypeEnum.java │ │ │ └── UserTypeEnum.java │ │ │ ├── handler │ │ │ ├── JsonAccessDeniedHandler.java │ │ │ ├── JsonAuthenticationEntryPoint.java │ │ │ ├── OAuth2AuthenticationExceptionEntryPoint.java │ │ │ ├── RedirectLoginAuthenticationSuccessHandler.java │ │ │ └── ResponseWriter.java │ │ │ ├── jackson2 │ │ │ ├── CaptchaAuthenticationTokenDeserializer.java │ │ │ ├── CaptchaAuthenticationTokenMixin.java │ │ │ ├── LongMixin.java │ │ │ ├── MaculaIamJackson2Module.java │ │ │ ├── WeappAuthenticationTokenDeserializer.java │ │ │ └── WeappAuthenticationTokenMixin.java │ │ │ ├── mapper │ │ │ ├── SysOAuth2ClientMapper.java │ │ │ ├── SysRoleMapper.java │ │ │ └── SysUserMapper.java │ │ │ ├── pojo │ │ │ ├── dto │ │ │ │ ├── Authorization.java │ │ │ │ └── UserAuthInfo.java │ │ │ └── entity │ │ │ │ ├── SysOAuth2Client.java │ │ │ │ ├── SysRole.java │ │ │ │ └── SysUser.java │ │ │ ├── protocol │ │ │ └── oauth2 │ │ │ │ ├── CustomOAuth2TokenCustomizer.java │ │ │ │ ├── endpoint │ │ │ │ └── AuthorizationConsentController.java │ │ │ │ └── grant │ │ │ │ ├── CustomeOAuth2AccessTokenGenerator.java │ │ │ │ ├── README.md │ │ │ │ ├── base │ │ │ │ ├── OAuth2ResourceOwnerBaseAuthenticationConverter.java │ │ │ │ ├── OAuth2ResourceOwnerBaseAuthenticationProvider.java │ │ │ │ ├── OAuth2ResourceOwnerBaseAuthenticationToken.java │ │ │ │ └── package-info.java │ │ │ │ ├── password │ │ │ │ ├── OAuth2ResourceOwnerPasswordAuthenticationConverter.java │ │ │ │ ├── OAuth2ResourceOwnerPasswordAuthenticationProvider.java │ │ │ │ ├── OAuth2ResourceOwnerPasswordAuthenticationToken.java │ │ │ │ └── package-info.java │ │ │ │ └── sms │ │ │ │ ├── OAuth2ResourceOwnerSmsAuthenticationConverter.java │ │ │ │ ├── OAuth2ResourceOwnerSmsAuthenticationProvider.java │ │ │ │ ├── OAuth2ResourceOwnerSmsAuthenticationToken.java │ │ │ │ └── package-info.java │ │ │ ├── service │ │ │ ├── oauth2 │ │ │ │ ├── MaculaOAuth2AuthorizationConsentService.java │ │ │ │ ├── MaculaOAuth2AuthorizationService.java │ │ │ │ └── MaculaRegisteredClientRepository.java │ │ │ ├── support │ │ │ │ ├── SysOAuth2ClientService.java │ │ │ │ ├── SysRoleService.java │ │ │ │ ├── SysUserService.java │ │ │ │ ├── UserAuthInfoService.java │ │ │ │ └── impl │ │ │ │ │ ├── SysOAuth2ClientServiceImpl.java │ │ │ │ │ ├── SysRoleServiceImpl.java │ │ │ │ │ └── SysUserServiceImpl.java │ │ │ └── userdetails │ │ │ │ ├── CaptchaServiceImpl.java │ │ │ │ ├── CaptchaUserDetailsServiceImpl.java │ │ │ │ ├── SysUserDetails.java │ │ │ │ ├── SysUserDetailsServiceImpl.java │ │ │ │ ├── WeappClientServiceImpl.java │ │ │ │ ├── WeappSessionKeyCacheImpl.java │ │ │ │ └── WeappUserDetailsServiceImpl.java │ │ │ └── utils │ │ │ ├── OAuth2EndpointUtils.java │ │ │ ├── OAuth2ErrorCodesExpand.java │ │ │ └── ScopeException.java │ └── org │ │ └── springframework │ │ └── security │ │ └── config │ │ └── annotation │ │ └── web │ │ └── configurers │ │ └── AbstractLoginFilterConfigurer.java │ └── resources │ ├── application.yml │ ├── bootstrap.yml │ ├── jwk │ └── jose.jks │ ├── mapper │ ├── SysRoleMapper.xml │ └── SysUserMapper.xml │ ├── static │ ├── admin │ │ ├── css │ │ │ ├── admin.css │ │ │ ├── code │ │ │ │ ├── JetBrainsMono-Medium-3.ttf │ │ │ │ └── gruvbox-dark.min.css │ │ │ ├── loader.css │ │ │ └── other │ │ │ │ ├── center.css │ │ │ │ ├── console1.css │ │ │ │ ├── console2.css │ │ │ │ ├── error.css │ │ │ │ ├── generate.css │ │ │ │ ├── icon.css │ │ │ │ ├── login.css │ │ │ │ ├── oauth2login.css │ │ │ │ ├── result.css │ │ │ │ └── user.css │ │ ├── images │ │ │ ├── 403.svg │ │ │ ├── 404.svg │ │ │ ├── 500.svg │ │ │ ├── act.jpg │ │ │ ├── admin.png │ │ │ ├── avatar.png │ │ │ ├── dongtaima.png │ │ │ ├── login-bg-15.jpg │ │ │ ├── login.svg │ │ │ ├── logo.png │ │ │ ├── notice.png │ │ │ ├── pass.png │ │ │ ├── shouji.png │ │ │ └── yanzhengma.png │ │ └── js │ │ │ └── jquery.min.js │ ├── component │ │ ├── layui │ │ │ ├── css │ │ │ │ ├── layui.css │ │ │ │ └── modules │ │ │ │ │ ├── code.css │ │ │ │ │ ├── laydate │ │ │ │ │ └── default │ │ │ │ │ │ └── laydate.css │ │ │ │ │ └── layer │ │ │ │ │ └── default │ │ │ │ │ ├── icon-ext.png │ │ │ │ │ ├── icon.png │ │ │ │ │ ├── layer.css │ │ │ │ │ ├── loading-0.gif │ │ │ │ │ ├── loading-1.gif │ │ │ │ │ └── loading-2.gif │ │ │ ├── font │ │ │ │ ├── iconfont.eot │ │ │ │ ├── iconfont.svg │ │ │ │ ├── iconfont.ttf │ │ │ │ ├── iconfont.woff │ │ │ │ └── iconfont.woff2 │ │ │ └── layui.js │ │ └── pear │ │ │ ├── css │ │ │ ├── module │ │ │ │ ├── button.css │ │ │ │ ├── card.css │ │ │ │ ├── code.css │ │ │ │ ├── cropper.css │ │ │ │ ├── dtree │ │ │ │ │ ├── dtree.css │ │ │ │ │ ├── dtree.js │ │ │ │ │ └── font │ │ │ │ │ │ ├── dtreefont.css │ │ │ │ │ │ ├── dtreefont.eot │ │ │ │ │ │ ├── dtreefont.svg │ │ │ │ │ │ ├── dtreefont.ttf │ │ │ │ │ │ ├── dtreefont.woff │ │ │ │ │ │ └── icons.json │ │ │ │ ├── form.css │ │ │ │ ├── frame.css │ │ │ │ ├── iconPicker.css │ │ │ │ ├── label.css │ │ │ │ ├── layer.css │ │ │ │ ├── layout.css │ │ │ │ ├── link.css │ │ │ │ ├── loading.css │ │ │ │ ├── menu.css │ │ │ │ ├── message.css │ │ │ │ ├── notice.css │ │ │ │ ├── select.css │ │ │ │ ├── step.css │ │ │ │ ├── tab.css │ │ │ │ ├── table.css │ │ │ │ ├── tag.css │ │ │ │ ├── toast.css │ │ │ │ ├── topBar.css │ │ │ │ └── treetable.css │ │ │ └── pear.css │ │ │ ├── font │ │ │ ├── iconfont.css │ │ │ ├── iconfont.js │ │ │ ├── iconfont.json │ │ │ ├── iconfont.ttf │ │ │ ├── iconfont.woff │ │ │ └── iconfont.woff2 │ │ │ ├── module │ │ │ ├── admin.js │ │ │ ├── area.js │ │ │ ├── button.js │ │ │ ├── card.js │ │ │ ├── common.js │ │ │ ├── convert.js │ │ │ ├── count.js │ │ │ ├── cropper.js │ │ │ ├── design.js │ │ │ ├── document.js │ │ │ ├── drawer.js │ │ │ ├── dtree.js │ │ │ ├── echarts.js │ │ │ ├── echartsTheme.js │ │ │ ├── eleTree.js │ │ │ ├── frame.js │ │ │ ├── hash.js │ │ │ ├── iconPicker.js │ │ │ ├── json.js │ │ │ ├── menu.js │ │ │ ├── message.js │ │ │ ├── notice.js │ │ │ ├── popup.js │ │ │ ├── select.js │ │ │ ├── step.js │ │ │ ├── tab.js │ │ │ ├── tag.js │ │ │ ├── theme.js │ │ │ ├── tinymce │ │ │ │ ├── tinymce.js │ │ │ │ └── tinymce │ │ │ │ │ ├── langs │ │ │ │ │ ├── readme.md │ │ │ │ │ └── zh_CN.js │ │ │ │ │ ├── plugins │ │ │ │ │ ├── advlist │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── anchor │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── autolink │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── autoresize │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── autosave │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── bbcode │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── charmap │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── code │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── codesample │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── colorpicker │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── contextmenu │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── directionality │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── emoticons │ │ │ │ │ │ ├── js │ │ │ │ │ │ │ ├── emojiimages.js │ │ │ │ │ │ │ ├── emojiimages.min.js │ │ │ │ │ │ │ ├── emojis.js │ │ │ │ │ │ │ └── emojis.min.js │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── fullpage │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── fullscreen │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── help │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── hr │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── image │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── imagetools │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── importcss │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── indent2em │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── insertdatetime │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── legacyoutput │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── link │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── lists │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── media │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── nonbreaking │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── noneditable │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── pagebreak │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── paste │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── preview │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── print │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── quickbars │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── save │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── searchreplace │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── spellchecker │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── tabfocus │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── table │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── template │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── textcolor │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── textpattern │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── toc │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── visualblocks │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── visualchars │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ └── wordcount │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.min.js │ │ │ │ │ ├── skins │ │ │ │ │ ├── content │ │ │ │ │ │ ├── dark │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ │ ├── default │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ │ ├── document │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ │ └── writer │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ └── ui │ │ │ │ │ │ ├── oxide-dark │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ ├── content.inline.css │ │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ │ ├── content.inline.min.css.map │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ ├── content.min.css.map │ │ │ │ │ │ ├── content.mobile.css │ │ │ │ │ │ ├── content.mobile.min.css │ │ │ │ │ │ ├── content.mobile.min.css.map │ │ │ │ │ │ ├── fonts │ │ │ │ │ │ │ └── tinymce-mobile.woff │ │ │ │ │ │ ├── skin.css │ │ │ │ │ │ ├── skin.min.css │ │ │ │ │ │ ├── skin.min.css.map │ │ │ │ │ │ ├── skin.mobile.css │ │ │ │ │ │ ├── skin.mobile.min.css │ │ │ │ │ │ ├── skin.mobile.min.css.map │ │ │ │ │ │ ├── skin.shadowdom.css │ │ │ │ │ │ ├── skin.shadowdom.min.css │ │ │ │ │ │ └── skin.shadowdom.min.css.map │ │ │ │ │ │ └── oxide │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ ├── content.inline.css │ │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ │ ├── content.inline.min.css.map │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ ├── content.min.css.map │ │ │ │ │ │ ├── content.mobile.css │ │ │ │ │ │ ├── content.mobile.min.css │ │ │ │ │ │ ├── content.mobile.min.css.map │ │ │ │ │ │ ├── fonts │ │ │ │ │ │ └── tinymce-mobile.woff │ │ │ │ │ │ ├── skin.css │ │ │ │ │ │ ├── skin.min.css │ │ │ │ │ │ ├── skin.min.css.map │ │ │ │ │ │ ├── skin.mobile.css │ │ │ │ │ │ ├── skin.mobile.min.css │ │ │ │ │ │ ├── skin.mobile.min.css.map │ │ │ │ │ │ ├── skin.shadowdom.css │ │ │ │ │ │ ├── skin.shadowdom.min.css │ │ │ │ │ │ └── skin.shadowdom.min.css.map │ │ │ │ │ ├── themes │ │ │ │ │ ├── mobile │ │ │ │ │ │ ├── theme.js │ │ │ │ │ │ └── theme.min.js │ │ │ │ │ └── silver │ │ │ │ │ │ ├── theme.js │ │ │ │ │ │ └── theme.min.js │ │ │ │ │ ├── tinymce.js │ │ │ │ │ └── tinymce.min.js │ │ │ ├── toast.js │ │ │ ├── topBar.js │ │ │ ├── treetable.js │ │ │ └── yaml.js │ │ │ └── pear.js │ ├── favicon.ico │ ├── pear.config.json │ └── pear.config.yml │ └── templates │ ├── error │ ├── 403.html │ ├── 404.html │ └── 500.html │ ├── include.html │ ├── index.html │ ├── login.html │ └── oauth2 │ └── consent.html ├── macula-cloud-rocketmq ├── Dockerfile ├── README.md ├── pom.xml └── src │ └── main │ └── java │ └── dev │ └── macula │ └── cloud │ └── rocketmq │ └── MaculaRocketMQApplication.java ├── macula-cloud-seata ├── Dockerfile ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── dev │ │ └── macula │ │ └── cloud │ │ └── seata │ │ └── MaculaSeataApplication.java │ └── resources │ └── application.yml ├── macula-cloud-system ├── Dockerfile ├── README.md ├── docs │ └── macula-system-dump.sql ├── pom.xml └── src │ └── main │ ├── java │ └── dev │ │ └── macula │ │ └── cloud │ │ └── system │ │ ├── MaculaSystemApplication.java │ │ ├── config │ │ └── PasswordEncoderConfig.java │ │ ├── controller │ │ ├── SysApplicationController.java │ │ ├── SysDeptController.java │ │ ├── SysDictItemController.java │ │ ├── SysDictTypeController.java │ │ ├── SysLogController.java │ │ ├── SysMenuController.java │ │ ├── SysPermissionController.java │ │ ├── SysRoleController.java │ │ ├── SysTenantController.java │ │ └── SysUserController.java │ │ ├── converter │ │ ├── ApplicationConverter.java │ │ ├── AuditLogConverter.java │ │ ├── DeptConverter.java │ │ ├── DictItemConverter.java │ │ ├── DictTypeConverter.java │ │ ├── MenuConverter.java │ │ ├── RoleConverter.java │ │ ├── TenantConverter.java │ │ └── UserConverter.java │ │ ├── handler │ │ └── DefaultBlockExceptionHandler.java │ │ ├── listener │ │ ├── ApplicationListener.java │ │ ├── AuditLogEventListener.java │ │ └── UserImportListener.java │ │ ├── mapper │ │ ├── SysApplicationMapper.java │ │ ├── SysDeptMapper.java │ │ ├── SysDictItemMapper.java │ │ ├── SysDictTypeMapper.java │ │ ├── SysLogMapper.java │ │ ├── SysMenuMapper.java │ │ ├── SysPermissionMapper.java │ │ ├── SysRoleMapper.java │ │ ├── SysRoleMenuMapper.java │ │ ├── SysRolePermissionMapper.java │ │ ├── SysTenantInfoMapper.java │ │ ├── SysTenantUserMapper.java │ │ ├── SysUserMapper.java │ │ └── SysUserRoleMapper.java │ │ ├── pojo │ │ ├── bo │ │ │ ├── ApplicationBO.java │ │ │ ├── AuditLogBO.java │ │ │ ├── RouteBO.java │ │ │ ├── TenantBO.java │ │ │ ├── TenantUserBO.java │ │ │ ├── UserAuthBO.java │ │ │ ├── UserBO.java │ │ │ └── UserFormBO.java │ │ ├── entity │ │ │ ├── SysApplication.java │ │ │ ├── SysDept.java │ │ │ ├── SysDictItem.java │ │ │ ├── SysDictType.java │ │ │ ├── SysLog.java │ │ │ ├── SysMenu.java │ │ │ ├── SysPermission.java │ │ │ ├── SysRole.java │ │ │ ├── SysRoleMenu.java │ │ │ ├── SysRolePermission.java │ │ │ ├── SysTenantInfo.java │ │ │ ├── SysTenantUser.java │ │ │ ├── SysUser.java │ │ │ └── SysUserRole.java │ │ └── lombok.config │ │ ├── service │ │ ├── SysApplicationService.java │ │ ├── SysDeptService.java │ │ ├── SysDictItemService.java │ │ ├── SysDictTypeService.java │ │ ├── SysLogService.java │ │ ├── SysMenuService.java │ │ ├── SysPermissionService.java │ │ ├── SysRoleMenuService.java │ │ ├── SysRolePermissionService.java │ │ ├── SysRoleService.java │ │ ├── SysTenantService.java │ │ ├── SysTenantUserService.java │ │ ├── SysUserRoleService.java │ │ ├── SysUserService.java │ │ └── impl │ │ │ ├── SysApplicationServiceImpl.java │ │ │ ├── SysDeptServiceImpl.java │ │ │ ├── SysDictItemServiceImpl.java │ │ │ ├── SysDictTypeServiceImpl.java │ │ │ ├── SysLogServiceImpl.java │ │ │ ├── SysMenuServiceImpl.java │ │ │ ├── SysPermissionServiceImpl.java │ │ │ ├── SysRoleMenuServiceImpl.java │ │ │ ├── SysRolePermissionServiceImpl.java │ │ │ ├── SysRoleServiceImpl.java │ │ │ ├── SysTenantServiceImpl.java │ │ │ ├── SysTenantUserServiceImpl.java │ │ │ ├── SysUserRoleServiceImpl.java │ │ │ └── SysUserServiceImpl.java │ │ └── utils │ │ └── ServletUtils.java │ └── resources │ ├── application.yml │ ├── bootstrap.yml │ └── mapper │ ├── SysApplicationMapper.xml │ ├── SysDictItemMapper.xml │ ├── SysLogMapper.xml │ ├── SysMenuMapper.xml │ ├── SysPermissionMapper.xml │ ├── SysRoleMapper.xml │ ├── SysRoleMenuMapper.xml │ ├── SysRolePermissionMapper.xml │ ├── SysTenantInfoMapper.xml │ ├── SysUserMapper.xml │ └── SysUserRoleMapper.xml ├── macula-cloud-task ├── Dockerfile ├── README.md └── pom.xml ├── macula-cloud-tinyid ├── Dockerfile ├── README.md ├── docs │ └── macula-tinyid-dump.sql ├── pom.xml └── src │ ├── main │ ├── java │ │ └── dev │ │ │ └── macula │ │ │ └── cloud │ │ │ └── tinyid │ │ │ ├── MaculaTinyIdApplication.java │ │ │ ├── common │ │ │ └── Constants.java │ │ │ ├── config │ │ │ ├── DataSourceConfig.java │ │ │ └── DynamicDataSource.java │ │ │ ├── controller │ │ │ └── IdContronller.java │ │ │ ├── dao │ │ │ ├── TinyIdInfoDAO.java │ │ │ ├── TinyIdTokenDAO.java │ │ │ ├── entity │ │ │ │ ├── TinyIdInfo.java │ │ │ │ └── TinyIdToken.java │ │ │ └── impl │ │ │ │ ├── TinyIdInfoDAOImpl.java │ │ │ │ └── TinyIdTokenDAOImpl.java │ │ │ ├── filter │ │ │ └── RequestFilter.java │ │ │ ├── service │ │ │ ├── TinyIdTokenService.java │ │ │ └── impl │ │ │ │ ├── DbSegmentIdServiceImpl.java │ │ │ │ └── TinyIdTokenServiceImpl.java │ │ │ └── vo │ │ │ └── ErrorCode.java │ └── resources │ │ ├── application.yml │ │ └── bootstrap.yml │ └── test │ └── java │ └── dev │ └── macula │ └── cloud │ └── tinyid │ └── ServerTest.java ├── macula-cloud-xxljob ├── Dockerfile ├── docs │ └── macula-xxljob-dump.sql ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── xxl │ │ │ └── job │ │ │ └── admin │ │ │ ├── MaculaXxlJobAdminApplication.java │ │ │ ├── controller │ │ │ ├── IndexController.java │ │ │ ├── JobApiController.java │ │ │ ├── JobCodeController.java │ │ │ ├── JobGroupController.java │ │ │ ├── JobInfoController.java │ │ │ ├── JobLogController.java │ │ │ ├── UserController.java │ │ │ ├── annotation │ │ │ │ └── PermissionLimit.java │ │ │ ├── interceptor │ │ │ │ ├── CookieInterceptor.java │ │ │ │ ├── PermissionInterceptor.java │ │ │ │ └── WebMvcConfig.java │ │ │ └── resolver │ │ │ │ └── WebExceptionResolver.java │ │ │ ├── core │ │ │ ├── alarm │ │ │ │ ├── JobAlarm.java │ │ │ │ ├── JobAlarmer.java │ │ │ │ └── impl │ │ │ │ │ └── EmailJobAlarm.java │ │ │ ├── complete │ │ │ │ └── XxlJobCompleter.java │ │ │ ├── conf │ │ │ │ └── XxlJobAdminConfig.java │ │ │ ├── cron │ │ │ │ └── CronExpression.java │ │ │ ├── exception │ │ │ │ └── XxlJobException.java │ │ │ ├── model │ │ │ │ ├── XxlJobGroup.java │ │ │ │ ├── XxlJobInfo.java │ │ │ │ ├── XxlJobLog.java │ │ │ │ ├── XxlJobLogGlue.java │ │ │ │ ├── XxlJobLogReport.java │ │ │ │ ├── XxlJobRegistry.java │ │ │ │ └── XxlJobUser.java │ │ │ ├── old │ │ │ │ ├── RemoteHttpJobBean.java │ │ │ │ ├── XxlJobDynamicScheduler.java │ │ │ │ └── XxlJobThreadPool.java │ │ │ ├── route │ │ │ │ ├── ExecutorRouteStrategyEnum.java │ │ │ │ ├── ExecutorRouter.java │ │ │ │ └── strategy │ │ │ │ │ ├── ExecutorRouteBusyover.java │ │ │ │ │ ├── ExecutorRouteConsistentHash.java │ │ │ │ │ ├── ExecutorRouteFailover.java │ │ │ │ │ ├── ExecutorRouteFirst.java │ │ │ │ │ ├── ExecutorRouteLFU.java │ │ │ │ │ ├── ExecutorRouteLRU.java │ │ │ │ │ ├── ExecutorRouteLast.java │ │ │ │ │ ├── ExecutorRouteRandom.java │ │ │ │ │ └── ExecutorRouteRound.java │ │ │ ├── scheduler │ │ │ │ ├── MisfireStrategyEnum.java │ │ │ │ ├── ScheduleTypeEnum.java │ │ │ │ └── XxlJobScheduler.java │ │ │ ├── thread │ │ │ │ ├── JobCompleteHelper.java │ │ │ │ ├── JobFailMonitorHelper.java │ │ │ │ ├── JobLogReportHelper.java │ │ │ │ ├── JobRegistryHelper.java │ │ │ │ ├── JobScheduleHelper.java │ │ │ │ └── JobTriggerPoolHelper.java │ │ │ ├── trigger │ │ │ │ ├── TriggerTypeEnum.java │ │ │ │ └── XxlJobTrigger.java │ │ │ └── util │ │ │ │ ├── CookieUtil.java │ │ │ │ ├── FtlUtil.java │ │ │ │ ├── I18nUtil.java │ │ │ │ ├── JacksonUtil.java │ │ │ │ └── LocalCacheUtil.java │ │ │ ├── dao │ │ │ ├── XxlJobGroupDao.java │ │ │ ├── XxlJobInfoDao.java │ │ │ ├── XxlJobLogDao.java │ │ │ ├── XxlJobLogGlueDao.java │ │ │ ├── XxlJobLogReportDao.java │ │ │ ├── XxlJobRegistryDao.java │ │ │ └── XxlJobUserDao.java │ │ │ └── service │ │ │ ├── LoginService.java │ │ │ ├── XxlJobService.java │ │ │ └── impl │ │ │ ├── AdminBizImpl.java │ │ │ └── XxlJobServiceImpl.java │ └── resources │ │ ├── application.yml │ │ ├── bootstrap.yml │ │ ├── i18n │ │ ├── message_en.properties │ │ ├── message_zh_CN.properties │ │ └── message_zh_TC.properties │ │ ├── mybatis-mapper │ │ ├── XxlJobGroupMapper.xml │ │ ├── XxlJobInfoMapper.xml │ │ ├── XxlJobLogGlueMapper.xml │ │ ├── XxlJobLogMapper.xml │ │ ├── XxlJobLogReportMapper.xml │ │ ├── XxlJobRegistryMapper.xml │ │ └── XxlJobUserMapper.xml │ │ ├── static │ │ ├── adminlte │ │ │ ├── bower_components │ │ │ │ ├── Ionicons │ │ │ │ │ ├── css │ │ │ │ │ │ └── ionicons.min.css │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── ionicons.eot │ │ │ │ │ │ ├── ionicons.svg │ │ │ │ │ │ ├── ionicons.ttf │ │ │ │ │ │ └── ionicons.woff │ │ │ │ ├── PACE │ │ │ │ │ ├── pace.min.js │ │ │ │ │ └── themes │ │ │ │ │ │ └── blue │ │ │ │ │ │ └── pace-theme-flash.css │ │ │ │ ├── bootstrap-daterangepicker │ │ │ │ │ ├── daterangepicker.css │ │ │ │ │ └── daterangepicker.js │ │ │ │ ├── bootstrap │ │ │ │ │ ├── css │ │ │ │ │ │ ├── bootstrap.min.css │ │ │ │ │ │ └── bootstrap.min.css.map │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ │ └── js │ │ │ │ │ │ └── bootstrap.min.js │ │ │ │ ├── datatables.net-bs │ │ │ │ │ ├── css │ │ │ │ │ │ └── dataTables.bootstrap.min.css │ │ │ │ │ └── js │ │ │ │ │ │ └── dataTables.bootstrap.min.js │ │ │ │ ├── datatables.net │ │ │ │ │ └── js │ │ │ │ │ │ └── jquery.dataTables.min.js │ │ │ │ ├── fastclick │ │ │ │ │ └── fastclick.js │ │ │ │ ├── font-awesome │ │ │ │ │ ├── css │ │ │ │ │ │ ├── font-awesome.css.map │ │ │ │ │ │ └── font-awesome.min.css │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ │ ├── jquery-slimscroll │ │ │ │ │ └── jquery.slimscroll.min.js │ │ │ │ ├── jquery │ │ │ │ │ └── jquery.min.js │ │ │ │ └── moment │ │ │ │ │ └── moment.min.js │ │ │ └── plugins │ │ │ │ └── iCheck │ │ │ │ ├── icheck.min.js │ │ │ │ └── square │ │ │ │ ├── blue.css │ │ │ │ ├── blue.png │ │ │ │ └── blue@2x.png │ │ ├── favicon.ico │ │ ├── js │ │ │ ├── common.1.js │ │ │ ├── index.js │ │ │ ├── jobcode.index.1.js │ │ │ ├── jobgroup.index.1.js │ │ │ ├── jobinfo.index.1.js │ │ │ ├── joblog.detail.1.js │ │ │ ├── joblog.index.1.js │ │ │ ├── login.1.js │ │ │ └── user.index.1.js │ │ └── plugins │ │ │ ├── codemirror │ │ │ ├── addon │ │ │ │ └── hint │ │ │ │ │ ├── anyword-hint.js │ │ │ │ │ ├── show-hint.css │ │ │ │ │ └── show-hint.js │ │ │ ├── lib │ │ │ │ ├── codemirror.css │ │ │ │ └── codemirror.js │ │ │ └── mode │ │ │ │ ├── clike │ │ │ │ └── clike.js │ │ │ │ ├── javascript │ │ │ │ └── javascript.js │ │ │ │ ├── php │ │ │ │ └── php.js │ │ │ │ ├── powershell │ │ │ │ └── powershell.js │ │ │ │ ├── python │ │ │ │ └── python.js │ │ │ │ └── shell │ │ │ │ └── shell.js │ │ │ ├── cronGen │ │ │ ├── cronGen.js │ │ │ └── cronGen_en.js │ │ │ ├── echarts │ │ │ └── echarts.common.min.js │ │ │ ├── jquery │ │ │ ├── jquery.cookie.js │ │ │ └── jquery.validate.min.js │ │ │ └── layer │ │ │ ├── layer.js │ │ │ └── theme │ │ │ └── default │ │ │ ├── icon-ext.png │ │ │ ├── icon.png │ │ │ ├── layer.css │ │ │ ├── loading-0.gif │ │ │ ├── loading-1.gif │ │ │ └── loading-2.gif │ │ └── templates │ │ ├── common │ │ ├── common.exception.ftl │ │ └── common.macro.ftl │ │ ├── help.ftl │ │ ├── index.ftl │ │ ├── jobcode │ │ └── jobcode.index.ftl │ │ ├── jobgroup │ │ └── jobgroup.index.ftl │ │ ├── jobinfo │ │ └── jobinfo.index.ftl │ │ ├── joblog │ │ ├── joblog.detail.ftl │ │ └── joblog.index.ftl │ │ ├── login.ftl │ │ └── user │ │ └── user.index.ftl │ └── test │ └── java │ └── com │ └── xxl │ └── job │ ├── admin │ ├── controller │ │ ├── AbstractSpringMvcTest.java │ │ └── JobInfoControllerTest.java │ ├── core │ │ └── util │ │ │ └── JacksonUtilTest.java │ ├── dao │ │ ├── XxlJobGroupDaoTest.java │ │ ├── XxlJobInfoDaoTest.java │ │ ├── XxlJobLogDaoTest.java │ │ ├── XxlJobLogGlueDaoTest.java │ │ └── XxlJobRegistryDaoTest.java │ └── util │ │ └── I18nUtilTest.java │ ├── adminbiz │ └── AdminBizTest.java │ └── executorbiz │ └── ExecutorBizTest.java └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /build/ 3 | target 4 | !gradle/wrapper/gradle-wrapper.jar 5 | 6 | ### STS ### 7 | .apt_generated 8 | .classpath 9 | .factorypath 10 | .project 11 | .settings 12 | .springBeans 13 | 14 | ### IntelliJ IDEA ### 15 | .idea 16 | *.iws 17 | *.iml 18 | *.ipr 19 | .flattened-pom.xml 20 | flattened.xml 21 | 22 | ### NetBeans ### 23 | nbproject/private/ 24 | build/ 25 | nbbuild/ 26 | dist/ 27 | nbdist/ 28 | .nb-gradle/ 29 | 30 | .DS_Store -------------------------------------------------------------------------------- /Roadmap.md: -------------------------------------------------------------------------------- 1 | ## Roadmap 2 | 3 | ### 5.0 4 | - 独占角色exclusivity(用于一键收缩权限)(√) 5 | - 解决用户不同租户平台的权限问题(√) 6 | - 支持人群包角色(√) 7 | - 支持API和数据库文档展示 8 | - 基于PowerJob实现集中的任务调度服务 9 | - Seata管理端界集成 10 | - 低代码平台引入 11 | 12 | ### 5.1 13 | - 完善IAM模块 14 | - RocketMQ管理界面 15 | - 大模型智能体 16 | 17 | ### 6.0 18 | - 升级到JDK21、SpringBoot3 -------------------------------------------------------------------------------- /deploy/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/deploy/docker-compose.yml -------------------------------------------------------------------------------- /deploy/k8s.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/deploy/k8s.yml -------------------------------------------------------------------------------- /macula-cloud-admin/.env.dev: -------------------------------------------------------------------------------- 1 | VITE_APP_TITLE = macula-cloud(dev) 2 | VITE_APP_API_BASEURL=http://10.94.108.102:9000 3 | VITE_APP_IAM_URL=http://localhost:9010 -------------------------------------------------------------------------------- /macula-cloud-admin/.env.development: -------------------------------------------------------------------------------- 1 | VITE_APP_PROXY = false 2 | VITE_APP_TITLE = macula-cloud(local) 3 | VITE_APP_API_BASEURL = http://localhost:9000 4 | VITE_APP_IAM_URL=http://localhost:9010 -------------------------------------------------------------------------------- /macula-cloud-admin/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /* eslint-env node */ 19 | require("@rushstack/eslint-patch/modern-module-resolution"); 20 | 21 | module.exports = { 22 | root: true, 23 | extends: [ 24 | "plugin:vue/vue3-essential", 25 | "eslint:recommended", 26 | "@vue/eslint-config-prettier", 27 | ], 28 | parserOptions: { 29 | ecmaVersion: "latest", 30 | }, 31 | overrides: [ 32 | { 33 | files: ["cypress/e2e/**.{cy,spec}.{js,ts,jsx,tsx}"], 34 | extends: ["plugin:cypress/recommended"], 35 | }, 36 | ], 37 | }; 38 | -------------------------------------------------------------------------------- /macula-cloud-admin/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | 30 | # inspect 31 | .vite-inspect 32 | -------------------------------------------------------------------------------- /macula-cloud-admin/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/Dockerfile -------------------------------------------------------------------------------- /macula-cloud-admin/cypress.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | const { defineConfig } = require("cypress"); 19 | 20 | module.exports = defineConfig({ 21 | e2e: { 22 | specPattern: "cypress/e2e/**/*.{cy,spec}.{js,jsx,ts,tsx}", 23 | baseUrl: "http://localhost:4173", 24 | }, 25 | }); 26 | -------------------------------------------------------------------------------- /macula-cloud-admin/cypress/e2e/example.cy.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | // https://docs.cypress.io/api/introduction/api.html 19 | 20 | describe("My First Test", () => { 21 | it("visits the app root url", () => { 22 | cy.visit("/"); 23 | cy.contains("h1", "You did it!"); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /macula-cloud-admin/cypress/e2e/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["es5", "dom"], 5 | "types": ["cypress"] 6 | }, 7 | "include": ["./**/*", "../support/**/*"] 8 | } 9 | -------------------------------------------------------------------------------- /macula-cloud-admin/cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/config.js: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Copyright (c) 2023 Macula 4 | * macula.dev, China 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | // 此文件非必要,在生产环境下此文件配置可覆盖运行配置,开发环境下不起效 20 | // 详情见 src/config/index.js 21 | 22 | const APP_CONFIG = { 23 | //标题 24 | //APP_NAME: "SCUI", 25 | 26 | //接口地址,如遇跨域需使用nginx代理 27 | //API_URL: "https://www.fastmock.site/mock/5039c4361c39a7e3252c5b55971f1bd3/api" 28 | } 29 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/public/favicon.ico -------------------------------------------------------------------------------- /macula-cloud-admin/public/img/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/public/img/404.png -------------------------------------------------------------------------------- /macula-cloud-admin/public/img/auth_banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/public/img/auth_banner.jpg -------------------------------------------------------------------------------- /macula-cloud-admin/public/img/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/public/img/avatar.jpg -------------------------------------------------------------------------------- /macula-cloud-admin/public/img/avatar2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/public/img/avatar2.gif -------------------------------------------------------------------------------- /macula-cloud-admin/public/img/avatar3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/public/img/avatar3.gif -------------------------------------------------------------------------------- /macula-cloud-admin/public/img/logo-r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/public/img/logo-r.png -------------------------------------------------------------------------------- /macula-cloud-admin/public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/public/img/logo.png -------------------------------------------------------------------------------- /macula-cloud-admin/public/img/tasks-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-admin/public/img/tasks-example.png -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/content/dark/content.min.css: -------------------------------------------------------------------------------- 1 | body{background-color:#222f3e;color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/content/default/content.min.css: -------------------------------------------------------------------------------- 1 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/content/document/content.min.css: -------------------------------------------------------------------------------- 1 | @media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/content/tinymce-5-dark/content.min.css: -------------------------------------------------------------------------------- 1 | body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/content/tinymce-5/content.min.css: -------------------------------------------------------------------------------- 1 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/content/writer/content.min.css: -------------------------------------------------------------------------------- 1 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css: -------------------------------------------------------------------------------- 1 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css: -------------------------------------------------------------------------------- 1 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css: -------------------------------------------------------------------------------- 1 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css: -------------------------------------------------------------------------------- 1 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} 2 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/api/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * @description 自动import导入所有 api 模块 20 | */ 21 | 22 | const files = import.meta.globEager('./model/*/*.js') 23 | const modules = {} 24 | Object.keys(files).forEach(key => { 25 | modules[key.replace(/^\.\/model\/(.*)\/(.*)\.js$/g, '$1_$2')] = files[key].default 26 | }) 27 | export default modules 28 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/api/model/common/auth.js: -------------------------------------------------------------------------------- 1 | import config from "@/config" 2 | import http from "@/utils/request" 3 | 4 | export default { 5 | systemToken: { 6 | url: `${config.IAM_URL}/oauth2/token`, 7 | name: "macula V5 system提供隐式获取登录token接口", 8 | post: async function (data = {}, config = {}) { 9 | return await http.post(this.url, data, config) 10 | } 11 | }, 12 | getUserInfo: { 13 | url: `${config.API_URL}/${config.MODEL.system}/api/v1/users/me`, 14 | name: "macula V5 system提供获取当前登录用户信息接口", 15 | get: async function () { 16 | return await http.get(this.url) 17 | } 18 | }, 19 | getRoutes: { 20 | url: `${config.API_URL}/${config.MODEL.system}/api/v1/menus/routes`, 21 | name: "macula V5 system提供获取当前菜单接口", 22 | get: async function () { 23 | return await http.get(this.url) 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/api/model/system/log.js: -------------------------------------------------------------------------------- 1 | import config from "@/config" 2 | import http from "@/utils/request" 3 | 4 | export default { 5 | log: { 6 | list: { 7 | url: `${config.API_URL}/${config.MODEL.system}/api/v1/audit/log/page`, 8 | name: "日志列表", 9 | get: async function (params) { 10 | return await http.get(this.url, params); 11 | } 12 | } 13 | }, 14 | } 15 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/api/model/system/permission.js: -------------------------------------------------------------------------------- 1 | import config from '@/config' 2 | import http from '@/utils/request' 3 | export default { 4 | permission: { 5 | validtorUrlPerm: { 6 | url: `${config.API_URL}/${config.MODEL.system}/api/v1/permissions/validtor/urlPerm`, 7 | name: '接口权限路径验证器', 8 | post: async function (data) { 9 | return await http.post(this.url, data) 10 | } 11 | }, 12 | list: { 13 | url: `${config.API_URL}/${config.MODEL.system}/api/v1/permissions`, 14 | name: '权限列表', 15 | get: async function (params) { 16 | return await http.get(this.url, params); 17 | } 18 | }, 19 | del: { 20 | url: `${config.API_URL}/${config.MODEL.system}/api/v1/permissions`, 21 | name: '删除权限', 22 | delete: async function (ids, params) { 23 | return await http.delete(`${this.url}/${ids}`, params) 24 | } 25 | }, 26 | add: { 27 | url: `${config.API_URL}/${config.MODEL.system}/api/v1/permissions`, 28 | name: '添加权限', 29 | post: async function (data) { 30 | return await http.post(this.url, data) 31 | } 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /macula-cloud-admin/src/assets/icons/Code.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/assets/icons/Download.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/assets/icons/Upload.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/assets/icons/Vue.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/assets/icons/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | export { default as Vue } from './Vue.vue' 19 | export { default as Code } from './Code.vue' 20 | export { default as Wechat } from './Wechat.vue' 21 | export { default as BugFill } from './BugFill.vue' 22 | export { default as BugLine } from './BugLine.vue' 23 | export { default as FileWord } from './FileWord.vue' 24 | export { default as FileExcel } from './FileExcel.vue' 25 | export { default as FilePpt } from './FilePpt.vue' 26 | export { default as Organization } from './Organization.vue' 27 | export { default as Upload } from './Upload.vue' 28 | export { default as Download } from './Download.vue' -------------------------------------------------------------------------------- /macula-cloud-admin/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | 24 | 32 | 33 | 34 | 50 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/components/scTitle/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | 24 | 39 | 40 | 43 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/config/myConfig.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | //业务配置 19 | //会合并至this.$CONFIG 20 | //生产模式 public/config.js 同名key会覆盖这里的配置从而实现打包后的热更新 21 | //为避免和SCUI框架配置混淆建议添加前缀 MY_ 22 | //全局可使用 this.$CONFIG.MY_KEY 访问 23 | 24 | export default { 25 | //是否显示第三方授权登录 26 | MY_SHOW_LOGIN_OAUTH: true 27 | } 28 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/config/select.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | import API from "@/api"; 19 | 20 | //字典选择器配置 21 | 22 | export default { 23 | dicApiObj: API.system.dic.get, //获取字典接口对象 24 | parseData: function (res) { 25 | return { 26 | data: res.data, //分析行数据字段结构 27 | msg: res.msg, //分析描述字段结构 28 | code: res.code //分析状态字段结构 29 | } 30 | }, 31 | request: { 32 | name: 'name' //规定搜索字段 33 | }, 34 | props: { 35 | label: 'label', //映射label显示字段 36 | value: 'value', //映射value值字段 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/config/tableSelect.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | //表格选择器配置 19 | 20 | export default { 21 | pageSize: 20, //表格每一页条数 22 | parseData: function (res) { 23 | return { 24 | data: res.data, 25 | rows: res.data.records, //rows: res.data.rows, 分析行数据字段结构 26 | total: res.data.total, //分析总数字段结构 27 | msg: res.msg, //分析描述字段结构 28 | code: res.code //分析状态字段结构 29 | } 30 | }, 31 | request: { 32 | page: 'page', //规定当前分页字段 33 | pageSize: 'pageSize', //规定一页条数字段 34 | keyword: 'keyword' //规定搜索字段 35 | }, 36 | props: { 37 | label: 'label', //映射label显示字段 38 | value: 'value', //映射value值字段 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/config/upload.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | import API from "@/api"; 19 | 20 | //上传配置 21 | 22 | export default { 23 | apiObj: API.common_common.upload, //上传请求API对象 24 | filename: "file", //form请求时文件的key 25 | successCode: 200, //请求完成代码 26 | maxSize: 10, //最大文件大小 默认10MB 27 | parseData: function (res) { 28 | return { 29 | code: res.code, //分析状态字段结构 30 | fileName: res.data.fileName,//分析文件名称 31 | src: res.data.src, //分析图片远程地址结构 32 | msg: res.msg //分析描述字段结构 33 | } 34 | }, 35 | apiObjFile: API.common_common.uploadFile, //附件上传请求API对象 36 | maxSizeFile: 10 //最大文件大小 默认10MB 37 | } 38 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/directives/auth.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | import { permission } from '@/utils/permission' 19 | 20 | export default { 21 | mounted(el, binding) { 22 | const { value } = binding 23 | if(Array.isArray(value)){ 24 | let ishas = false; 25 | value.forEach(item => { 26 | if(permission(item)){ 27 | ishas = true; 28 | } 29 | }) 30 | if (!ishas){ 31 | el.parentNode.removeChild(el) 32 | } 33 | }else{ 34 | if(!permission(value)){ 35 | el.parentNode.removeChild(el); 36 | } 37 | } 38 | } 39 | }; 40 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/directives/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | export { default as auth } from './auth' 19 | export { default as role } from './role' 20 | export { default as time } from './time' 21 | export { default as copy } from './copy' -------------------------------------------------------------------------------- /macula-cloud-admin/src/directives/role.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | import { rolePermission } from '@/utils/permission' 19 | 20 | export default { 21 | mounted(el, binding) { 22 | const { value } = binding 23 | if(Array.isArray(value)){ 24 | let ishas = false; 25 | value.forEach(item => { 26 | if(rolePermission(item)){ 27 | ishas = true; 28 | } 29 | }) 30 | if (!ishas){ 31 | el.parentNode.removeChild(el) 32 | } 33 | }else{ 34 | if(!rolePermission(value)){ 35 | el.parentNode.removeChild(el); 36 | } 37 | } 38 | } 39 | }; 40 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/layout/other/empty.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/main.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | import 'element-plus/dist/index.css' 19 | import 'element-plus/theme-chalk/display.css' 20 | import { createApp } from "vue"; 21 | import { createPinia } from 'pinia'; 22 | import router from "./router"; 23 | import i18n from './locales'; 24 | import scui from './scui'; 25 | import App from "./App.vue"; 26 | 27 | const app = createApp(App); 28 | const pinia = createPinia(); 29 | 30 | app.use(pinia); 31 | app.use(router); 32 | app.use(i18n); 33 | app.use(scui); 34 | 35 | app.mount("#app"); 36 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/style/style.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | @import 'app.scss'; 19 | @import 'fix.scss'; 20 | @import 'pages.scss'; 21 | @import 'media.scss'; 22 | @import 'dark.scss'; 23 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/utils/verificate.js: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Copyright (c) 2023 Macula 4 | * macula.dev, China 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | //验证手机号 20 | export function verifyPhone(rule, value, callback) { 21 | let reg = /^[1][3, 4, 5, 6, 7, 8, 9][0-9]{9}$/ 22 | if(!reg.test(value)){ 23 | return callback(new Error('请输入正确的手机号码')) 24 | } 25 | callback() 26 | } 27 | 28 | //车牌号码 29 | export function verifyCars(rule, value, callback) { 30 | let reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/ 31 | if(!reg.test(value)){ 32 | return callback(new Error('请输入正确的车牌号码')) 33 | } 34 | callback() 35 | } 36 | -------------------------------------------------------------------------------- /macula-cloud-admin/src/views/common/home/widgets/components/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | import {markRaw} from 'vue'; 19 | const resultComps = {} 20 | const files = import.meta.globEager('./*.vue') 21 | Object.keys(files).forEach(fileName => { 22 | let comp = files[fileName] 23 | resultComps[fileName.replace(/^\.\/(.*)\.\w+$/, '$1')] = comp.default 24 | }) 25 | export default markRaw(resultComps) 26 | -------------------------------------------------------------------------------- /macula-cloud-api/README.md: -------------------------------------------------------------------------------- 1 | # Macula Cloud API 平台对外API SDK 2 | 提供各微服务给外部访问的接口定义 -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/README.md: -------------------------------------------------------------------------------- 1 | # Macula Cloud API for System 2 | 3 | 系统服务的对外的微服务接口 -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/api/fallback/AbstractMenuFeignFallbackFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.api.fallback; 19 | 20 | import dev.macula.cloud.system.api.MenuFeignClient; 21 | import org.springframework.cloud.openfeign.FallbackFactory; 22 | 23 | /** 24 | * 菜单远程调用降级工厂 25 | * 26 | * @author haoxr 27 | * @since 2021/4/24 28 | */ 29 | public abstract class AbstractMenuFeignFallbackFactory implements FallbackFactory { 30 | 31 | } 32 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/api/fallback/AbstractUserFeignFallbackFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.api.fallback; 19 | 20 | import dev.macula.cloud.system.api.UserFeignClient; 21 | import lombok.extern.slf4j.Slf4j; 22 | import org.springframework.cloud.openfeign.FallbackFactory; 23 | 24 | /** 25 | * 用户接口远程调用降级工厂 26 | * 27 | * @author haoxr 28 | * @since 2021/4/24 29 | */ 30 | @Slf4j 31 | public abstract class AbstractUserFeignFallbackFactory implements FallbackFactory { 32 | 33 | } 34 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/dto/UserTokenRolesDTO.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.dto; 19 | 20 | import lombok.Data; 21 | 22 | import java.util.Set; 23 | 24 | /** 25 | * {@code UserTokenRolesDTO} 包含TokenID和Roles的DTO,用于前端系统传递给system 26 | * 27 | * @author rain 28 | * @since 2023/9/17 00:15 29 | */ 30 | @Data 31 | public class UserTokenRolesDTO { 32 | /** 33 | * TOKEN ID 34 | */ 35 | private String tokenId; 36 | 37 | /** 38 | * 用户角色列表 39 | */ 40 | private Set roles; 41 | } 42 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/form/DictTypeForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.form; 19 | 20 | import io.swagger.v3.oas.annotations.media.Schema; 21 | import lombok.Data; 22 | 23 | @Schema(description = "字典类型") 24 | @Data 25 | public class DictTypeForm { 26 | 27 | @Schema(description = "字典类型ID") 28 | private Long id; 29 | 30 | @Schema(description = "类型名称") 31 | private String name; 32 | 33 | @Schema(description = "类型编码") 34 | private String code; 35 | 36 | @Schema(description = "类型状态:1->启用;0->禁用") 37 | private Integer status; 38 | 39 | } 40 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/form/MenuForm.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.form; 2 | 3 | import dev.macula.boot.enums.MenuTypeEnum; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | 10 | @Schema(description = "菜单表单对象") 11 | @Data 12 | public class MenuForm { 13 | 14 | private Long id; 15 | 16 | private Long parentId; 17 | 18 | private String name; 19 | 20 | private String icon; 21 | 22 | /** 23 | * 路由path 24 | */ 25 | private String path; 26 | 27 | /** 28 | * 组件路径 29 | */ 30 | private String component; 31 | 32 | private Integer sort; 33 | 34 | private Integer visible; 35 | 36 | private String redirect; 37 | 38 | private Integer fullPage; 39 | 40 | /** 41 | * 菜单类型(1:菜单;2:目录;3:外链;4:按钮) 42 | */ 43 | private MenuTypeEnum type; 44 | 45 | /** 46 | * 按钮权限标识 47 | */ 48 | private String perm; 49 | 50 | private List apiList; 51 | } 52 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/form/PermissionValidtorForm.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.form; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | 7 | @Data 8 | @Schema(description = "权限路径验证器") 9 | public class PermissionValidtorForm { 10 | @Schema(description = "权限id") 11 | private Long id; 12 | @Schema(description = "编码") 13 | private String code; 14 | @Schema(description = "请求的url") 15 | private String url; 16 | @Schema(description = "请求方法") 17 | private RequestMethod method; 18 | } 19 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/form/RolePermsForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.form; 19 | 20 | import lombok.Data; 21 | 22 | import java.util.List; 23 | 24 | /** 25 | * 角色权限传输层对象 26 | * 27 | * @author haoxr 28 | * @since 2021/12/19 11:46 29 | */ 30 | @Data 31 | public class RolePermsForm { 32 | 33 | /** 34 | * 菜单ID 35 | */ 36 | private Long menuId; 37 | 38 | /** 39 | * 角色ID 40 | */ 41 | private Long roleId; 42 | 43 | /** 44 | * 权限ID集合 45 | */ 46 | private List permIds; 47 | 48 | } 49 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/form/RoleResourceForm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.form; 19 | 20 | import io.swagger.v3.oas.annotations.media.Schema; 21 | import lombok.Data; 22 | 23 | import java.util.List; 24 | 25 | @Schema(description = "菜单资源表单") 26 | @Data 27 | public class RoleResourceForm { 28 | 29 | @Schema(description = "菜单ID集合") 30 | private List menuIds; 31 | 32 | @Schema(description = "权限ID集合") 33 | private List permIds; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/form/TenantForm.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.form; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | import javax.validation.Valid; 7 | import javax.validation.constraints.NotNull; 8 | import javax.validation.constraints.Size; 9 | import java.util.List; 10 | 11 | /** 12 | * 租户表单对象 13 | */ 14 | @Schema(description = "租户表单对象") 15 | @Data 16 | public class TenantForm { 17 | @Schema(description = "租户名字") 18 | private String name; 19 | @Schema(description = "租户编码") 20 | private String code; 21 | @Schema(description = "租户描述") 22 | private String description; 23 | @Valid 24 | @NotNull(message = "负责人不能为空") 25 | @Size(min = 1, message = "至少需要一个负责人") 26 | @Schema(description = "负责人id") 27 | private List supervisor; 28 | } 29 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/query/ApplicationPageQuery.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.query; 19 | 20 | import dev.macula.boot.base.BasePageQuery; 21 | import io.swagger.v3.oas.annotations.media.Schema; 22 | import lombok.Data; 23 | import lombok.EqualsAndHashCode; 24 | 25 | /** 26 | * 应用分页查询实体 27 | */ 28 | @EqualsAndHashCode(callSuper = true) 29 | @Data 30 | public class ApplicationPageQuery extends BasePageQuery { 31 | 32 | @Schema(description = "关键字(应用名称/应用编码)") 33 | private String keywords; 34 | } 35 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/query/DeptQuery.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.query; 19 | 20 | import io.swagger.v3.oas.annotations.media.Schema; 21 | import lombok.Data; 22 | 23 | /** 24 | * 部门分页查询对象 25 | * 26 | * @author haoxr 27 | * @since 2022/6/11 28 | */ 29 | @Schema(description = "部门分页查询对象") 30 | @Data 31 | public class DeptQuery { 32 | 33 | @Schema(description = "关键字(部门名称)") 34 | private String keywords; 35 | 36 | @Schema(description = "状态(1->正常;0->禁用)") 37 | private Integer status; 38 | 39 | } 40 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/query/DictItemPageQuery.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.query; 19 | 20 | import dev.macula.boot.base.BasePageQuery; 21 | import io.swagger.v3.oas.annotations.media.Schema; 22 | import lombok.Data; 23 | import lombok.EqualsAndHashCode; 24 | 25 | @EqualsAndHashCode(callSuper = true) 26 | @Schema(description = "字典数据项分页查询对象") 27 | @Data 28 | public class DictItemPageQuery extends BasePageQuery { 29 | 30 | @Schema(description = "关键字(字典项名称)") 31 | private String keywords; 32 | 33 | @Schema(description = "字典类型编码") 34 | private String typeCode; 35 | } 36 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/query/DictTypePageQuery.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.query; 19 | 20 | import dev.macula.boot.base.BasePageQuery; 21 | import io.swagger.v3.oas.annotations.media.Schema; 22 | import lombok.Data; 23 | import lombok.EqualsAndHashCode; 24 | 25 | @EqualsAndHashCode(callSuper = true) 26 | @Schema(description = "字典类型分页查询对象") 27 | @Data 28 | public class DictTypePageQuery extends BasePageQuery { 29 | 30 | @Schema(description = "关键字(类型名称/类型编码)") 31 | private String keywords; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/query/LogPageQuery.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.query; 2 | 3 | import dev.macula.boot.base.BasePageQuery; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | @EqualsAndHashCode(callSuper = true) 9 | @Schema(description = "审计日志分页查询对象") 10 | @Data 11 | public class LogPageQuery extends BasePageQuery { 12 | 13 | @Schema(description = "关键字(接口操作名称/请求路径/请求用户)") 14 | private String keywords; 15 | 16 | @Schema(description = "开始时间(格式:yyyy-MM-dd)") 17 | private String beginDate; 18 | 19 | @Schema(description = "截止时间(格式:yyyy-MM-dd)") 20 | private String endDate; 21 | } 22 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/query/MenuQuery.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.query; 19 | 20 | import io.swagger.v3.oas.annotations.media.Schema; 21 | import lombok.Data; 22 | 23 | /** 24 | * 菜单查询对象 25 | * 26 | * @author haoxr 27 | * @since 2022/10/28 28 | */ 29 | @Schema(description = "部门分页查询对象") 30 | @Data 31 | public class MenuQuery { 32 | 33 | @Schema(description = "关键字(菜单名称)") 34 | private String keywords; 35 | 36 | @Schema(description = "状态(1->显示;0->隐藏)") 37 | private Integer status; 38 | 39 | } 40 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/query/RolePageQuery.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.query; 19 | 20 | import dev.macula.boot.base.BasePageQuery; 21 | import io.swagger.v3.oas.annotations.media.Schema; 22 | import lombok.Data; 23 | import lombok.EqualsAndHashCode; 24 | 25 | /** 26 | * 角色分页查询实体 27 | * 28 | * @author haoxr 29 | * @since 2022/6/3 30 | */ 31 | @EqualsAndHashCode(callSuper = true) 32 | @Data 33 | public class RolePageQuery extends BasePageQuery { 34 | 35 | @Schema(description = "关键字(角色名称/角色编码)") 36 | private String keywords; 37 | } 38 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/query/TenantPageQuery.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.query; 2 | 3 | import dev.macula.boot.base.BasePageQuery; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | @EqualsAndHashCode(callSuper = true) 9 | @Data 10 | @Schema(description = "租户分页查询对象") 11 | public class TenantPageQuery extends BasePageQuery { 12 | 13 | @Schema(description = "关键字(租户名/租户编码/负责人)") 14 | private String keywords; 15 | } 16 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/vo/dict/DictItemPageVO.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.vo.dict; 19 | 20 | import io.swagger.v3.oas.annotations.media.Schema; 21 | import lombok.Data; 22 | 23 | @Schema(description = "字典数据项分页对象") 24 | @Data 25 | public class DictItemPageVO { 26 | 27 | @Schema(description = "数据项ID") 28 | private Long id; 29 | 30 | @Schema(description = "数据项名称") 31 | private String name; 32 | 33 | @Schema(description = "值") 34 | private String value; 35 | 36 | @Schema(description = "类型状态:1->启用;0->禁用") 37 | private Integer status; 38 | 39 | } 40 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/vo/dict/DictTypePageVO.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.vo.dict; 19 | 20 | import io.swagger.v3.oas.annotations.media.Schema; 21 | import lombok.Data; 22 | 23 | @Schema(description = "字典类型") 24 | @Data 25 | public class DictTypePageVO { 26 | 27 | @Schema(description = "字典类型ID") 28 | private Long id; 29 | 30 | @Schema(description = "类型名称") 31 | private String name; 32 | 33 | @Schema(description = "类型编码") 34 | private String code; 35 | 36 | @Schema(description = "类型状态:1->启用;0->禁用") 37 | private Integer status; 38 | 39 | } 40 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/vo/menu/MenuDetailVO.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.vo.menu; 19 | 20 | import lombok.Data; 21 | 22 | @Data 23 | public class MenuDetailVO { 24 | 25 | private Long id; 26 | 27 | private Long parentId; 28 | 29 | private String name; 30 | 31 | private String icon; 32 | 33 | private String routeName; 34 | 35 | private String routePath; 36 | 37 | private String component; 38 | 39 | private Integer sort; 40 | 41 | private Integer visible; 42 | 43 | private String redirect; 44 | 45 | private Integer type; 46 | 47 | } 48 | -------------------------------------------------------------------------------- /macula-cloud-api/macula-cloud-system-api/src/main/java/dev/macula/cloud/system/vo/tenant/TenantPageVO.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.vo.tenant; 2 | 3 | import dev.macula.cloud.system.vo.user.UserVO; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | @Schema(description = "租户视图对象") 11 | @Data 12 | public class TenantPageVO implements Serializable { 13 | 14 | @Schema(description = "租户ID") 15 | private Long id; 16 | 17 | @Schema(description = "租户名称") 18 | private String name; 19 | 20 | @Schema(description = "租户编码") 21 | private String code; 22 | 23 | @Schema(description = "负责人") 24 | private List supervisor; 25 | 26 | @Schema(description = "描述") 27 | private String description; 28 | } 29 | -------------------------------------------------------------------------------- /macula-cloud-gateway/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-gateway/Dockerfile -------------------------------------------------------------------------------- /macula-cloud-gateway/README.md: -------------------------------------------------------------------------------- 1 | # Macula Cloud Gateway 网关中心 2 | 3 | 平台对外统一入口,提供统一认证、鉴权、接口加解密等服务 4 | 5 | ## 加解密服务 6 | 7 | CryptoLocaleServiceImpl是本地加解密实现,如果要接入密钥服务器需要修改 -------------------------------------------------------------------------------- /macula-cloud-gateway/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9000 3 | 4 | spring: 5 | profiles: 6 | active: @profile.active@ 7 | application: 8 | name: macula-cloud-gateway 9 | cloud: 10 | nacos: 11 | username: ${nacos.username} 12 | password: ${nacos.password} 13 | config: 14 | server-addr: ${nacos.config.server-addr} 15 | namespace: ${nacos.config.namespace} 16 | # group: 17 | refresh-enabled: true 18 | file-extension: yml 19 | 20 | # 和环境有关的配置信息,不同环境覆盖此处的配置 21 | nacos: 22 | username: nacos 23 | password: nacos 24 | config: 25 | server-addr: 127.0.0.1:8848 26 | namespace: MACULA5 27 | 28 | --- 29 | spring: 30 | config: 31 | activate: 32 | on-profile: dev 33 | nacos: 34 | username: maculav5 35 | #password: 请通过启动命令赋予密码 36 | config: 37 | server-addr: 10.94.108.55:8848 38 | namespace: MACULA5 39 | -------------------------------------------------------------------------------- /macula-cloud-gateway/src/main/resources/jwk/jose.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-gateway/src/main/resources/jwk/jose.jks -------------------------------------------------------------------------------- /macula-cloud-iam/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/Dockerfile -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/MaculaIamApplication.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.iam; 19 | 20 | import org.springframework.boot.SpringApplication; 21 | import org.springframework.boot.autoconfigure.SpringBootApplication; 22 | 23 | /** 24 | * {@code dev.macula.cloud.iam.MaculaIamApplication} IAM启动类 25 | * 26 | * @author rain 27 | * @since 2023/3/11 22:22 28 | */ 29 | @SpringBootApplication 30 | public class MaculaIamApplication { 31 | public static void main(String[] args) { 32 | SpringApplication.run(MaculaIamApplication.class, args); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/authentication/captcha/CaptchaService.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.authentication.captcha; 2 | 3 | /** 4 | * @author n1 5 | */ 6 | public interface CaptchaService { 7 | 8 | /** 9 | * verify captcha 10 | * 11 | * @param phone phone 12 | * @param rawCode rawCode 13 | * @return isVerified 14 | */ 15 | boolean verifyCaptcha(String phone, String rawCode); 16 | } 17 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/authentication/captcha/CaptchaUserDetailsService.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.authentication.captcha; 2 | 3 | import org.springframework.security.core.userdetails.UserDetails; 4 | import org.springframework.security.core.userdetails.UsernameNotFoundException; 5 | 6 | /** 7 | * @author felord 8 | */ 9 | public interface CaptchaUserDetailsService { 10 | /** 11 | * load user by phone 12 | * 13 | * @param phone phone 14 | * @return userDetails 15 | * @throws UsernameNotFoundException not found user 16 | */ 17 | UserDetails loadUserByPhone(String phone) throws UsernameNotFoundException; 18 | } 19 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/authentication/weapp/WeappClient.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.authentication.weapp; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author felord.cn 7 | * @since 1.0.8.RELEASE 8 | */ 9 | @Data 10 | public class WeappClient { 11 | private String clientId; 12 | private String appId; 13 | private String secret; 14 | } 15 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/authentication/weapp/WeappClientService.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.authentication.weapp; 2 | 3 | /** 4 | * The interface Mini app client service. 5 | * 6 | * @author felord.cn 7 | * @since 1.0.8.RELEASE 8 | */ 9 | @FunctionalInterface 10 | public interface WeappClientService { 11 | /** 12 | * Get mini app client. 13 | * 14 | * @param clientId the client id 15 | * @return {@link WeappClient} 16 | */ 17 | WeappClient get(String clientId); 18 | } 19 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/authentication/weapp/WeappRequest.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.authentication.weapp; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author n1 7 | * @since 2021/6/25 11:19 8 | */ 9 | @Data 10 | public class WeappRequest { 11 | private String clientId; 12 | private String openId; 13 | private String unionId; 14 | private String iv; 15 | private String encryptedData; 16 | } 17 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/authentication/weapp/WeappSessionKeyCache.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.authentication.weapp; 2 | 3 | /** 4 | * 缓存sessionKey 5 | * 6 | * @author felord.cn 7 | * @since 1.0.8.RELEASE 8 | */ 9 | public interface WeappSessionKeyCache { 10 | 11 | /** 12 | * Put sessionKey. 13 | * 14 | * @param cacheKey {@code clientId::openId} 15 | * @param sessionKey the session key 16 | */ 17 | void put(String cacheKey, String sessionKey); 18 | 19 | /** 20 | * Get sessionKey. 21 | * 22 | * @param cacheKey {@code clientId::openId} 23 | * @return sessionKey 24 | */ 25 | String get(String cacheKey); 26 | } 27 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/authentication/weapp/WeappUserDetailsService.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.authentication.weapp; 2 | 3 | import org.springframework.security.core.userdetails.UserDetails; 4 | 5 | /** 6 | * The interface Channel user details service. 7 | * 8 | * @author felord.cn 9 | * @since 1.0.8.RELEASE 10 | */ 11 | public interface WeappUserDetailsService { 12 | 13 | /** 14 | * 小程序在微信登录成功后发起后端登录用来注册的方法 15 | * 16 | * @param request the request 17 | * @return the user details 18 | */ 19 | UserDetails register(WeappRequest request); 20 | 21 | /** 22 | * openid登录 23 | *

24 | * clientId和openId决定唯一性 25 | * 26 | * @param clientId the client id 27 | * @param openId the open id 28 | * @return the user details 29 | */ 30 | UserDetails loadByOpenId(String clientId, String openId); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/config/ProtocolCasConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.iam.config; 19 | 20 | import org.springframework.context.annotation.Configuration; 21 | 22 | /** 23 | * {@code ProtocolCasConfiguration} 基于CAS协议的配置 24 | * 25 | * @author rain 26 | * @since 2023/3/27 15:54 27 | */ 28 | @Configuration(proxyBeanMethods = false) 29 | public class ProtocolCasConfiguration { 30 | } 31 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/config/ProtocolSaml2Configuration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.iam.config; 19 | 20 | import org.springframework.context.annotation.Configuration; 21 | 22 | /** 23 | * {@code ProtocolSaml2Configuration} 基于SAML2协议的配置 24 | * 25 | * @author rain 26 | * @since 2023/3/27 15:55 27 | */ 28 | @Configuration(proxyBeanMethods = false) 29 | public class ProtocolSaml2Configuration { 30 | } 31 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/handler/JsonAccessDeniedHandler.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.handler; 2 | 3 | import dev.macula.boot.result.Result; 4 | import org.springframework.http.HttpStatus; 5 | import org.springframework.security.access.AccessDeniedException; 6 | import org.springframework.security.web.access.AccessDeniedHandler; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | import javax.servlet.http.HttpServletResponse; 10 | import java.io.IOException; 11 | 12 | /** 13 | * 访问被拒绝时的处理逻辑,JSON格式返回 14 | * 15 | * @author n1 16 | * @see AccessDeniedException 17 | * @since 2021 /3/26 14:39 18 | */ 19 | public class JsonAccessDeniedHandler extends ResponseWriter implements AccessDeniedHandler { 20 | @Override 21 | public void handle(HttpServletRequest request, HttpServletResponse response, 22 | AccessDeniedException accessDeniedException) throws IOException { 23 | this.write(request, response); 24 | } 25 | 26 | @Override 27 | protected Result body(HttpServletRequest request) { 28 | return Result.failed(String.valueOf(HttpStatus.FORBIDDEN.value()), "禁止访问", 29 | "{\"uri\": \"" + request.getRequestURI() + "\"}"); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/jackson2/CaptchaAuthenticationTokenMixin.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.jackson2; 2 | 3 | import com.fasterxml.jackson.annotation.JsonAutoDetect; 4 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 5 | import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 6 | 7 | /** 8 | * @author felord.cn 9 | * @since 1.0.0 10 | */ 11 | @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "@class") 12 | @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, 13 | isGetterVisibility = JsonAutoDetect.Visibility.NONE) 14 | @JsonDeserialize(using = CaptchaAuthenticationTokenDeserializer.class) 15 | public abstract class CaptchaAuthenticationTokenMixin { 16 | } 17 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/jackson2/MaculaIamJackson2Module.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.jackson2; 2 | 3 | import com.fasterxml.jackson.core.Version; 4 | import com.fasterxml.jackson.databind.module.SimpleModule; 5 | import dev.macula.cloud.iam.authentication.captcha.CaptchaAuthenticationToken; 6 | import dev.macula.cloud.iam.authentication.weapp.WeappAuthenticationToken; 7 | import org.springframework.security.jackson2.SecurityJackson2Modules; 8 | 9 | /** 10 | * @author felord.cn 11 | * @since 1.0.0 12 | */ 13 | public class MaculaIamJackson2Module extends SimpleModule { 14 | 15 | public MaculaIamJackson2Module() { 16 | super(MaculaIamJackson2Module.class.getName(), new Version(1, 0, 0, null, null, null)); 17 | } 18 | 19 | @Override 20 | public void setupModule(SetupContext context) { 21 | SecurityJackson2Modules.enableDefaultTyping(context.getOwner()); 22 | context.setMixInAnnotations(CaptchaAuthenticationToken.class, CaptchaAuthenticationTokenMixin.class); 23 | context.setMixInAnnotations(WeappAuthenticationToken.class, WeappAuthenticationTokenMixin.class); 24 | context.setMixInAnnotations(Long.class, LongMixin.class); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/jackson2/WeappAuthenticationTokenMixin.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.iam.jackson2; 2 | 3 | import com.fasterxml.jackson.annotation.JsonAutoDetect; 4 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 5 | import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 6 | 7 | /** 8 | * @author felord.cn 9 | * @since 1.0.0 10 | */ 11 | @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "@class") 12 | @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, 13 | isGetterVisibility = JsonAutoDetect.Visibility.NONE) 14 | @JsonDeserialize(using = WeappAuthenticationTokenDeserializer.class) 15 | public abstract class WeappAuthenticationTokenMixin { 16 | } 17 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/mapper/SysOAuth2ClientMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.iam.mapper; 19 | 20 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 21 | import dev.macula.cloud.iam.pojo.entity.SysOAuth2Client; 22 | import org.apache.ibatis.annotations.Mapper; 23 | 24 | /** 25 | * {@code SysOAuth2ClientMapper} 客户端Mapper 26 | * 27 | * @author rain 28 | * @since 2023/4/11 19:41 29 | */ 30 | @Mapper 31 | public interface SysOAuth2ClientMapper extends BaseMapper { 32 | 33 | } 34 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/pojo/entity/SysRole.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.iam.pojo.entity; 19 | 20 | import dev.macula.boot.starter.mp.entity.BaseEntity; 21 | import io.swagger.v3.oas.annotations.media.Schema; 22 | import lombok.Data; 23 | 24 | @Data 25 | public class SysRole extends BaseEntity { 26 | 27 | private String name; 28 | 29 | @Schema(description = "角色编码") 30 | private String code; 31 | } 32 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/protocol/oauth2/grant/README.md: -------------------------------------------------------------------------------- 1 | # 该包是为了兼容原来扩展的grant type,但OAuth2.1已经不建议使用,未来会移除 -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/protocol/oauth2/grant/base/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * 自定义认证模式接入的抽象实现 20 | */ 21 | package dev.macula.cloud.iam.protocol.oauth2.grant.base; 22 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/protocol/oauth2/grant/password/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * 密码模式 20 | */ 21 | package dev.macula.cloud.iam.protocol.oauth2.grant.password; 22 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/protocol/oauth2/grant/sms/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * 短信模式 20 | */ 21 | package dev.macula.cloud.iam.protocol.oauth2.grant.sms; 22 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/service/support/SysOAuth2ClientService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.iam.service.support; 19 | 20 | import dev.macula.cloud.iam.pojo.entity.SysOAuth2Client; 21 | 22 | /** 23 | * {@code SysOauth2ClientService} 获取Oauth2Client 24 | * 25 | * @author rain 26 | * @since 2023/4/10 19:44 27 | */ 28 | public interface SysOAuth2ClientService { 29 | SysOAuth2Client getClientByClientId(String clientId); 30 | } 31 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/service/userdetails/CaptchaServiceImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.iam.service.userdetails; 19 | 20 | import dev.macula.cloud.iam.authentication.captcha.CaptchaService; 21 | import org.springframework.stereotype.Component; 22 | 23 | /** 24 | * {@code CaptchaServiceImpl} 手机号验证服务 25 | * 26 | * @author rain 27 | * @since 2023/4/12 19:34 28 | */ 29 | public class CaptchaServiceImpl implements CaptchaService { 30 | @Override 31 | public boolean verifyCaptcha(String phone, String rawCode) { 32 | // TODO 手机号验证 33 | return true; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/java/dev/macula/cloud/iam/service/userdetails/WeappClientServiceImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.iam.service.userdetails; 19 | 20 | import dev.macula.cloud.iam.authentication.weapp.WeappClient; 21 | import dev.macula.cloud.iam.authentication.weapp.WeappClientService; 22 | 23 | /** 24 | * {@code WeappClientServiceImpl} 获取微信Client配置信息 25 | * 26 | * @author rain 27 | * @since 2023/4/12 19:49 28 | */ 29 | public class WeappClientServiceImpl implements WeappClientService { 30 | @Override 31 | public WeappClient get(String clientId) { 32 | // TODO 获取微信CLIENT信息 33 | return null; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9010 3 | 4 | spring: 5 | profiles: 6 | active: @profile.active@ 7 | application: 8 | name: macula-cloud-iam 9 | cloud: 10 | nacos: 11 | username: ${nacos.username} 12 | password: ${nacos.password} 13 | config: 14 | server-addr: ${nacos.config.server-addr} 15 | namespace: ${nacos.config.namespace} 16 | # group: 17 | refresh-enabled: true 18 | file-extension: yml 19 | 20 | # 和环境有关的配置信息,不同环境覆盖此处的配置 21 | nacos: 22 | username: nacos 23 | password: nacos 24 | config: 25 | server-addr: 127.0.0.1:8848 26 | namespace: MACULA5 27 | 28 | --- 29 | spring: 30 | config: 31 | activate: 32 | on-profile: dev 33 | nacos: 34 | username: maculav5 35 | #password: 请通过启动命令赋予密码 36 | config: 37 | server-addr: 10.94.108.55:8848 38 | namespace: MACULA5 -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/jwk/jose.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/jwk/jose.jks -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/css/code/JetBrainsMono-Medium-3.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/css/code/JetBrainsMono-Medium-3.ttf -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/css/code/gruvbox-dark.min.css: -------------------------------------------------------------------------------- 1 | @font-face {font-family: JetBrainsMono;src: url("JetBrainsMono-Medium-3.ttf");}.hljs{display:block;overflow-x:auto;padding:.5em;background:#282828}.hljs,.hljs-subst{color:#ebdbb2}.hljs-deletion,.hljs-formula,.hljs-keyword,.hljs-link,.hljs-selector-tag{color:#fb4934}.hljs-built_in,.hljs-emphasis,.hljs-name,.hljs-quote,.hljs-strong,.hljs-title,.hljs-variable{color:#83a598}.hljs-attr,.hljs-params,.hljs-template-tag,.hljs-type{color:#fabd2f}.hljs-builtin-name,.hljs-doctag,.hljs-literal,.hljs-number{color:#8f3f71}.hljs-code,.hljs-meta,.hljs-regexp,.hljs-selector-id,.hljs-template-variable{color:#fe8019}.hljs-addition,.hljs-meta-string,.hljs-section,.hljs-selector-attr,.hljs-selector-class,.hljs-string,.hljs-symbol{color:#96ceb4}.hljs-attribute,.hljs-bullet,.hljs-class,.hljs-function,.hljs-function .hljs-keyword,.hljs-meta-keyword,.hljs-selector-pseudo,.hljs-tag{color:#8ec07c}.hljs-comment{color:#928374}.hljs-link_label,.hljs-literal,.hljs-number{color:#d3869b}.hljs-comment,.hljs-emphasis{font-style:italic}.hljs-section,.hljs-strong,.hljs-tag{font-weight:700} -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/css/other/generate.css: -------------------------------------------------------------------------------- 1 | layui-table-body, .layui-table-box, .layui-table-cell { 2 | overflow: visible; 3 | } 4 | 5 | .layui-form-select dl { 6 | z-index: 9999; 7 | } 8 | 9 | td .layui-table-cell .layui-form-select, td .layui-table-cell > input.layui-input { 10 | margin-top: -2px; 11 | margin-left: -10px; 12 | margin-right: -15px; 13 | } 14 | 15 | .layui-form-checkbox i { 16 | border-left: 1px solid #d2d2d2; 17 | } 18 | 19 | .layui-input { 20 | height: 30px; 21 | line-height: 30px; 22 | } 23 | 24 | .layui-input[type=text]:focus { 25 | border-color: #5FB878 !important 26 | } 27 | 28 | .layui-form-item .layui-input[readonly] { 29 | background-color: whitesmoke; 30 | opacity: 1; 31 | } 32 | 33 | .menuTree { 34 | max-height: 300px; 35 | display: none; 36 | position: absolute; 37 | border-top: none; 38 | } -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/css/other/result.css: -------------------------------------------------------------------------------- 1 | .result { 2 | text-align: center; 3 | 4 | } 5 | 6 | .result .success svg { 7 | color: #32C682; 8 | text-align: center; 9 | margin-top: 40px; 10 | 11 | } 12 | 13 | .result .error svg { 14 | color: #f56c6c; 15 | text-align: center; 16 | margin-top: 40px; 17 | 18 | } 19 | 20 | .result .title { 21 | margin-top: 25px; 22 | 23 | } 24 | 25 | .result .desc { 26 | margin-top: 25px; 27 | width: 60%; 28 | margin-left: 20%; 29 | color: rgba(0, 0, 0, .45); 30 | } 31 | 32 | .result .content { 33 | margin-top: 20px; 34 | width: 80%; 35 | border-radius: 10px; 36 | background-color: whitesmoke; 37 | height: 200px; 38 | margin-left: 10%; 39 | } 40 | 41 | .result .action { 42 | padding-top: 10px; 43 | border-top: 1px whitesmoke solid; 44 | margin-top: 25px; 45 | } 46 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/act.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/act.jpg -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/admin.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/avatar.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/dongtaima.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/dongtaima.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/login-bg-15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/login-bg-15.jpg -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/logo.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/notice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/notice.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/pass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/pass.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/shouji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/shouji.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/admin/images/yanzhengma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/admin/images/yanzhengma.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/layui/font/iconfont.eot -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/layui/font/iconfont.woff -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/layui/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/layui/font/iconfont.woff2 -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/code.css: -------------------------------------------------------------------------------- 1 | .layui-colla-content { 2 | padding: 0px; 3 | } 4 | 5 | .layui-code-view { 6 | margin: 0px !important; 7 | } 8 | 9 | .layui-code-h3 { 10 | display: none !important; 11 | } -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/dtree/font/dtreefont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/pear/css/module/dtree/font/dtreefont.eot -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/dtree/font/dtreefont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/pear/css/module/dtree/font/dtreefont.ttf -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/dtree/font/dtreefont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/pear/css/module/dtree/font/dtreefont.woff -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/iconPicker.css: -------------------------------------------------------------------------------- 1 | .layui-iconpicker .layui-anim { 2 | width: 300px !important; 3 | } -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/label.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/pear/css/module/label.css -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/layer.css: -------------------------------------------------------------------------------- 1 | .layui-layer-msg { 2 | border-color: transparent !important; 3 | box-shadow: 2px 0 6px rgb(0 21 41 / 0.05) !important; 4 | } -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/link.css: -------------------------------------------------------------------------------- 1 | .pear-link { 2 | font-size: 15px !important; 3 | } 4 | 5 | .pear-link.pear-link-primary { 6 | color: #5FB878; 7 | } 8 | 9 | .pear-link.pear-link-success { 10 | color: #5FB878; 11 | } 12 | 13 | .pear-link .pear-link-warming { 14 | 15 | 16 | } 17 | 18 | .pear-link .pear-link-danger { 19 | 20 | } -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/topBar.css: -------------------------------------------------------------------------------- 1 | .layui-fixbar li { 2 | border-radius: 4px; 3 | background-color: #5FB878; 4 | color: white; 5 | } 6 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/module/treetable.css: -------------------------------------------------------------------------------- 1 | .treeTable-icon i:last-child { 2 | display: none !important; 3 | } 4 | 5 | .treeTable-empty { 6 | margin-left: -3px; 7 | } 8 | 9 | .treeTable-empty { 10 | width: 20px; 11 | display: inline-block; 12 | } 13 | 14 | .treeTable-icon { 15 | cursor: pointer; 16 | } 17 | 18 | .treeTable-icon .layui-icon-triangle-d:before { 19 | content: "\e623"; 20 | } 21 | 22 | .treeTable-icon.open .layui-icon-triangle-d:before { 23 | content: "\e625"; 24 | background-color: transparent; 25 | } 26 | 27 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/css/pear.css: -------------------------------------------------------------------------------- 1 | @import url("../../layui/css/layui.css"); 2 | @import url("../font/iconfont.css"); 3 | 4 | @import url("module/dtree/font/dtreefont.css"); 5 | @import url("module/dtree/dtree.css"); 6 | @import url("module/iconPicker.css"); 7 | @import url("module/treetable.css"); 8 | @import url("module/message.css"); 9 | @import url("module/cropper.css"); 10 | @import url("module/loading.css"); 11 | @import url("module/topBar.css"); 12 | @import url("module/select.css"); 13 | @import url("module/layout.css"); 14 | @import url("module/notice.css"); 15 | @import url("module/button.css"); 16 | @import url("module/table.css"); 17 | @import url("module/frame.css"); 18 | @import url("module/layer.css"); 19 | @import url("module/toast.css"); 20 | @import url("module/menu.css"); 21 | @import url("module/form.css"); 22 | @import url("module/code.css"); 23 | @import url("module/link.css"); 24 | @import url("module/step.css"); 25 | @import url("module/card.css"); 26 | @import url("module/tab.css"); 27 | @import url("module/tag.css"); 28 | 29 | .layui-form-required:before { 30 | content: "*"; 31 | display: inline-block; 32 | font-family: SimSun; 33 | margin-right: 4px; 34 | font-size: 14px; 35 | line-height: 1; 36 | color: #ed4014 37 | } -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/pear/font/iconfont.ttf -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/pear/font/iconfont.woff -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/pear/font/iconfont.woff2 -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/convert.js: -------------------------------------------------------------------------------- 1 | layui.define(['jquery', 'element'], function (exports) { 2 | "use strict"; 3 | 4 | /** 5 | * 类 型 转 换 工 具 类 6 | * */ 7 | var MOD_NAME = 'convert', 8 | $ = layui.jquery, 9 | element = layui.element; 10 | 11 | var convert = new function () { 12 | 13 | // image 转 base64 14 | this.imageToBase64 = function (img) { 15 | var canvas = document.createElement("canvas"); 16 | canvas.width = img.width; 17 | canvas.height = img.height; 18 | var ctx = canvas.getContext("2d"); 19 | ctx.drawImage(img, 0, 0, img.width, img.height); 20 | var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase(); 21 | var dataURL = canvas.toDataURL("image/" + ext); 22 | return dataURL; 23 | } 24 | 25 | } 26 | exports(MOD_NAME, convert); 27 | }); 28 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/document.js: -------------------------------------------------------------------------------- 1 | layui.define(['jquery', 'element'], function (exports) { 2 | "use strict"; 3 | 4 | var MOD_NAME = 'document'; 5 | 6 | var document = function (opt) { 7 | this.option = opt; 8 | }; 9 | 10 | exports(MOD_NAME, new document()); 11 | }) 12 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/langs/readme.md: -------------------------------------------------------------------------------- 1 | This is where language files should be placed. 2 | 3 | Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ 4 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/plugins/code/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.2 (2020-12-08) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(o){var e=o.getContent({source_view:!0});o.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:e},onSubmit:function(e){var t,n;t=o,n=e.getData().code,t.focus(),t.undoManager.transact(function(){t.setContent(n)}),t.selection.setCursorLocation(),t.nodeChanged(),e.close()}})};e.add("code",function(e){var t,n;return(t=e).addCommand("mceCodeEditor",function(){o(t)}),(n=e).ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:function(){return o(n)}}),n.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:function(){return o(n)}}),{}})}(); -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.2 (2020-12-08) 8 | */ 9 | (function () { 10 | 'use strict'; 11 | 12 | var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); 13 | 14 | function Plugin() { 15 | global.add('colorpicker', function () { 16 | console.warn('Color picker plugin is now built in to the core editor, please remove it from your editor configuration'); 17 | }); 18 | } 19 | 20 | Plugin(); 21 | 22 | }()); 23 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.2 (2020-12-08) 8 | */ 9 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("colorpicker",function(){console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")})}(); -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.2 (2020-12-08) 8 | */ 9 | (function () { 10 | 'use strict'; 11 | 12 | var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); 13 | 14 | function Plugin() { 15 | global.add('contextmenu', function () { 16 | console.warn('Context menu plugin is now built in to the core editor, please remove it from your editor configuration'); 17 | }); 18 | } 19 | 20 | Plugin(); 21 | 22 | }()); 23 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.2 (2020-12-08) 8 | */ 9 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("contextmenu",function(){console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")})}(); -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.2 (2020-12-08) 8 | */ 9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");n.add("hr",function(n){var o,t;(o=n).addCommand("InsertHorizontalRule",function(){o.execCommand("mceInsertContent",!1,"


")}),(t=n).ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}}),t.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}})})}(); -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/plugins/print/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.2 (2020-12-08) 8 | */ 9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.Env");n.add("print",function(n){var t,i;(t=n).addCommand("mcePrint",function(){e.browser.isIE()?t.getDoc().execCommand("print",!1,null):t.getWin().print()}),(i=n).ui.registry.addButton("print",{icon:"print",tooltip:"Print",onAction:function(){return i.execCommand("mcePrint")}}),i.ui.registry.addMenuItem("print",{text:"Print...",icon:"print",onAction:function(){return i.execCommand("mcePrint")}}),n.addShortcut("Meta+P","","mcePrint")})}(); -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/plugins/textcolor/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.2 (2020-12-08) 8 | */ 9 | (function () { 10 | 'use strict'; 11 | 12 | var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); 13 | 14 | function Plugin() { 15 | global.add('textcolor', function () { 16 | console.warn('Text color plugin is now built in to the core editor, please remove it from your editor configuration'); 17 | }); 18 | } 19 | 20 | Plugin(); 21 | 22 | }()); 23 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/plugins/textcolor/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.2 (2020-12-08) 8 | */ 9 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("textcolor",function(){console.warn("Text color plugin is now built in to the core editor, please remove it from your editor configuration")})}(); -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.mobile.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection { 8 | /* Note: this file is used inside the content, so isn't part of theming */ 9 | background-color: green; 10 | display: inline-block; 11 | opacity: 0.5; 12 | position: absolute; 13 | } 14 | 15 | body { 16 | -webkit-text-size-adjust: none; 17 | } 18 | 19 | body img { 20 | /* this is related to the content margin */ 21 | max-width: 96vw; 22 | } 23 | 24 | body table img { 25 | max-width: 95%; 26 | } 27 | 28 | body { 29 | font-family: sans-serif; 30 | } 31 | 32 | table { 33 | border-collapse: collapse; 34 | } 35 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.mobile.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse} 8 | /*# sourceMappingURL=content.mobile.min.css.map */ 9 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.mobile.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["ui/dark/content.mobile.css"],"names":[],"mappings":";;;;;;AAMA,yEAEE,iBAAkB,MAClB,QAAS,aACT,QAAS,GACT,SAAU,SAEZ,KACE,yBAA0B,KAE5B,SAEE,UAAW,KAEb,eACE,UAAW,IAEb,KACE,YAAa,WAEf,MACE,gBAAiB","file":"content.mobile.min.css","sourcesContent":["/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n */\n.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection {\n /* Note: this file is used inside the content, so isn't part of theming */\n background-color: green;\n display: inline-block;\n opacity: 0.5;\n position: absolute;\n}\nbody {\n -webkit-text-size-adjust: none;\n}\nbody img {\n /* this is related to the content margin */\n max-width: 96vw;\n}\nbody table img {\n max-width: 95%;\n}\nbody {\n font-family: sans-serif;\n}\ntable {\n border-collapse: collapse;\n}\n"]} -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.shadowdom.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | body.tox-dialog__disable-scroll { 8 | overflow: hidden; 9 | } 10 | 11 | .tox-fullscreen { 12 | border: 0; 13 | height: 100%; 14 | left: 0; 15 | margin: 0; 16 | overflow: hidden; 17 | -ms-scroll-chaining: none; 18 | overscroll-behavior: none; 19 | padding: 0; 20 | position: fixed; 21 | top: 0; 22 | touch-action: pinch-zoom; 23 | width: 100%; 24 | } 25 | 26 | .tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { 27 | display: none; 28 | } 29 | 30 | .tox.tox-tinymce.tox-fullscreen { 31 | z-index: 1200; 32 | } 33 | 34 | .tox-shadowhost.tox-fullscreen { 35 | z-index: 1200; 36 | } 37 | 38 | .tox-fullscreen .tox.tox-tinymce-aux, 39 | .tox-fullscreen ~ .tox.tox-tinymce-aux { 40 | z-index: 1201; 41 | } 42 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;left:0;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;position:fixed;top:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox.tox-tinymce.tox-fullscreen{z-index:1200}.tox-shadowhost.tox-fullscreen{z-index:1200}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} 8 | /*# sourceMappingURL=skin.shadowdom.min.css.map */ 9 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["ui/dark/skin.shadowdom.css"],"names":[],"mappings":";;;;;;AAMA,gCACE,SAAU,OAEZ,gBACE,OAAQ,EACR,OAAQ,KACR,KAAM,EACN,OAAQ,EACR,SAAU,OACV,oBAAqB,KACjB,oBAAqB,KACzB,QAAS,EACT,SAAU,MACV,IAAK,EACL,aAAc,WACd,MAAO,KAET,8DACE,QAAS,KAEX,gCACE,QAAS,KAEX,+BACE,QAAS,KAEX,qCACA,qCACE,QAAS","file":"skin.shadowdom.min.css","sourcesContent":["/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n */\nbody.tox-dialog__disable-scroll {\n overflow: hidden;\n}\n.tox-fullscreen {\n border: 0;\n height: 100%;\n left: 0;\n margin: 0;\n overflow: hidden;\n -ms-scroll-chaining: none;\n overscroll-behavior: none;\n padding: 0;\n position: fixed;\n top: 0;\n touch-action: pinch-zoom;\n width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n display: none;\n}\n.tox.tox-tinymce.tox-fullscreen {\n z-index: 1200;\n}\n.tox-shadowhost.tox-fullscreen {\n z-index: 1200;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n z-index: 1201;\n}\n"]} -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide/content.mobile.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection { 8 | /* Note: this file is used inside the content, so isn't part of theming */ 9 | background-color: green; 10 | display: inline-block; 11 | opacity: 0.5; 12 | position: absolute; 13 | } 14 | 15 | body { 16 | -webkit-text-size-adjust: none; 17 | } 18 | 19 | body img { 20 | /* this is related to the content margin */ 21 | max-width: 96vw; 22 | } 23 | 24 | body table img { 25 | max-width: 95%; 26 | } 27 | 28 | body { 29 | font-family: sans-serif; 30 | } 31 | 32 | table { 33 | border-collapse: collapse; 34 | } 35 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide/content.mobile.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse} 8 | /*# sourceMappingURL=content.mobile.min.css.map */ 9 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide/content.mobile.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["ui/default/content.mobile.css"],"names":[],"mappings":";;;;;;AAMA,yEAEE,iBAAkB,MAClB,QAAS,aACT,QAAS,GACT,SAAU,SAEZ,KACE,yBAA0B,KAE5B,SAEE,UAAW,KAEb,eACE,UAAW,IAEb,KACE,YAAa,WAEf,MACE,gBAAiB","file":"content.mobile.min.css","sourcesContent":["/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n */\n.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection {\n /* Note: this file is used inside the content, so isn't part of theming */\n background-color: green;\n display: inline-block;\n opacity: 0.5;\n position: absolute;\n}\nbody {\n -webkit-text-size-adjust: none;\n}\nbody img {\n /* this is related to the content margin */\n max-width: 96vw;\n}\nbody table img {\n max-width: 95%;\n}\nbody {\n font-family: sans-serif;\n}\ntable {\n border-collapse: collapse;\n}\n"]} -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.shadowdom.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | body.tox-dialog__disable-scroll { 8 | overflow: hidden; 9 | } 10 | 11 | .tox-fullscreen { 12 | border: 0; 13 | height: 100%; 14 | left: 0; 15 | margin: 0; 16 | overflow: hidden; 17 | -ms-scroll-chaining: none; 18 | overscroll-behavior: none; 19 | padding: 0; 20 | position: fixed; 21 | top: 0; 22 | touch-action: pinch-zoom; 23 | width: 100%; 24 | } 25 | 26 | .tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { 27 | display: none; 28 | } 29 | 30 | .tox.tox-tinymce.tox-fullscreen { 31 | z-index: 1200; 32 | } 33 | 34 | .tox-shadowhost.tox-fullscreen { 35 | z-index: 1200; 36 | } 37 | 38 | .tox-fullscreen .tox.tox-tinymce-aux, 39 | .tox-fullscreen ~ .tox.tox-tinymce-aux { 40 | z-index: 1201; 41 | } 42 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.shadowdom.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;left:0;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;position:fixed;top:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox.tox-tinymce.tox-fullscreen{z-index:1200}.tox-shadowhost.tox-fullscreen{z-index:1200}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} 8 | /*# sourceMappingURL=skin.shadowdom.min.css.map */ 9 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.shadowdom.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["ui/default/skin.shadowdom.css"],"names":[],"mappings":";;;;;;AAMA,gCACE,SAAU,OAEZ,gBACE,OAAQ,EACR,OAAQ,KACR,KAAM,EACN,OAAQ,EACR,SAAU,OACV,oBAAqB,KACjB,oBAAqB,KACzB,QAAS,EACT,SAAU,MACV,IAAK,EACL,aAAc,WACd,MAAO,KAET,8DACE,QAAS,KAEX,gCACE,QAAS,KAEX,+BACE,QAAS,KAEX,qCACA,qCACE,QAAS","file":"skin.shadowdom.min.css","sourcesContent":["/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n */\nbody.tox-dialog__disable-scroll {\n overflow: hidden;\n}\n.tox-fullscreen {\n border: 0;\n height: 100%;\n left: 0;\n margin: 0;\n overflow: hidden;\n -ms-scroll-chaining: none;\n overscroll-behavior: none;\n padding: 0;\n position: fixed;\n top: 0;\n touch-action: pinch-zoom;\n width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n display: none;\n}\n.tox.tox-tinymce.tox-fullscreen {\n z-index: 1200;\n}\n.tox-shadowhost.tox-fullscreen {\n z-index: 1200;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n z-index: 1201;\n}\n"]} -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/component/pear/module/topBar.js: -------------------------------------------------------------------------------- 1 | layui.define(['jquery', 'element', 'util'], function (exports) { 2 | "use strict"; 3 | 4 | var MOD_NAME = 'topBar', 5 | $ = layui.jquery, 6 | util = layui.util, 7 | element = layui.element; 8 | 9 | var topBar = new function () { 10 | 11 | util.fixbar({}); 12 | } 13 | exports(MOD_NAME, topBar); 14 | }); -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-iam/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/templates/error/403.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 |
11 |

403

12 |

抱歉,你无权访问该页面

13 | 14 |
15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/templates/error/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 |
11 |

404

12 |

抱歉,你访问的页面不存在或仍在开发中

13 | 14 |
15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/templates/error/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 |
11 |

500

12 |

抱歉,服务器出错了

13 | 14 |
15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/templates/include.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 |
18 | 19 | -------------------------------------------------------------------------------- /macula-cloud-iam/src/main/resources/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 18 | 19 | 20 |
21 |
22 |
23 |

24 |
25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /macula-cloud-rocketmq/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-rocketmq/Dockerfile -------------------------------------------------------------------------------- /macula-cloud-rocketmq/README.md: -------------------------------------------------------------------------------- 1 | # Macula Cloud RocketMQ MQ管理 2 | 3 | TODO 基于RocketMQ 和 RocketMQ Connect的管理端 -------------------------------------------------------------------------------- /macula-cloud-rocketmq/src/main/java/dev/macula/cloud/rocketmq/MaculaRocketMQApplication.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.rocketmq; 19 | 20 | import org.springframework.boot.SpringApplication; 21 | import org.springframework.boot.autoconfigure.SpringBootApplication; 22 | 23 | /** 24 | * {@code MaculaRocketMQApplication} is 启动类 25 | * 26 | * @author rain 27 | * @since 2023/7/18 10:35 28 | */ 29 | @SpringBootApplication 30 | public class MaculaRocketMQApplication { 31 | public static void main(String[] args) { 32 | SpringApplication.run(MaculaRocketMQApplication.class, args); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /macula-cloud-seata/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-seata/Dockerfile -------------------------------------------------------------------------------- /macula-cloud-seata/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-seata/README.md -------------------------------------------------------------------------------- /macula-cloud-seata/src/main/java/dev/macula/cloud/seata/MaculaSeataApplication.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.seata; 19 | 20 | import org.springframework.boot.SpringApplication; 21 | import org.springframework.boot.autoconfigure.SpringBootApplication; 22 | 23 | /** 24 | * {@code MaculaSeataApplication} Seata服务端启动 25 | * 26 | * @author rain 27 | * @since 2023/8/24 15:33 28 | */ 29 | @SpringBootApplication(scanBasePackages = {"io.seata"}) 30 | public class MaculaSeataApplication { 31 | public static void main(String[] args) { 32 | SpringApplication.run(io.seata.server.ServerApplication.class, args); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /macula-cloud-system/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-system/Dockerfile -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/converter/AuditLogConverter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.converter; 19 | 20 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 21 | import dev.macula.cloud.system.pojo.bo.AuditLogBO; 22 | import dev.macula.cloud.system.vo.log.AuditLogVO; 23 | import org.mapstruct.Mapper; 24 | 25 | @Mapper 26 | public interface AuditLogConverter { 27 | 28 | Page bo2Vo(Page bo); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/converter/DeptConverter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.converter; 19 | 20 | import dev.macula.cloud.system.form.DeptForm; 21 | import dev.macula.cloud.system.pojo.entity.SysDept; 22 | import dev.macula.cloud.system.vo.dept.DeptVO; 23 | import org.mapstruct.Mapper; 24 | 25 | /** 26 | * 部门对象转换器 27 | * 28 | * @author haoxr 29 | * @since 2022/7/29 30 | */ 31 | @Mapper 32 | public interface DeptConverter { 33 | 34 | DeptForm entity2Form(SysDept entity); 35 | 36 | DeptVO entity2Vo(SysDept entity); 37 | 38 | SysDept form2Entity(DeptForm deptForm); 39 | 40 | } -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/converter/TenantConverter.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.converter; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import dev.macula.cloud.system.form.TenantForm; 5 | import dev.macula.cloud.system.pojo.bo.TenantBO; 6 | import dev.macula.cloud.system.pojo.entity.SysTenantInfo; 7 | import dev.macula.cloud.system.vo.tenant.TenantPageVO; 8 | import org.mapstruct.InheritInverseConfiguration; 9 | import org.mapstruct.Mapper; 10 | 11 | @Mapper 12 | public interface TenantConverter { 13 | 14 | @InheritInverseConfiguration(name = "entity2Form") 15 | SysTenantInfo form2Entity(TenantForm entity); 16 | 17 | Page bo2Page(Page page); 18 | } 19 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/mapper/SysDictItemMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.mapper; 19 | 20 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 21 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 22 | import dev.macula.cloud.system.pojo.entity.SysDictItem; 23 | import org.apache.ibatis.annotations.Mapper; 24 | 25 | import java.util.List; 26 | 27 | @Mapper 28 | public interface SysDictItemMapper extends BaseMapper { 29 | 30 | List list(Page page, SysDictItem dictItem); 31 | } 32 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/mapper/SysDictTypeMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.mapper; 19 | 20 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 21 | import dev.macula.cloud.system.pojo.entity.SysDictType; 22 | import org.apache.ibatis.annotations.Mapper; 23 | 24 | @Mapper 25 | public interface SysDictTypeMapper extends BaseMapper { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/mapper/SysRolePermissionMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.mapper; 19 | 20 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 21 | import dev.macula.cloud.system.pojo.entity.SysRolePermission; 22 | import org.apache.ibatis.annotations.Mapper; 23 | 24 | import java.util.List; 25 | 26 | @Mapper 27 | public interface SysRolePermissionMapper extends BaseMapper { 28 | 29 | /** 30 | * 获取角色拥有的权限ID集合 31 | * 32 | * @param roleId 角色ID 33 | * @return 权限ID集合 34 | */ 35 | List listPermIdsByRoleId(Long roleId); 36 | } 37 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/mapper/SysTenantInfoMapper.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import dev.macula.cloud.system.pojo.bo.TenantBO; 6 | import dev.macula.cloud.system.pojo.entity.SysTenantInfo; 7 | import dev.macula.cloud.system.query.TenantPageQuery; 8 | import org.apache.ibatis.annotations.Mapper; 9 | 10 | @Mapper 11 | public interface SysTenantInfoMapper extends BaseMapper { 12 | 13 | /** 14 | * 租户分页列表 15 | * 16 | * @param page 分页对象 17 | * @param queryParams 查询条件 18 | * @return 租户列表 19 | */ 20 | Page listTenantPages(Page page, TenantPageQuery queryParams); 21 | } 22 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/mapper/SysTenantUserMapper.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import dev.macula.cloud.system.pojo.entity.SysTenantUser; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 用户租户持久层 9 | */ 10 | @Mapper 11 | public interface SysTenantUserMapper extends BaseMapper { 12 | } 13 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/mapper/SysUserRoleMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.mapper; 19 | 20 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 21 | import dev.macula.cloud.system.pojo.entity.SysUserRole; 22 | import org.apache.ibatis.annotations.Mapper; 23 | 24 | import java.util.List; 25 | 26 | /** 27 | * 用户角色持久层 28 | * 29 | * @author haoxr 30 | * @since 2022/1/15 31 | */ 32 | @Mapper 33 | public interface SysUserRoleMapper extends BaseMapper { 34 | List listRoleIdsByUserIdAndScope(Long userId); 35 | } 36 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/bo/AuditLogBO.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.pojo.bo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonFormat; 4 | import lombok.Data; 5 | 6 | import java.time.LocalDateTime; 7 | 8 | @Data 9 | public class AuditLogBO { 10 | /** 操作IP */ 11 | private String opIp; 12 | 13 | /** 请求路径 */ 14 | private String opUrl; 15 | 16 | /** 操作人 */ 17 | private String opName; 18 | 19 | /** 操作标题 */ 20 | private String opTitle; 21 | 22 | /** 请求方法 */ 23 | private String opMethod; 24 | 25 | /** 请求方式 */ 26 | private String opRequestMethod; 27 | 28 | /** 请求参数 */ 29 | private String opParam; 30 | 31 | /** 操作状态(0-成功; 1-失败) */ 32 | private Integer opStatus; 33 | 34 | /** 错误信息 */ 35 | private String errorMsg; 36 | 37 | /** 响应结果信息 */ 38 | private String jsonResult; 39 | 40 | /** 创建时间 */ 41 | @JsonFormat(pattern = "yyyy-MM-dd") 42 | private LocalDateTime createTime; 43 | 44 | /** 创建人 */ 45 | private String createBy; 46 | } 47 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/bo/TenantBO.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.pojo.bo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonFormat; 4 | import lombok.Data; 5 | 6 | import java.util.Date; 7 | import java.util.List; 8 | 9 | @Data 10 | public class TenantBO { 11 | 12 | private Long id; 13 | 14 | /** 15 | * 租户名称 16 | */ 17 | private String name; 18 | 19 | /** 20 | * 租户编码 21 | */ 22 | private String code; 23 | 24 | /** 25 | * 描述 26 | */ 27 | private String description; 28 | 29 | /** 30 | * 负责人 31 | */ 32 | private List supervisor; 33 | 34 | /** 35 | * 创建时间 36 | */ 37 | @JsonFormat(pattern = "yyyy-MM-dd") 38 | private Date createTime; 39 | } 40 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/bo/TenantUserBO.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.pojo.bo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class TenantUserBO { 7 | private Long id; 8 | private String username; 9 | } 10 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/entity/SysApplication.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.pojo.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import dev.macula.boot.starter.mp.entity.BaseEntity; 5 | import lombok.Data; 6 | 7 | @Data 8 | @TableName("sys_application_tenant") 9 | public class SysApplication extends BaseEntity { 10 | 11 | private String applicationName; 12 | 13 | private String homepage; 14 | 15 | private String code; 16 | 17 | private String sk; 18 | 19 | private String manager; 20 | 21 | private String maintainer; 22 | 23 | private String mobile; 24 | 25 | private String accessPath; 26 | 27 | private boolean useAttrs; 28 | 29 | private String allowedAttrs; 30 | } 31 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/entity/SysDept.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.pojo.entity; 19 | 20 | import dev.macula.boot.starter.mp.entity.BaseEntity; 21 | import lombok.Data; 22 | 23 | @Data 24 | public class SysDept extends BaseEntity { 25 | 26 | private String name; 27 | 28 | private Long parentId; 29 | 30 | private String treePath; 31 | 32 | private Integer sort; 33 | 34 | private Integer status; 35 | 36 | private Integer deleted; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/entity/SysDictType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.pojo.entity; 19 | 20 | import com.baomidou.mybatisplus.annotation.TableName; 21 | import dev.macula.boot.starter.mp.entity.BaseEntity; 22 | import lombok.Data; 23 | 24 | @Data 25 | @TableName("sys_dict_type_tenant") 26 | public class SysDictType extends BaseEntity { 27 | 28 | private String code; 29 | 30 | private String name; 31 | 32 | private Integer status; 33 | 34 | private String remark; 35 | 36 | } 37 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/entity/SysLog.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.pojo.entity; 2 | 3 | import dev.macula.boot.starter.mp.entity.BaseEntity; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class SysLog extends BaseEntity { 8 | 9 | private String opIp; // 操作IP 10 | 11 | private String opUrl; // 请求路径 12 | 13 | private String opName; // 操作人 14 | 15 | private String opTitle; // 操作标题 16 | 17 | private String opMethod; // 请求方法 18 | 19 | private String opRequestMethod; // 请求方式 20 | 21 | private String opParam; // 请求参数 22 | 23 | private Integer opStatus; // 操作状态(0-成功 1-失败) 24 | 25 | private String errorMsg; // 错误信息 26 | 27 | private String jsonResult; // 响应结果信息 28 | 29 | } 30 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/entity/SysRoleMenu.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.pojo.entity; 19 | 20 | import com.baomidou.mybatisplus.annotation.TableName; 21 | import lombok.AllArgsConstructor; 22 | import lombok.Data; 23 | 24 | @Data 25 | @AllArgsConstructor 26 | @TableName("sys_role_menu") 27 | public class SysRoleMenu { 28 | 29 | private Long roleId; 30 | 31 | private Long menuId; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/entity/SysRolePermission.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.pojo.entity; 19 | 20 | import com.baomidou.mybatisplus.annotation.TableName; 21 | import lombok.AllArgsConstructor; 22 | import lombok.Data; 23 | 24 | @Data 25 | @AllArgsConstructor 26 | @TableName("sys_role_permission") 27 | public class SysRolePermission { 28 | private Long roleId; 29 | private Long permissionId; 30 | } 31 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/entity/SysTenantInfo.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.pojo.entity; 2 | 3 | import dev.macula.boot.starter.mp.entity.BaseEntity; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class SysTenantInfo extends BaseEntity { 8 | 9 | private String name; 10 | 11 | private String code; 12 | 13 | private String description; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/entity/SysTenantUser.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.pojo.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class SysTenantUser { 9 | private Long userId; 10 | private Long tenantId; 11 | } 12 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/entity/SysUserRole.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.pojo.entity; 19 | 20 | import lombok.AllArgsConstructor; 21 | import lombok.Data; 22 | import lombok.experimental.Accessors; 23 | 24 | @Data 25 | @Accessors(chain = true) 26 | @AllArgsConstructor 27 | public class SysUserRole { 28 | 29 | private Long userId; 30 | 31 | private Long roleId; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/pojo/lombok.config: -------------------------------------------------------------------------------- 1 | config.stopBubbling=true 2 | lombok.equalsAndHashCode.callSuper=call -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/service/SysLogService.java: -------------------------------------------------------------------------------- 1 | package dev.macula.cloud.system.service; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import dev.macula.cloud.system.pojo.entity.SysLog; 6 | import dev.macula.cloud.system.query.LogPageQuery; 7 | import dev.macula.cloud.system.vo.log.AuditLogVO; 8 | 9 | public interface SysLogService extends IService { 10 | /** 11 | * 获取审计日志列表 12 | * 13 | * @param queryParams 查询参数 14 | * @return 审计列表 15 | */ 16 | Page listUserPages(LogPageQuery queryParams); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/service/SysTenantUserService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.service; 19 | 20 | import com.baomidou.mybatisplus.extension.service.IService; 21 | import dev.macula.cloud.system.pojo.entity.SysTenantUser; 22 | 23 | import java.util.Set; 24 | 25 | public interface SysTenantUserService extends IService { 26 | 27 | /** 28 | * 获取我负责的租户id列表 29 | * 30 | * @return 租户ID列表 31 | */ 32 | Set getMeTenantIds(); 33 | } 34 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/java/dev/macula/cloud/system/service/SysUserRoleService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.system.service; 19 | 20 | import com.baomidou.mybatisplus.extension.service.IService; 21 | import dev.macula.cloud.system.pojo.entity.SysUserRole; 22 | 23 | import java.util.List; 24 | 25 | public interface SysUserRoleService extends IService { 26 | 27 | /** 28 | * 保存用户角色 29 | * 30 | * @param userId 用户ID 31 | * @param roleIds 角色ID集合 32 | */ 33 | void saveUserRoles(Long userId, List roleIds); 34 | } 35 | -------------------------------------------------------------------------------- /macula-cloud-system/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9081 3 | 4 | spring: 5 | profiles: 6 | active: @profile.active@ 7 | application: 8 | name: macula-cloud-system 9 | cloud: 10 | nacos: 11 | username: ${nacos.username} 12 | password: ${nacos.password} 13 | config: 14 | server-addr: ${nacos.config.server-addr} 15 | namespace: ${nacos.config.namespace} 16 | # group: 17 | refresh-enabled: true 18 | file-extension: yml 19 | 20 | # 和环境有关的配置信息,不同环境覆盖此处的配置 21 | nacos: 22 | username: nacos 23 | password: nacos 24 | config: 25 | server-addr: localhost:8848 26 | namespace: MACULA5 27 | 28 | --- 29 | spring: 30 | config: 31 | activate: 32 | on-profile: dev 33 | nacos: 34 | username: maculav5 35 | #password: 请通过启动命令赋予密码 36 | config: 37 | server-addr: 10.94.108.55:8848 38 | namespace: MACULA5 -------------------------------------------------------------------------------- /macula-cloud-task/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-task/Dockerfile -------------------------------------------------------------------------------- /macula-cloud-task/README.md: -------------------------------------------------------------------------------- 1 | ## 概述 2 | 3 | 基于Macula Task的统一调度中心 -------------------------------------------------------------------------------- /macula-cloud-task/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | macula-cloud 8 | dev.macula.cloud 9 | ${revision} 10 | 11 | 12 | macula-cloud-task 13 | 14 | -------------------------------------------------------------------------------- /macula-cloud-tinyid/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-tinyid/Dockerfile -------------------------------------------------------------------------------- /macula-cloud-tinyid/src/main/java/dev/macula/cloud/tinyid/common/Constants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.tinyid.common; 19 | 20 | /** 21 | * @author du_imba 22 | */ 23 | public class Constants { 24 | /** 25 | * 预加载下个号段的百分比 26 | */ 27 | public static final int LOADING_PERCENT = 20; 28 | /** 29 | * 重试次数 30 | */ 31 | public static final int RETRY = 3; 32 | 33 | private Constants() { 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /macula-cloud-tinyid/src/main/java/dev/macula/cloud/tinyid/dao/TinyIdTokenDAO.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.tinyid.dao; 19 | 20 | import dev.macula.cloud.tinyid.dao.entity.TinyIdToken; 21 | 22 | import java.util.List; 23 | 24 | /** 25 | * @author du_imba 26 | */ 27 | public interface TinyIdTokenDAO { 28 | /** 29 | * 查询db中所有的token信息 30 | * 31 | * @return List 32 | */ 33 | List selectAll(); 34 | } 35 | -------------------------------------------------------------------------------- /macula-cloud-tinyid/src/main/java/dev/macula/cloud/tinyid/dao/entity/TinyIdToken.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.tinyid.dao.entity; 19 | 20 | import lombok.Data; 21 | 22 | import java.util.Date; 23 | 24 | /** 25 | * @author du_imba 26 | */ 27 | @Data 28 | public class TinyIdToken { 29 | private Integer id; 30 | 31 | private String token; 32 | 33 | private String bizType; 34 | 35 | private String remark; 36 | 37 | private Date createTime; 38 | 39 | private Date updateTime; 40 | 41 | } -------------------------------------------------------------------------------- /macula-cloud-tinyid/src/main/java/dev/macula/cloud/tinyid/service/TinyIdTokenService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Macula 3 | * macula.dev, China 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package dev.macula.cloud.tinyid.service; 19 | 20 | /** 21 | * @author du_imba 22 | */ 23 | public interface TinyIdTokenService { 24 | /** 25 | * 是否有权限 26 | * 27 | * @param bizType 业务类型 28 | * @param token TOKEN 29 | * @return boolean 权限 30 | */ 31 | boolean canVisit(String bizType, String token); 32 | } 33 | -------------------------------------------------------------------------------- /macula-cloud-tinyid/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | druid: 4 | master: 5 | url: jdbc:mysql://localhost:3306/macula-tinyid?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 6 | username: root 7 | password: 8 | initialSize: 2 9 | maxActive: 20 10 | minIdle: 2 11 | maxWait: 10000 12 | servlet: 13 | encoding: 14 | force: true 15 | context-path: /tinyid 16 | 17 | logging: 18 | level: 19 | root: info 20 | dev.macula.cloud: debug 21 | file: 22 | name: ${user.home}/logs/${spring.application.name}/${spring.application.name}.log -------------------------------------------------------------------------------- /macula-cloud-tinyid/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9082 3 | 4 | spring: 5 | profiles: 6 | active: @profile.active@ 7 | application: 8 | name: macula-cloud-tinyid 9 | cloud: 10 | nacos: 11 | username: ${nacos.username} 12 | password: ${nacos.password} 13 | config: 14 | server-addr: ${nacos.config.server-addr} 15 | namespace: ${nacos.config.namespace} 16 | # group: 17 | refresh-enabled: true 18 | file-extension: yml 19 | nacos: 20 | username: nacos 21 | password: nacos 22 | config: 23 | server-addr: 127.0.0.1:8848 24 | namespace: MACULA5 25 | 26 | --- 27 | spring: 28 | config: 29 | activate: 30 | on-profile: dev 31 | nacos: 32 | username: maculav5 33 | #password: 请通过启动命令赋予密码 34 | config: 35 | server-addr: 10.94.108.55:8848 36 | namespace: MACULA5 -------------------------------------------------------------------------------- /macula-cloud-xxljob/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/Dockerfile -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/MaculaXxlJobAdminApplication.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | /** 8 | * @author xuxueli 2018-10-28 00:38:13 9 | */ 10 | @EnableDiscoveryClient 11 | @SpringBootApplication 12 | public class MaculaXxlJobAdminApplication { 13 | 14 | public static void main(String[] args) { 15 | SpringApplication.run(MaculaXxlJobAdminApplication.class, args); 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.controller.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * 权限限制 10 | * 11 | * @author xuxueli 2015-12-12 18:29:02 12 | */ 13 | @Target(ElementType.METHOD) 14 | @Retention(RetentionPolicy.RUNTIME) 15 | public @interface PermissionLimit { 16 | 17 | /** 18 | * 登录拦截 (默认拦截) 19 | */ 20 | boolean limit() default true; 21 | 22 | /** 23 | * 要求管理员权限 24 | * 25 | * @return 26 | */ 27 | boolean adminuser() default false; 28 | 29 | } -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.controller.interceptor; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | import javax.annotation.Resource; 8 | 9 | /** 10 | * web mvc config 11 | * 12 | * @author xuxueli 2018-04-02 20:48:20 13 | */ 14 | @Configuration 15 | public class WebMvcConfig implements WebMvcConfigurer { 16 | 17 | @Resource 18 | private PermissionInterceptor permissionInterceptor; 19 | @Resource 20 | private CookieInterceptor cookieInterceptor; 21 | 22 | @Override 23 | public void addInterceptors(InterceptorRegistry registry) { 24 | registry.addInterceptor(permissionInterceptor).addPathPatterns("/**"); 25 | registry.addInterceptor(cookieInterceptor).addPathPatterns("/**"); 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/alarm/JobAlarm.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.alarm; 2 | 3 | import com.xxl.job.admin.core.model.XxlJobInfo; 4 | import com.xxl.job.admin.core.model.XxlJobLog; 5 | 6 | /** 7 | * @author xuxueli 2020-01-19 8 | */ 9 | public interface JobAlarm { 10 | 11 | /** 12 | * job alarm 13 | * 14 | * @param info 15 | * @param jobLog 16 | * @return 17 | */ 18 | public boolean doAlarm(XxlJobInfo info, XxlJobLog jobLog); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.exception; 2 | 3 | /** 4 | * @author xuxueli 2019-05-04 23:19:29 5 | */ 6 | public class XxlJobException extends RuntimeException { 7 | 8 | public XxlJobException() { 9 | } 10 | 11 | public XxlJobException(String message) { 12 | super(message); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.model; 2 | 3 | import java.util.Date; 4 | 5 | public class XxlJobLogReport { 6 | 7 | private int id; 8 | 9 | private Date triggerDay; 10 | 11 | private int runningCount; 12 | private int sucCount; 13 | private int failCount; 14 | 15 | public int getId() { 16 | return id; 17 | } 18 | 19 | public void setId(int id) { 20 | this.id = id; 21 | } 22 | 23 | public Date getTriggerDay() { 24 | return triggerDay; 25 | } 26 | 27 | public void setTriggerDay(Date triggerDay) { 28 | this.triggerDay = triggerDay; 29 | } 30 | 31 | public int getRunningCount() { 32 | return runningCount; 33 | } 34 | 35 | public void setRunningCount(int runningCount) { 36 | this.runningCount = runningCount; 37 | } 38 | 39 | public int getSucCount() { 40 | return sucCount; 41 | } 42 | 43 | public void setSucCount(int sucCount) { 44 | this.sucCount = sucCount; 45 | } 46 | 47 | public int getFailCount() { 48 | return failCount; 49 | } 50 | 51 | public void setFailCount(int failCount) { 52 | this.failCount = failCount; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.old;//package com.xxl.job.admin.core.jobbean; 2 | // 3 | //import com.xxl.job.admin.core.thread.JobTriggerPoolHelper; 4 | //import com.xxl.job.admin.core.trigger.TriggerTypeEnum; 5 | //import org.quartz.JobExecutionContext; 6 | //import org.quartz.JobExecutionException; 7 | //import org.quartz.JobKey; 8 | //import org.slf4j.Logger; 9 | //import org.slf4j.LoggerFactory; 10 | //import org.springframework.scheduling.quartz.QuartzJobBean; 11 | // 12 | ///** 13 | // * http job bean 14 | // * “@DisallowConcurrentExecution” disable concurrent, thread size can not be only one, better given more 15 | // * @author xuxueli 2015-12-17 18:20:34 16 | // */ 17 | ////@DisallowConcurrentExecution 18 | //public class RemoteHttpJobBean extends QuartzJobBean { 19 | // private static Logger logger = LoggerFactory.getLogger(RemoteHttpJobBean.class); 20 | // 21 | // @Override 22 | // protected void executeInternal(JobExecutionContext context) 23 | // throws JobExecutionException { 24 | // 25 | // // load jobId 26 | // JobKey jobKey = context.getTrigger().getJobKey(); 27 | // Integer jobId = Integer.valueOf(jobKey.getName()); 28 | // 29 | // 30 | // } 31 | // 32 | //} -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.route; 2 | 3 | import com.xxl.job.core.biz.model.ReturnT; 4 | import com.xxl.job.core.biz.model.TriggerParam; 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * Created by xuxueli on 17/3/10. 12 | */ 13 | public abstract class ExecutorRouter { 14 | protected static Logger logger = LoggerFactory.getLogger(ExecutorRouter.class); 15 | 16 | /** 17 | * route address 18 | * 19 | * @param addressList 20 | * @return ReturnT.content=address 21 | */ 22 | public abstract ReturnT route(TriggerParam triggerParam, List addressList); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.route.strategy; 2 | 3 | import com.xxl.job.admin.core.route.ExecutorRouter; 4 | import com.xxl.job.core.biz.model.ReturnT; 5 | import com.xxl.job.core.biz.model.TriggerParam; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by xuxueli on 17/3/10. 11 | */ 12 | public class ExecutorRouteFirst extends ExecutorRouter { 13 | 14 | @Override 15 | public ReturnT route(TriggerParam triggerParam, List addressList) { 16 | return new ReturnT(addressList.get(0)); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.route.strategy; 2 | 3 | import com.xxl.job.admin.core.route.ExecutorRouter; 4 | import com.xxl.job.core.biz.model.ReturnT; 5 | import com.xxl.job.core.biz.model.TriggerParam; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by xuxueli on 17/3/10. 11 | */ 12 | public class ExecutorRouteLast extends ExecutorRouter { 13 | 14 | @Override 15 | public ReturnT route(TriggerParam triggerParam, List addressList) { 16 | return new ReturnT(addressList.get(addressList.size() - 1)); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.route.strategy; 2 | 3 | import com.xxl.job.admin.core.route.ExecutorRouter; 4 | import com.xxl.job.core.biz.model.ReturnT; 5 | import com.xxl.job.core.biz.model.TriggerParam; 6 | 7 | import java.util.List; 8 | import java.util.Random; 9 | 10 | /** 11 | * Created by xuxueli on 17/3/10. 12 | */ 13 | public class ExecutorRouteRandom extends ExecutorRouter { 14 | 15 | private static Random localRandom = new Random(); 16 | 17 | @Override 18 | public ReturnT route(TriggerParam triggerParam, List addressList) { 19 | String address = addressList.get(localRandom.nextInt(addressList.size())); 20 | return new ReturnT(address); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/scheduler/MisfireStrategyEnum.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.scheduler; 2 | 3 | import com.xxl.job.admin.core.util.I18nUtil; 4 | 5 | /** 6 | * @author xuxueli 2020-10-29 21:11:23 7 | */ 8 | public enum MisfireStrategyEnum { 9 | 10 | /** 11 | * do nothing 12 | */ 13 | DO_NOTHING(I18nUtil.getString("misfire_strategy_do_nothing")), 14 | 15 | /** 16 | * fire once now 17 | */ 18 | FIRE_ONCE_NOW(I18nUtil.getString("misfire_strategy_fire_once_now")); 19 | 20 | private String title; 21 | 22 | MisfireStrategyEnum(String title) { 23 | this.title = title; 24 | } 25 | 26 | public String getTitle() { 27 | return title; 28 | } 29 | 30 | public static MisfireStrategyEnum match(String name, MisfireStrategyEnum defaultItem) { 31 | for (MisfireStrategyEnum item : MisfireStrategyEnum.values()) { 32 | if (item.name().equals(name)) { 33 | return item; 34 | } 35 | } 36 | return defaultItem; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/scheduler/ScheduleTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.scheduler; 2 | 3 | import com.xxl.job.admin.core.util.I18nUtil; 4 | 5 | /** 6 | * @author xuxueli 2020-10-29 21:11:23 7 | */ 8 | public enum ScheduleTypeEnum { 9 | 10 | NONE(I18nUtil.getString("schedule_type_none")), 11 | 12 | /** 13 | * schedule by cron 14 | */ 15 | CRON(I18nUtil.getString("schedule_type_cron")), 16 | 17 | /** 18 | * schedule by fixed rate (in seconds) 19 | */ 20 | FIX_RATE(I18nUtil.getString("schedule_type_fix_rate")), 21 | 22 | /** 23 | * schedule by fix delay (in seconds), after the last time 24 | */ 25 | /*FIX_DELAY(I18nUtil.getString("schedule_type_fix_delay"))*/; 26 | 27 | private String title; 28 | 29 | ScheduleTypeEnum(String title) { 30 | this.title = title; 31 | } 32 | 33 | public String getTitle() { 34 | return title; 35 | } 36 | 37 | public static ScheduleTypeEnum match(String name, ScheduleTypeEnum defaultItem) { 38 | for (ScheduleTypeEnum item : ScheduleTypeEnum.values()) { 39 | if (item.name().equals(name)) { 40 | return item; 41 | } 42 | } 43 | return defaultItem; 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.trigger; 2 | 3 | import com.xxl.job.admin.core.util.I18nUtil; 4 | 5 | /** 6 | * trigger type enum 7 | * 8 | * @author xuxueli 2018-09-16 04:56:41 9 | */ 10 | public enum TriggerTypeEnum { 11 | 12 | MANUAL(I18nUtil.getString("jobconf_trigger_type_manual")), CRON(I18nUtil.getString("jobconf_trigger_type_cron")), 13 | RETRY(I18nUtil.getString("jobconf_trigger_type_retry")), PARENT(I18nUtil.getString("jobconf_trigger_type_parent")), 14 | API(I18nUtil.getString("jobconf_trigger_type_api")), MISFIRE(I18nUtil.getString("jobconf_trigger_type_misfire")); 15 | 16 | private TriggerTypeEnum(String title) { 17 | this.title = title; 18 | } 19 | 20 | private String title; 21 | 22 | public String getTitle() { 23 | return title; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.util; 2 | 3 | import freemarker.ext.beans.BeansWrapper; 4 | import freemarker.ext.beans.BeansWrapperBuilder; 5 | import freemarker.template.Configuration; 6 | import freemarker.template.TemplateHashModel; 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | 10 | /** 11 | * ftl util 12 | * 13 | * @author xuxueli 2018-01-17 20:37:48 14 | */ 15 | public class FtlUtil { 16 | private static Logger logger = LoggerFactory.getLogger(FtlUtil.class); 17 | 18 | private static BeansWrapper wrapper = 19 | new BeansWrapperBuilder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS).build(); 20 | //BeansWrapper.getDefaultInstance(); 21 | 22 | public static TemplateHashModel generateStaticModel(String packageName) { 23 | try { 24 | TemplateHashModel staticModels = wrapper.getStaticModels(); 25 | TemplateHashModel fileStatics = (TemplateHashModel)staticModels.get(packageName); 26 | return fileStatics; 27 | } catch (Exception e) { 28 | logger.error(e.getMessage(), e); 29 | } 30 | return null; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.dao; 2 | 3 | import com.xxl.job.admin.core.model.XxlJobGroup; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by xuxueli on 16/9/30. 11 | */ 12 | @Mapper 13 | public interface XxlJobGroupDao { 14 | 15 | public List findAll(); 16 | 17 | public List findByAddressType(@Param("addressType") int addressType); 18 | 19 | public int save(XxlJobGroup xxlJobGroup); 20 | 21 | public int update(XxlJobGroup xxlJobGroup); 22 | 23 | public int remove(@Param("id") int id); 24 | 25 | public XxlJobGroup load(@Param("id") int id); 26 | 27 | public List pageList(@Param("offset") int offset, @Param("pagesize") int pagesize, 28 | @Param("appname") String appname, @Param("title") String title); 29 | 30 | public int pageListCount(@Param("offset") int offset, @Param("pagesize") int pagesize, 31 | @Param("appname") String appname, @Param("title") String title); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.dao; 2 | 3 | import com.xxl.job.admin.core.model.XxlJobLogGlue; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * job log for glue 11 | * 12 | * @author xuxueli 2016-5-19 18:04:56 13 | */ 14 | @Mapper 15 | public interface XxlJobLogGlueDao { 16 | 17 | public int save(XxlJobLogGlue xxlJobLogGlue); 18 | 19 | public List findByJobId(@Param("jobId") int jobId); 20 | 21 | public int removeOld(@Param("jobId") int jobId, @Param("limit") int limit); 22 | 23 | public int deleteByJobId(@Param("jobId") int jobId); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.dao; 2 | 3 | import com.xxl.job.admin.core.model.XxlJobLogReport; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | /** 11 | * job log 12 | * 13 | * @author xuxueli 2019-11-22 14 | */ 15 | @Mapper 16 | public interface XxlJobLogReportDao { 17 | 18 | public int save(XxlJobLogReport xxlJobLogReport); 19 | 20 | public int update(XxlJobLogReport xxlJobLogReport); 21 | 22 | public List queryLogReport(@Param("triggerDayFrom") Date triggerDayFrom, 23 | @Param("triggerDayTo") Date triggerDayTo); 24 | 25 | public XxlJobLogReport queryLogReportTotal(); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.dao; 2 | 3 | import com.xxl.job.admin.core.model.XxlJobUser; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author xuxueli 2019-05-04 16:44:59 11 | */ 12 | @Mapper 13 | public interface XxlJobUserDao { 14 | 15 | public List pageList(@Param("offset") int offset, @Param("pagesize") int pagesize, 16 | @Param("username") String username, @Param("role") int role); 17 | 18 | public int pageListCount(@Param("offset") int offset, @Param("pagesize") int pagesize, 19 | @Param("username") String username, @Param("role") int role); 20 | 21 | public XxlJobUser loadByUserName(@Param("username") String username); 22 | 23 | public int save(XxlJobUser xxlJobUser); 24 | 25 | public int update(XxlJobUser xxlJobUser); 26 | 27 | public int delete(@Param("id") int id); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.service.impl; 2 | 3 | import com.xxl.job.admin.core.thread.JobCompleteHelper; 4 | import com.xxl.job.admin.core.thread.JobRegistryHelper; 5 | import com.xxl.job.core.biz.AdminBiz; 6 | import com.xxl.job.core.biz.model.HandleCallbackParam; 7 | import com.xxl.job.core.biz.model.RegistryParam; 8 | import com.xxl.job.core.biz.model.ReturnT; 9 | import org.springframework.stereotype.Service; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * @author xuxueli 2017-07-27 21:54:20 15 | */ 16 | @Service 17 | public class AdminBizImpl implements AdminBiz { 18 | 19 | @Override 20 | public ReturnT callback(List callbackParamList) { 21 | return JobCompleteHelper.getInstance().callback(callbackParamList); 22 | } 23 | 24 | @Override 25 | public ReturnT registry(RegistryParam registryParam) { 26 | return JobRegistryHelper.getInstance().registry(registryParam); 27 | } 28 | 29 | @Override 30 | public ReturnT registryRemove(RegistryParam registryParam) { 31 | return JobRegistryHelper.getInstance().registryRemove(registryParam); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9084 3 | 4 | spring: 5 | profiles: 6 | active: @profile.active@ 7 | application: 8 | name: macula-cloud-xxljob 9 | cloud: 10 | nacos: 11 | username: ${nacos.username} 12 | password: ${nacos.password} 13 | config: 14 | server-addr: ${nacos.config.server-addr} 15 | namespace: ${nacos.config.namespace} 16 | # group: 17 | refresh-enabled: true 18 | file-extension: yml 19 | 20 | # 和环境有关的配置信息,不同环境覆盖此处的配置 21 | nacos: 22 | username: nacos 23 | password: nacos 24 | config: 25 | server-addr: 127.0.0.1:8848 26 | namespace: MACULA5 27 | 28 | --- 29 | spring: 30 | config: 31 | activate: 32 | on-profile: dev 33 | nacos: 34 | username: maculav5 35 | #password: 请通过启动命令赋予密码 36 | config: 37 | server-addr: 10.94.108.55:8848 38 | namespace: MACULA5 -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 2px; 9 | 10 | -webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, .2); 11 | -moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, .2); 12 | box-shadow: 2px 3px 5px rgba(0, 0, 0, .2); 13 | border-radius: 3px; 14 | border: 1px solid silver; 15 | 16 | background: white; 17 | font-size: 90%; 18 | font-family: monospace; 19 | 20 | max-height: 20em; 21 | overflow-y: auto; 22 | } 23 | 24 | .CodeMirror-hint { 25 | margin: 0; 26 | padding: 0 4px; 27 | border-radius: 2px; 28 | white-space: pre; 29 | color: black; 30 | cursor: pointer; 31 | } 32 | 33 | li.CodeMirror-hint-active { 34 | background: #08f; 35 | color: white; 36 | } 37 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/icon-ext.png -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/icon.png -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-0.gif -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-1.gif -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/macula-projects/macula-cloud/62bfbe2a76b96db7b81d9863f11552aef51f100a/macula-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-2.gif -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/main/resources/templates/common/common.exception.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Error 6 | 29 | 30 | 31 | 32 | 33 | 34 |
35 |

System Error

36 |

${exceptionMsg}

37 | Back 38 |

39 |
40 | 41 | 42 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/test/java/com/xxl/job/admin/controller/AbstractSpringMvcTest.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.controller; 2 | 3 | import org.junit.jupiter.api.BeforeEach; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.web.servlet.MockMvc; 7 | import org.springframework.test.web.servlet.setup.MockMvcBuilders; 8 | import org.springframework.web.context.WebApplicationContext; 9 | 10 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 11 | public class AbstractSpringMvcTest { 12 | 13 | @Autowired 14 | private WebApplicationContext applicationContext; 15 | protected MockMvc mockMvc; 16 | 17 | @BeforeEach 18 | public void setup() { 19 | this.mockMvc = MockMvcBuilders.webAppContextSetup(this.applicationContext).build(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/test/java/com/xxl/job/admin/core/util/JacksonUtilTest.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.core.util; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | import static com.xxl.job.admin.core.util.JacksonUtil.writeValueAsString; 9 | import static org.junit.jupiter.api.Assertions.assertEquals; 10 | 11 | public class JacksonUtilTest { 12 | 13 | @Test 14 | public void shouldWriteValueAsString() { 15 | //given 16 | Map map = new HashMap<>(); 17 | map.put("aaa", "111"); 18 | map.put("bbb", "222"); 19 | 20 | //when 21 | String json = writeValueAsString(map); 22 | 23 | //then 24 | assertEquals(json, "{\"aaa\":\"111\",\"bbb\":\"222\"}"); 25 | } 26 | 27 | @Test 28 | public void shouldReadValueAsObject() { 29 | //given 30 | String jsonString = "{\"aaa\":\"111\",\"bbb\":\"222\"}"; 31 | 32 | //when 33 | Map result = JacksonUtil.readValue(jsonString, Map.class); 34 | 35 | //then 36 | assertEquals(result.get("aaa"), "111"); 37 | assertEquals(result.get("bbb"), "222"); 38 | 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/test/java/com/xxl/job/admin/dao/XxlJobLogGlueDaoTest.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.dao; 2 | 3 | import com.xxl.job.admin.core.model.XxlJobLogGlue; 4 | import org.junit.jupiter.api.Test; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | 7 | import javax.annotation.Resource; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 12 | public class XxlJobLogGlueDaoTest { 13 | 14 | @Resource 15 | private XxlJobLogGlueDao xxlJobLogGlueDao; 16 | 17 | @Test 18 | public void test() { 19 | XxlJobLogGlue logGlue = new XxlJobLogGlue(); 20 | logGlue.setJobId(1); 21 | logGlue.setGlueType("1"); 22 | logGlue.setGlueSource("1"); 23 | logGlue.setGlueRemark("1"); 24 | 25 | logGlue.setAddTime(new Date()); 26 | logGlue.setUpdateTime(new Date()); 27 | int ret = xxlJobLogGlueDao.save(logGlue); 28 | 29 | List list = xxlJobLogGlueDao.findByJobId(1); 30 | 31 | int ret2 = xxlJobLogGlueDao.removeOld(1, 1); 32 | 33 | int ret3 = xxlJobLogGlueDao.deleteByJobId(1); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/test/java/com/xxl/job/admin/dao/XxlJobRegistryDaoTest.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.dao; 2 | 3 | import com.xxl.job.admin.core.model.XxlJobRegistry; 4 | import org.junit.jupiter.api.Test; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | 7 | import javax.annotation.Resource; 8 | import java.util.Arrays; 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 13 | public class XxlJobRegistryDaoTest { 14 | 15 | @Resource 16 | private XxlJobRegistryDao xxlJobRegistryDao; 17 | 18 | @Test 19 | public void test() { 20 | int ret = xxlJobRegistryDao.registryUpdate("g1", "k1", "v1", new Date()); 21 | if (ret < 1) { 22 | ret = xxlJobRegistryDao.registrySave("g1", "k1", "v1", new Date()); 23 | } 24 | 25 | List list = xxlJobRegistryDao.findAll(1, new Date()); 26 | 27 | int ret2 = xxlJobRegistryDao.removeDead(Arrays.asList(1)); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /macula-cloud-xxljob/src/test/java/com/xxl/job/admin/util/I18nUtilTest.java: -------------------------------------------------------------------------------- 1 | package com.xxl.job.admin.util; 2 | 3 | import com.xxl.job.admin.core.util.I18nUtil; 4 | import org.junit.jupiter.api.Test; 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | import org.springframework.boot.test.context.SpringBootTest; 8 | 9 | /** 10 | * email util test 11 | * 12 | * @author xuxueli 2017-12-22 17:16:23 13 | */ 14 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 15 | public class I18nUtilTest { 16 | private static Logger logger = LoggerFactory.getLogger(I18nUtilTest.class); 17 | 18 | @Test 19 | public void test() { 20 | logger.info(I18nUtil.getString("admin_name")); 21 | logger.info(I18nUtil.getMultString("admin_name", "admin_name_full")); 22 | logger.info(I18nUtil.getMultString()); 23 | } 24 | 25 | } 26 | --------------------------------------------------------------------------------